В этот день двадцать лет назад нынешний CTO Opera Хоком Виум Ли опубликовал предложение по каскадным таблицам стилей для HTML. Если бы Пол Маккартни был веб-разработчиком, и писал сегодня песню «Оркестр клуба одиноких сердец сержанта Пеппера», то наверное у него получилось бы что-то вроде:
It was twenty years ago today
That Håkon wrote a doc to say
That if the Web’s gonna last a while
Then we need a way to define style.
So may I introduce to you
a way to add visual treats:
It’s Sergeant Håkon’s Cascading Style Sheets!
Но, когда мы пришли к Полу домой и попросили его спеть для нас эту песню, он отказался и спустил на нас собак по имени FontTag и Bgcolor. Поэтому, чтобы отметить такую круглую дату, мы пошли к Хокону и задали ему несколько вопросов о прошлом, настоящем и будущем CSS.
Вы придумали CSS 20 лет назад. Вы довольны тем, каким выросло ваше детище?
Да, я очень доволен. CSS — это краеугольный камень веб-стандартов, и благодаря ему страницы выглядят намного красивее. Тот факт, что сам HTML до сих пор жив и процветает, возможен в том числе и благодаря успеху CSS. Но, как всегда бывает с молодёжью, ещё есть куда расти.
Люди часто цитируют ваши слова о том, что вы предложили CSS, чтобы спасти HTML. Поясните эту мысль, пожалуйста.
HTML был бы совсем другим, если бы не CSS. Верстальщики с опытом работы в десктопной среде, в том числе и я, придя в веб, были совершенно сбиты с толку из-за отсутствия тэгов <color> и <font>. Когда в 1993 году я впервые опубликовал документ в паутине, мне пришлось преобразовывать текст в картинки — вот как это выглядело. Если бы дела пошли так и дальше, веб мог бы превратиться в гигантский факсимильный аппарат, где весь текст передавался бы в виде картинок. Это был бы кошмар для слепых пользователей или поисковых роботов. Я предложил CSS для того, чтобы предотвратить это, дав авторам возможность создавать выразительный дизайн, не засоряя HTML.
В первоначальном варианте спецификации был предложен механизм задания «влияния», который выглядел вот так: h1.font.size = 24pt 100%
. Предполагалась такая логика работы:
Значение в процентах в в конце строки задаёт требуемый уровень влияния (здесь — 100%). Если это таблица стилей верхнего уровня (то есть она под полным контролем пользователя), запрос уровня влияния может быть удовлетворён полностью, например, все заголовки будут отображаться шрифтом Helvetica. Если же уровень влияния запрашивается в нижестоящих стилях, он удовлетворяется в тех пределах, которые позволяют вышестоящие.
Почему от этого механизма отказались?
Он был предложен, чтобы найти компромисс между предпочтениями автора документа и читателей. Источником вдохновения служила идея из MIT Media Lab — в будущем телевизоры должны иметь регуляторы, управляющие не только яркостью и цветом, но и уровнями секса и насилия или, скажем, левых и правых политических взглядов. Механизм влияния предполагал создание подобного «слайдера» на одном конце которого отображение документа полностью контролировал автор, а на другом — читатель. А браузер должен был смешивать их предпочтения в заданной пропорции, чтобы все были довольны. Это хорошо работало для некоторых свойств (например, font-size
), но создаваля проблемы для других (например, font-family
). В первом же ответе на предложение CSS Берт Бос раскритиковал эту идею:
Мысль о том, что два варианта дизайна можно смешать, приведя к некому среднему стилю, кажется мне абсолютно неправильной. Что будет, если мой синий текст на жёлтом фоне смешать с чьим-то любимым жёлтым на синем? Зелёный на зелёном? Или представь себе страницу с заголовками, набранными авангардными декоративными шрифтами, и абзацами текста, набранными Гельветикой.
Некоторые атрибуты смешиваются лучше, чем другие. Типичный случай использования «взвешенного среднего» — смягчить попытки автора выделить что-то, например с помощью изменения размера шрифта, и при этом всё же донести его мысль до читателя. Никто не обязан использовать эту возможность, но хоть «100%» по смыслу ничем не отличатся от двоичной единицы, двоичная логика не оставляет места для манёвра. Компьютерные интерфейсы вообще кажутся мне слишком двоичными.
Конечно же, Берт был прав (он прав почти всегда) в том, что это предложение создаёт больше проблем, чем решает, и от него пришлось отказаться.
Тот же вопрос о написании имен свойств через точки, в стиле JavaScript. Почему от него отказались?
Интересно, что вы называете его «стилем JavaScript». Когда я писал своё предложение, JavaScript ещё не придумали, так что я не мог взять этот синтаксис оттуда. На самом деле источником вдохновения служили X-ресурсы из X Window System, ещё одного проекта от MIT.
Было две причины, по которым синтаксис CSS перешёл от font.size
к font-size
. Во-первых, дефис делал код более похожим на обычный текст на английском языке, то есть более читабельным. Во-вторых, в DSSSL и DSSSL-Lite имена свойств писались именно через дефис. Джеймс Кларк, который написал первый набросок DSSSL-Lite, участвовал в первой конференции W3C по таблицами стилей, и Берт и я позаимствовали дефис из DSSSL. Но у этого синтаксиса есть и недостаток — дефис используется в качестве знака «минус», что может сбить с толку парсер.
Как Берт Бос включился в работу над проектом, и как вам работалось вместе?
Берт Бос написал отзыв на моё первоначально предложение. Его опыт и интересы немного отличались от моих, но когда он опубликовал своё собственное предложение, мы быстро поняли, что оба варианта надо объединить. Как раз в это время ЦЕРН передал веб в общественное достояние и был сформирован консорциум W3C. Я занимался созданием филиала W3C в INRIA и сразу же нанял Берта. Большая часть стандарта CSS1 родилась на маркерной доске в технопарке София-Антиполис. До сих пор, сражаясь с очередной сложной технической проблемой, я мечтаю о том, чтобы Берт и эта доска были рядом.
Перечисляя людей, благодаря которым CSS стали реальностью, я должен упомянуть еще и Томаса Риардона и Криса Уилсона из Microsoft. Томас был руководителем программы Internet Explorer, и он с самого начала загорелся идеей сделать таблицы стилей частью веб. Крис Уилсон — программист, который занимался внедрением CSS в IE3. Реализация CSS в IE3 была довольно далека от стандарта, но нельзя забывать, что этот браузер вышел ещё до того, как была закончена спецификация CSS1. Саймон Дэниэлс (тоже из Microsoft) написал несколько впечатляющих демок для IE3, и в итоге они втроём убедили ведущую софтверную компанию поддержать молодой стандарт.
Были ли альтернативные предложения? Чем ваше было лучше?
Было около десятка альтернативных предложений по синтаксису стилей. Но далеко не все они были пригодны для использования в паутине из-за её специфики. Например, браузеры рнедерят документ последовательно, по мере загрузки, и должны уметь делать это даже если стили пока недоступны. Кроме того, в интернете встречается множество разных устройств, и нельзя писать отдельную таблицу стилей для каждого из них. Так что язык стилей должен поддерживать масштабируемымый и адаптивный дизайн. Это захватывающая тема для исследований, я даже защитил диссертацию в которой сравнил разные подходы к организации таблиц стилей.
Конечно, на второй вопрос я не могу ответить непредвзято. Я уверен, что в CSS есть несколько моментов, которые делают язык особенно подходящим для использования в вебе: каскадирование, псевдоклассы и псевдоэлементы, правила парсинга с прямой совместимостью, поддержка разных типов медиа, акцент на использование селекторов и, конечно, единица измерения em
.
Какова была ваша (и Берта) самая большая ошибка?
В моей диссертации целый раздел посвящен недостаткам CSS. Да, они есть, в том числе и по нашей вине. Но самой большой проблемой первой версии был не дизайн самого языка (на мой взгляд, он довольно неплох), но реализация его в браузерах. Ситуацию хорошо описал Джеффри Зельдман:
Если Netscape 3 игнорировал правила CSS для элемента
<body>
и добавлял произвольные поля структурным элементам страницы, а IE4, хоть и работал с<body>
правильно, но путался сpadding
, как нужно было писать код CSS? Некоторые разработчики предпочитали его вообще не писать. Другие писали один файл с учётом недостатков IE4, и другой с хаками для Netscape 4.
Конечно, часть вины лежит на Microsoft и Netscape, но и мы — я, Берт, W3C — могли бы избежать многих проблем, если бы с самого начала опубликовали не только спецификацию, но и набор тестов. Первый настоящий тест для CSS появился только в октябре 1998, когда Тодд Фарнер опубликовал Acid test. Тест был необычным и визуальным — разработчики могли сразу понять, проходит ли браузер тест, или нет. В начале ни один браузер его не мог пройти его. Но затем, под сильным давление сообщества CSS, ситуация начала улучшаться. Проект WaSP сыграл ключевую роль в улучшении поддержки стандартов. Свой вклад внёс и браузер Opera, показав, что вполне возможно реализовать CSS корректно. Когда я увидел, насколько хорошо Opera поддерживала CSS (намного лучше, чем Microsoft и Netscape), я присоединился к Opera.
До этого одной из фишек Opera было то, что их браузер помещался на одну дискету (1,44 Мб). В те времена фраза «помещается на дискету» была классным рекламным слоганом. С добавлением CSS одной дискеты стало не хватать. «Почти помещается на дискету» звучало уже совсем не так круто.
Оригинальный тест Acid стал образцом для Acid2 и Acid3, которые следовали тому же рецепту: веб-страница с хитрой вёрсткой, по которой сразу видно, насколько хорошо поддерживаются множество особенностей языка. Толчком к разработке Acid2 стало открытое письмо Билла Гейтса, где он горячо высказался в поддержку совместимости. Сделать IE7 совместимым со стандартами выглядело логичным следующим шагом, и Acid2 стал нашим вызовом Microsoft. Честно говоря, у других браузеров тоже были проблемы, и Acid2 находил ошибки во всех них. Microsoft проигнорировала Acid2 в IE7, но — иногда случаются чудеса — IE8 проходил его безупречно. Так же как и все современные браузеры.
Продолжение следует...
Автор: ilya42