Модуляризация CSS
Перевод статьи CSS Modularization , написанной @fantasai . С разрешения автора.
Когда CSS Level 3 только создавался, он задумывался как взаимосвязанный набор модульных спецификаций, воссоздающих CSS Level 2 и добавляющих более сложные функции и новые системы раскладки. Каждая глава в CSS2 была выделена в отдельный «модуль», и созданы дополнительные модули для построения новой системы, называемой CSS3. В отличие от монолитного CSS2, каждый компонент CSS3, таким образом, представлял собой отдельную спецификацию, которую можно было писать независимо, и чье взаимодействие с другими модулями (в отличие от запутанных глав CSS2) можно было четко сформулировать и понять.
Однако для того, чтобы реализовать систему CSS3 как единое целое, надо было соединить ссылками каждый модуль со всеми другими связанными модулями. Как следствие такой структуры, функциональные модули не могли развиваться, пока не продвинулись основные модули, а основные модули не могли быть завершены, пока не были завершены все функциональные модули. Ничто не могло двигаться вперед, пока все не двигалось вперед. Это был новый вид ада зависимостей.
Поэтому рабочая группа CSS начала отделять модули CSS3 друг от друга и развивать их, каждый модуль индивидуально, относительно версии CSS2.1. Это был пересмотр несколько нереалистичной и изобилующей ошибками спецификации CSS2.0. В конце концов было решено, что модули CSS3 будут зависеть только от CSS2.1 и, возможно, от других завершенных модулей. Кроме того, рабочая группа CSS установила принцип, согласно которому уровень каждого модуля должен обновляться независимо. Мы начали активно откладывать нестабильные функции из тех модулей CSS3, которые содержали более стабильные, готовые к реализации части, чтобы довести эти спецификации до CR (candidate recommendation), зная, что вскоре может выйти 4-й уровень, даже если другие модули 3 уровня еще не готовы. Эта доктрина модульности была описана в Snapshot 2007 (Пекин), который положил начало новой серии документов CSS Snapshot, предназначенных для объединения всех завершенных модулей, формирующих современное состояние CSS.
С публикацией CSS2.1 Recommendation рабочая группа CSS смогла опубликовать CSS Color Level 3, Selectors Level 3, и CSS Namespaces. В настоящее время Media Queries, CSS Backgrounds and Borders Level 3, CSS Multi-column Layout являются кандидатами в рекомендации W3C, в то время как различные другие проекты стабилизируются в рамках подготовки к переходу на CR. Поскольку эти модули 3-го уровня заблокированы, мы продвигаем ранние черновики Selectors Level 4 и запускаем несколько других модулей 4-го уровня на этапах мозгового штурма, готовых принять запросы на новые функции.
В конце концов, поскольку существующие старые модули CSS3 разделяются, реорганизуются, обновляются и проходят через процесс, принятый в W3C, каждый модуль CSS может существовать в нескольких этапах: как завершенная рекомендация, как потенциальная рекомендация (этап тестирования) и как рабочий черновик. Эта модель похожа на популярные в разработке программного обеспечения подходы, в которых часто существует несколько ветвей с разным уровнем стабильности.
Модуляризация CSS в соответствии с этой «Пекинской доктриной» позволяет рабочей группе CSS доводить фичи до конца в рамках процесса, принятого в W3C, поддерживать стабильные спецификации и параллельно разрабатывать новые, разделять сложные технологии на управляемые части - не только для редакторов, но и для рецензентов, пользователей и разработчиков браузеров, эффективно распределять работу между несколькими редакторами спецификаций, четко сообщать о стабильности функций CSS разработчикам, другим группам стандартов и общественности и пользоваться преимуществами следования процессу W3C, который поощряет широкое участие, обзор и тестирование в реальных условиях.