- PVSM.RU - https://www.pvsm.ru -

Вчера CSS исполнилось 20 лет. Интервью с Хоконом Виумом Ли (Часть 2)

Продолжение. Первая часть [1] была опубликована вчера.


Почему вы предпочли блочную модель, в которой отступы, границы и поля добавляются к заданной ширине, а не модель box-sizing: border-box из IE5?

Есть подходящие случаи использования для обеих моделей. Если вы хотите, чтобы изображение растягивалось, чтобы заполнить блок — оригинальная модель CSS подходит лучше. А если надо, чтобы поля и границы не выходили за пределы определённой области, лучше модель IE5. Лично я думаю, что случаев, для которых лучше подходит стандартная модель CSS, больше, но некоторые люди, которых я очень уважаю, считают иначе. Этот конфликт был изящно разрешён добавлением свойства box-sizing, которое сейчас поддерживают все браузеры.

Я никогда не любил абсолютное позиционирование. Я не прав? Как оно появилось в спецификации?

Ваш вопрос возвращает меня в 1996 год, когда по этому поводу шли жаркие дебаты. В двух словах: Microsoft предлагала ввести абсолютное позиционирование в черновике CSS Regions: Absolute Positioning and Z-Ordering [2] (к сожалению, обсуждение проходило в закрытом списке рассылки W3C, вот ближайший по смыслу общедоступный документ [3]). У некоторых членов сформированной недавно рабочей группы по CSS возникли сомнения, и Берт и я написали упрощенное встречное предложение. В нём мы предлагали избавиться от свойства position (и использовать вместо него display) и описали только относительно позиционирование (что давало нам время хорошенько продумать позиционирование абсолютное). Тем не менее, Microsoft уже реализовала собственное предложение и не хотела убирать эту функцию. В конце концов единственными существенными изменениями были добавление свойств right и bottom в дополнение к left и top и position: fixed. В таком виде спецификация стала частью стандарта CSS2 [4].

Как и вам, мне никогда не было приятно работать с абсолютным позиционированием. Тем не менее, оно нашло своё место в веб-разработке, и иногда я его использую, чтобы сделать то, что по-другому сделать трудно или невозможно.

Иногда мне приходится слышать, что неправильно использовать плавающие блоки для вёрстки, так как они для этого «не предназначены» — они были задуманы только чтобы задавать обтекание картинок текстом. Разве это имеет значение, если такой метод верстки хорошо работает?

Обтекание картинок текстом — одна из базовых техник вёрстки, так что плавающие блоки безусловно могут использоваться в ней. Одно из направлений, в котором, по-моему должен развиваться стандарт CSS — разбитые на страницы презентации [5]. Когда ваш контент явным образом разбит на страницы, плавающие блокаи становятся ещё более важными, так как можно привязывать их к верху и низу страницы.

Если бы у вас была волшебная палочка, какую часть CSS вы бы удалили бесследно, и что бы вы наоборот, добавили повсеместно?

Я бы выбросил любой код, привязанный к конкретным версиям браузеров, вроде &lt!--[if lt IE 7 ]&gt. Хотя, строго говоря, такие «комментарии» не являются частью CSS, они не должны использоваться нигде — они сильно понижают стандарты веба.

Вторая часть вашего вопроса гораздо интереснее. В 2006 году я бы добавил веб-шрифты [6]. В 2007 — элемент &ltvideo&gt [7] (если позволить себе ненадолго вторгнуться на территорию HTML). Сейчас обе эти возможности поддерживают все браузеры.

В 2011 году, видя, как многие приложения предпочитают разбивать контент на страницы, вместо использования скроллинга, я начал продвигать мысль о том, что веб-страницы должны стать настоящими страницами [8]. Суть идеи состояла в том, что в стилях можно будет включить страничный режим, в котором содержимое документа разделяется на отдельные страницы. Их можно будет перелистывать жестами или клавишами PageUp и PageDown. Я хочу, чтобы в браузере было легко создавать приложения для чтения книг. Вот для этого мне бы пригодилась магия. У вас, случайно, не найдётся немного волшебной пыльцы, чтобы развеять её над подушками всех производителей браузеров?

По чему до сих пор нет способа сверстать страницу, который не требует двух высших образований? (Я говорю о тебе, flexbox...)

Вёрстка — сложное дело, а вёрстка для веба ещё сложнее, потому что страницы должны отображаться на множестве устройств. В CSS есть несколько механизмов для вёрстки, включая абсолютное позиционирование, плавающие блоки, многоколоночную вёрстку и таблицы. Сочетать эти механизмы бывает нелегко, но не думаю, что для этого нужны два высших образования. Правда, должен признаться, я пока не слишком много использовал flexbox.

Как вы относитесь к препроцессорам, таким как SASS и LESS? CSS есть чему у них поучиться?

