Поработав над несколькими большими веб-приложениями и увидев гигантские таблицы стилей без четкой структуры, мне бы очень хотелось узнать, нашли ли люди способы сохранить свои CSS чистыми для больших и сложных веб-приложений.
Как перейти от устаревшего беспорядочного CSS к очищенным, красиво каскадным, СУХИМ таблицам стилей?
В приложении, над которым я сейчас работаю, 12000 строк CSS. Он вырос до этого размера органически, так как на раннем этапе не было ни стандартов, ни обзора CSS, единственным правилом было заставить приложение соответствовать дизайну. Некоторые из проблем, которые у нас постоянно возникают:
Конфликтующие стили: один разработчик добавляет .header {font-weight: bold;}, но .header уже использовался в других модулях и не должен выделяться в них жирным шрифтом.
Каскадные проблемы: виджет Foo имеет .header, но он также содержит список виджетов Bar с классами .header.
- If we define .foo .header { ... } and .bar .header { ... } anything not explicitly overwritten in foo will show up in bar.
- Если мы определим .foo> .header и .bar> .header, но позже потребуется изменить foo, чтобы обернуть заголовок в div, наши стили сломаются.
Проблемы с наследованием, мы постоянно переопределяем шрифты виджета на 11 пикселей / нормальный, потому что в некоторых верхних контейнерах используется высота строки 12 пикселей / 18 пикселей.
Борьба с библиотеками виджетов с использованием таких библиотек, как dojo / dijit или jquery ui, которые добавляют тонны стилей для обеспечения функциональности, означает, что наш код завален местами, где мы должны переопределить стили библиотеки, чтобы все выглядело правильно. Есть ~ 2000 строк CSS только для настройки встроенных стилей dijit
Мы находимся на этапе, когда мы думаем о реализации следующих правил:
Пространство имен для всех новых классов виджетов - если у вас есть виджет foo, все подклассы будут иметь имя .foo_, поэтому мы получим: .foo, .foo_header, .foo_content, .foo_footer. Это делает наш css по существу ПЛОСКИМ, но мы не видим другого способа организовать наш код в дальнейшем без столкновения с устаревшими стилями или каскадными проблемами, о которых я упоминал выше.
Универсальные стили полиции - у вас есть небольшая горстка универсальных классов, которые могут применяться только в очень специфических ситуациях. например .editable - применяется к частям предложения, которые должны вызывать редактор - должны содержать только текстовые узлы.
Используйте миксины компилятора css. Чтобы избежать многократного определения одних и тех же стилей в разных виджетах, определите и используйте миксины. Хотя мы опасаемся, что миксины тоже выйдут из-под контроля.
Как еще мы можем перейти от беспорядка css, который постоянно приводит к регрессам, к чему-то поддерживаемому в будущем.