Это глава 20 книги Håkon Wium Lie, Bert Bos, Cascading Style Sheets, designing for the Web. Второе издание. «Addison Wesley», 1999. ISBN 0-201-59625-3.

Сага CSS началась в 1994 году. Один из авторов книги работает в CERN, колыбели веба, а веб начинает использоваться как платформа для электронных публикаций. Но одна решающая часть платформы упущена: нет способа оформлять документы стилями. Например, для веб-страницы нельзя задать верстку как в газете. Работая над персонализированными «газетными» презентациями в Медиа-лаборатории MIT, Хаукам ощутил необходимость в языке таблиц стилей для веба.

Таблицы стилей в браузерах не были совершенно новой идеей. Разделение структуры документа и ее представления была целью HTML, начиная с создания языка в 1990 году. Тим Бернерс-Ли написал свой браузер-редактор NeXT таким образом, чтобы представление определялось простой таблицей стилей. Но он не документировал синтаксис для стилей, полагая, что это дело каждого браузера, как лучше показывать страницы своим пользователям. Другие браузеры, включая Viola Пей Вея (1992 год) и Harmony (1993 год) ( Система Hyper-G была одним из конкурентов в раннем вебе.) для системы Hyper-G имели схожие языки стилей.

Но, вместо более продвинутых таблиц стилей, браузеры, выходившие далее, предлагали пользователям меньше и меньше возможностей влиять на стиль. В 1993 году вышел NCSA Mosaic — браузер, сделавший сеть популярной. Однако в отношении стилей это был шаг назад — пользователям позволялось только менять цвета и шрифты.

Между тем, авторы веб-страниц жаловались, что у них недостаточно влияния на вид страниц. Один из первых вопросов от авторов-новичков в Сети, был «как менять шрифты и цвета элементов?» В HTML на то время такой возможности не было, и к лучшему. Вот отрывок сообщения, посланного в список рассылки www-talk в начале 1994 года, отражающий напряженность между авторами и разработчиками:

(Сообщение доступно из архива www-talk.)

На деле, весь прошедший год источником постоянного восторга было непрестанно говорить буквально полчищам людей, которые хотели (приготовьтесь, сейчас будет!) контролировать то, как документы выглядят, с той же легкостью, как это делается в TeX, Microsoft Word и любой другой распространенной среде редактирования текста: «Простите, тут вы ограничены».

Автор сообщения — Марк Андреессен, один из программистов NCSA Mosaic. Позже он стал сооснователем Netscape, и тогда его взгляды на форматирование (если они когда-то были его взглядами) поменялись. 13 октября 1994 года Марк Андреессен сообщил в www-talk о том, что первая бета-версия Mozilla (то, что позже стало Netscape Navigator) доступна для тестирования. Среди новых тегов, которые поддерживал новый браузер, был center и другие теги, которые появились вскоре.

За три дня до того, как Netscape сообщил о выходе браузера, Хаукам опубликовал первый черновик Каскадных таблиц стилей HTML. Дейв Раггетт (главный архитектор HTML 3.0) способствовал выходу черновика до грядущей конференции «Mosaic and the Web» (Конференция «Mosaic and the Web» проходила 17-20 октября 1995 года). Это была вторая конференция из тех, что позже стали Серией конференций WWW.) в Чикаго. Дейв понимал, что HTML мог бы и должен не превращаться в язык описания страниц, и что для удовлетворения требований авторов нужен более подходящий механизм. Хотя первая версия документа была незрелой, она предоставляла полезную почву для обсуждений.

Среди людей, отозвавшихся на первый черновик CSS, был Берт Бос, соавтор этой книги. В то время он делал Argo (Браузер Argo был частью проекта по обеспечению доступности Интернета ученым-гуманитариям. Он включал плагины (там они назывались апплетами) до того, как они появились в Netscape.), хорошо настраиваемый браузер с таблицами стилей, и он решил объединить усилия с Хаукамом. Оба из двух черновиков не похожи на современные CSS, но не так сложно узнать первоначальные принципы.

Одной из возможностей языка стилей Argo было то, что он был достаточно общим, чтобы применяться к другим языкам разметки помимо HTML. Это также стало и целью разработки CSS, и из названия спецификации вскоре изъяли «HTML». Argo также имел другие особые возможности, которые не воплотились в CSS первого уровня: в частности, селекторы атрибутов и генерируемый текст. Обеим возможностям пришлось подождать CSS2.

«Каскадные таблицы стилей» не были в то время единственным предложенным языком стилей. На июнь 1993-го был язык Пей Вея из браузера Viola, и Роберт Райш из издательского дома O'Reilly написал другой. Потом еще был DSSSL, сложный язык стилей и преобразований разработки ISO для печати документов SGML. Предположительно, DSSSL мог применяться и к HTML. Но CSS включал одну возможность, выделявшую язык среди других: он принимал во внимание, что в Сети стиль документа не мог быть разработан одним автором или читателем, но их желания должны как-то совмещаться, «каскадироваться»; и на деле учитываться должны не только желания автора и читателя, но и возможности устройства отображения и браузера.