Да, препроцессоры — полезная штука. Думаю нам стоит взять пяток самых популярных вещей из препроцессоров и включить их в состав CSS. Лично мне очень нравятся вложенные селекторы и однострочные комментарии (которые начинаются с //). Когда CSS исполнится 50 лет, я вам расскажу, почему они не были включены в стандарт с самого начала.

Вы один из членов WHATWG. Как вы туда попали?

WHATWG была сформирована, когда стало понятно, что W3C отходит от работы над HTML и концентрируется на составных документах [9], основанных на XHTML, XForms, SMIL и SVG. Для изготовителей браузеров HTML был слишком важен, чтобы вот так его забросить. Поэтому Ян Хиксон, который в то время работал вместе со мной в Opera, основал WHATWG, чтобы продолжить работу над паутиной, какой мы её знали. Кроме того, у нас вызвал сомнения майкрософтовский XAML [10], который представлял собой тонкий слой XML поверх проприетарного языка приложений. Поэтому WHATWG сконцентрировалась на веб-приложениях, а не на документах. Ян продолжает делать замечательную работу [11] в качестве редактора стандарта HTML.

Вы отец CSS, и тем не менее вы недавно опубликовали несколько спецификаций под эгидой WHATWG, а не рабочей группы по CSS в составе W3C. Почему?

Действительно, над стандартами по иллюстрациям (CSS figures [12]) и книгам (CSS books [13]) сейчас работает именно WHATWG. Публикация стандартов в WHATWG имеет несколько важных преимуществ. Модель «живого стандарта» позволяет делать быстрые обновления с минимальными накладными расходами; в прошлом было очень трудно публиковать рабочие черновики W3C в этой области. Я горячо поддерживаю WHATWG в стремлении поддерживать стандарты в таком состоянии, чтобы они лишь слегка опережали текущий уровень реализации, а не уходили далеко вперёд [14], так что у разработчиков опускаются руки.

Последний вопрос: справляется ли CSS со своими задачами? Или может быть нам лучше прейти на другую модель, например Grid Style Sheets [15]?

Итан Мансон и Филип М. Мэрден писали в 1999 году, что «языки стилей исследованы очень плохо». Это утверждение правдиво до сих пор, и попытки изучать и улучшать языки стилей можно только приветствовать.

GSS — это очень интересный пример, его создатели применяют алгоритм удовлетворения ограничений Cassowary [16] к механизму таблиц стилей. В моей первоначальной реализации CSS я использовал для разрешения конфликтов между противоречивыми выражениям алгоритм SkyBlue [17]. (Кстати, оба этих алгоритма разработаны в Вашингтонском университете.) Алгоритм удовлетворения ограничений позволяет выражать отношения между произвольными элементами и автомагически разрешать конфликты. Но всё значительно усложняется, когда элементы постоянно исчезают и добавляются, как это бывает при манипуляции с DOM. Так же нужно очень осторожно работать с кольцевыми зависимостями. Поэтому от идеи позволить CSS выражать ограничения вёрстки между любыми элементами пришлось отказаться на ранней стадии развития.

В прошлом, чтобы добавить поддержку нового стандарта, надо было убедить всех разработчиков браузеров потратить на это своё драгоценное время. Это становилось серьёзным препятствием, пожалуй даже слишком. В наши дни возможности браузеров можно расширять с помощью JavaScript. Стало гораздо легче ставить эксперименты и проводить исследования, которых давно заслуживают таблицы стилей.

Возвращаясь к вашему вопросу: справляется ли CSS со своими задачами? Я думаю, да. Я не вижу в обозримом будущем ничего, что заставило бы меня думать иначе. Появляются новые идеи, но они скорее расширяют CSS, чем заменяют. Я верю, что код CSS, который мы пишем сегодня, будет понятен компьютерам и через 500 лет.

Спасибо. С днем рождения, CSS!

Автор: ilya42

Источник [18]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/veb-dizajn/71388

Ссылки в тексте:

[1] Первая часть: http://habrahabr.ru/post/239951/

[2] CSS Regions: Absolute Positioning and Z-Ordering: https://lists.w3.org/Archives/Member/html-erb/1996OctDec/att-0282/WD-regions-positioning-961121.htm

[3] общедоступный документ: http://www.w3.org/TR/WD-positioning-970131

[4] частью стандарта CSS2: http://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#choose-position

[5] разбитые на страницы презентации: http://alistapart.com/blog/post/ten-css-one-liners-to-replace-native-apps

[6] веб-шрифты: http://web.archive.org/web/20111109020901/http://news.cnet.com/Microsofts-forgotten-monopoly/2010-1032_3-6085417.html

[7] элемент &ltvideo&gt: http://people.opera.com/howcome/2007/video/

[8] веб-страницы должны стать настоящими страницами: http://people.opera.com/howcome/2011/reader/

[9] составных документах: http://www.w3.org/2004/04/webapps-cdf-ws/

[10] XAML: https://ru.wikipedia.org/wiki/XAML

[11] замечательную работу: https://html.spec.whatwg.org/multipage/

[12] CSS figures: https://figures.spec.whatwg.org/#wrapping-around-page-floats-and-other-elements

[13] CSS books: https://books.spec.whatwg.org/

[14] лишь слегка опережали текущий уровень реализации, а не уходили далеко вперёд: https://wiki.whatwg.org/wiki/FAQ#What_does_.22Living_Standard.22_mean.3F

[15] Grid Style Sheets: http://gridstylesheets.org/

[16] Cassowary: http://en.wikipedia.org/wiki/Cassowary_%28software%29

[17] SkyBlue: http://constraints.cs.washington.edu/solvers/skyblue-tr-92.html

[18] Источник: http://habrahabr.ru/post/240055/