Как и планировалось, первый черновик CSS был представлен на Веб-конференции в Чикаго в ноябре 1994-го. Представление на Дне разработчика вызвало много обсуждений. Во-первых, идея совмещения предпочтений автора и пользователя была нова. Вымышленный снимок экрана показывал регулятор-ползунок с подписями «пользователь» и «автор» на разных концах. Подстраивая регулятор, пользователь мог менять объединение собственных и авторских предпочтений. Во-вторых, CSS воспринимался некоторыми как слишком простой для своей задачи. Они утверждали, что для применения стилей к документам нужна мощь полноценного языка программирования. CSS пошел по совершенно другому пути, будучи простым декларативным форматом.

На следующей Конференции WWW в апреле 1995 года CSS снова представлялся (WWW3, третья конференция, проходила 10-14 апреля 1995 года в Дармштадте (Германия).). Там были Берт и Хаукам (на самом деле, это была наша первая личная встреча), тогда мы также могли показать реализации. Берт представил поддержку таблиц стилей в Argo, и Хаукам показал версию браузера Arena, который был изменен для поддержки CSS. Arena был написан Дейвом Раггеттом как площадка для опробования новых идей, и одной из таких идей были таблицы стилей. То, что началось с технических презентаций, вылилось в политические обсуждения о балансе между автором и читателем. Представители стороны авторов утверждали, что автор должен целиком отвечать за представление документов. Например, говорилось, что могут существовать правовые требования на размер предупреждающих пометок, и пользователь не должен быть способен уменьшить размер шрифта для таких предупреждений. Другая сторона, к которой принадлежат авторы этой книги, утверждала, что, если есть противоречия, последнее слово должно быть за пользователем, чьи глаза и уши в конечном счете будут воспринимать представление.

За пределами политических сражений продолжалась техническая работа. В мае 1995-го был создан список рассылки www-style, и обсуждения в нем часто влияли на разработку спецификации CSS. Три года спустя в архиве было уже более 4 000 сообщений.

В 1995 году Консорциум WWW (W3C) также приступил к работе. Компании вступали в Консорциум высокими темпами, и организация была упрочена. Семинары на различные темы стали удачным местом встреч членов и сотрудников W3C и обсуждений технических разработок. Поэтому было решено организовать другой семинар, посвященный таблицам стилей. Технический персонал W3C, работающий над таблицами стилей (а именно, два автора этой книги), теперь расположился в Софии-Антиполисе на юге Франции, где W3C открыл европейское представительство. Южная Франция — не худшее место, куда можно приманить участников семинара, но, так как многие из возможных участников были из США, семинар было решено провести в Париже, который лучше обслуживается международными авиарейсами. Семинар также был экспериментом для проверки, возможно ли для W3C организовать события вне США. Действительно, это оказалось возможным, и семинар стал вехой в завоевании таблицами стилей своего законного места в Сети. Среди участников был Томас Рирдон из Microsoft, который поручился за поддержку CSS в последующих версиях Internet Explorer.

К концу 1995-го W3C основал HTML Editorial Review Board (HTML ERB) для утверждения будущих спецификаций HTML. Так как таблицы стилей были в сфере интересов членов новой группы, спецификация CSS была взята в разработку с целью сделать ее Рекомендацией. Членом HTML ERB был Лу Монтулли из Netscape. Как только Microsoft сообщили о добавлении в свой браузер поддержки CSS, было важно также вовлечь Netscape. Иначе, с браузерами, поддерживающими разные спецификации, мы могли бы видеть, как Сеть расходится в разных направлениях. Сражения внутри HTML ERB были продолжительными и тяжелыми, но CSS первого уровня окончательно появился в качестве Рекомендации W3C в декабре 1996 года.

В феврале 1997-го CSS получили свою рабочую группу в W3C, и была начата работа над возможностями, которых не было в CSS1. Группа была возглавлена Крисом Лайлли, шотландцем из Манчестерского университета. CSS второго уровня стали Рекомендацией в мае 1998 года, и третий уровень, возможно, следовал в концу 1999-го. В то время на CSS для представления полагался не только HTML. Многие основанные на XML форматы также нуждались в CSS, и браузеры, которые вышли в конце 1998 года, продемонстрировали первые, еще до некоторой степени ограниченные шаги к представлению данных XML.

Рабочая группа W3C, официально называющаяся «Рабочая группа по таблицам стилей и форматирующим свойствам», так как занимается она больше чем просто CSS, включает около 15 членов, представленных компаниями и организациями, входящими в Консорциум. Они проживают в разных уголках мира, так что «встречи» обычно проходят по телефону, примерно по часу каждую неделю. Примерно четыре раза в год они встречаются где-то в мире. Последними местами сбора были Прово, Редмонд, Сан-Франциско и Париж. В Париже встреча проходила в офисах EDF-GDF, французской электрической и газовой компании. На том собрании группе предложили великолепный обед: французская кухня, возвышающаяся над Парижем и Сеной — один из немногих эффектных моментов в истории тяжелого труда технической рабочей группы. Каждый француз бы позавидовал — обычно они там ничего не получают просто так от своего поставщика газа и электричества.

Браузеры

Сага о CSS не будет полной без раздела о браузерах. Не будь разработанными для браузеров, CSS так и остались бы возвышенным планом, представляющим только академический интерес. Первым коммерческим браузером с поддержкой CSS был Microsoft Internet Explorer 3, вышедший в августе 1996 года. На тот момент спецификация CSS1 еще не стала Рекомендацией W3C, и дебаты в HTML ERB, должны были привести к изменениям, которые разработчики из Microsoft во главе с Крисом Уилсоном не могли предвидеть. IE3 надежно поддерживает большинство свойств цвета, фона, шрифта и текста, но не реализует большую часть блочной модели.

Следующим браузером, объявившим о поддержке, был Netscape Navigator 4-й версии. Поначалу Netscape был скептически настроен в отношении таблиц стилей, и первая реализация была вялой попыткой остановить заявления Microsoft о лучшей совместимости со стандартами. Реализация Netscape поддерживает широкий спектр возможностей (например, плавающие элементы), но разработчики не имели времени полностью проверить все возможности, которые они предположительно поддерживают. В итоге, многие свойства CSS не могут использоваться в 4-м Навигаторе.

На внутреннем уровне Netscape реализовал CSS при помощи перевода стилевых правил во фрагменты JavaScript, которые далее исполнялись с другими скриптами. Компания также решила позволить разработчикам писать JSSS, пропуская собственно CSS. Если бы JSSS приобрел популярность, Сеть получила бы один лишний язык стилей. К счастью для CSS, это не воплотилось в реальность.

Тем временем Microsoft продолжали пытаться свергнуть Netscape с трона господствующих браузеров. В Internet Explorer 4 движок отображения (который, помимо прочего, отвечал за обработку CSS) был заменен модулем с кодовым названием «Trident». Trident устранил множество ограничений IE3, но также привнес свои ограничения и ошибки. IE4 не поддерживает полностью CSS1 — это было отмечено Проектом веб-стандартов (WaSP) в ноябре 1998 года, когда они опубликовали «Главные десять проблем IE» (рисунок 20.1).

Рисунок 20.1. Проект WaSP отслеживает соответствие браузеров Рекомендациям W3C. Одним из их первых обзоров была поддержка CSS в Microsoft Internet Explorer.

Снимок страницы WaSP о Microsoft Internet Explorer

В дополнение к отображению статических документов, Trident также способен динамически менять стилевые свойства. Например, элементы можно анимировать при помощи последовательного изменения их свойств top и left, таким образом создавая «Динамический HTML» (DHTML). В принципе, DHTML очень похож на JSSS (они вместе используют скриптовые языки для установки стилевых свойств), но DHTML никогда не позиционировался как альтернатива языку таблиц стилей. В самом деле, CSS является неотъемлемой частью DHTML.

Третьим браузером, осмелившимся на поддержку CSS, стала Opera. Браузер от небольшой норвежской компании получил известность как маленький (он входит на дискету) и настраиваемый при поддержке большинства возможностей более крупных предложений от Microsoft и Netscape. Opera 3.5 вышла в ноябре 1998 года и поддерживает большую часть CSS1. Разработчики Opera (а именно, Геир Иварсой) также нашли время протестировать свою реализацию до ее выпуска. Проверочный набор CSS1, разработанный Эриком Мейером с помощью несчетного числа других добровольцев, сделал для разработчиков проверку и улучшение продуктов значительно проще.

На момент написания этого текста, Netscape и Microsoft также усиленно работают над выходом следующих браузеров. Netscape решил заменить движок отображения Навигатора на «nglayout», написанный на скорую руку с CSS в качестве одной из основ. Их новый браузер имеет кодовое имя «Gecko», и вы можете загрузить бета-версии с http://www.mozilla.org. Microsoft выпускает предварительные версии Internet Explorer 5. Некоторые улучшения по части CSS уже есть, и ожидается, что проект WaSP напомнит компании, что еще нужно проделать некоторую работу для полной поддержки CSS1.

Веб-сайт этой книги будет содержать ссылки на последние CSS-браузеры.