Статьи

Представляем CCSS (Компонент CSS)

CCSS , или Компонент CSS, — это архитектура, которая упрощает разработку CSS для больших веб-приложений.

В больших веб-приложениях обычно много CSS-файлов, и часто над ними работают многие разработчики. С появлением такого количества фреймворков, руководств, инструментов и методологий (OOCSS, SMACSS, BEM и т. Д.) Разработчикам нужна архитектура CSS, которая является удобной в обслуживании, управляемой и масштабируемой.

Как инженер, я считаю, что веб-разработка на основе компонентов — это путь вперед. Веб-компоненты представляют собой набор стандартов, которые работают через W3C. Они позволяют нам связывать разметку и стили в действительно многократно используемые элементы HTML. Это означает, что нам нужно задуматься о разработке CSS на основе компонентов . Пока производители браузеров внедряют эти стандарты, мы можем использовать мягкую инкапсуляцию .

Давайте посмотрим, что конкретно представляет собой CCSS и как вы можете использовать его в настройке архитектуры CSS для сложного веб-приложения.

Элементы CCSS

Ниже приведены основные элементы, используемые полностью или измененным способом для достижения наилучшей конфигурации для архитектуры CCSS.

SMACSS

SMACSS, созданный Джонатаном Снуком , означает «Масштабируемая и модульная архитектура для CSS». Это скорее руководство по стилю, чем жесткие рамки. Прочитайте о SMACSS для справки о структуре, поскольку CCSS использует это.

BEM

БЭМ, созданный разработчиками на Яндексе , расшифровывается как «Блок», «Элемент», «Модификатор». Это методология внешнего интерфейса, которая представляет собой новый способ мышления при разработке веб-интерфейсов. Ребята из Яндекса придумали БЭМ, и дополнительную информацию можно найти в отличной статье Гарри Робертса .

пререкаться

Sass это CSS с суперспособностями . Я очень рекомендую это, но вы также можете использовать Меньше, если хотите. Пожалуйста, обратитесь к документации Sass для получения дополнительной информации.

Компас

У Compass нет определений классов; это расширение для Sass, которое предоставляет множество утилит. Используется для общих полезных миксинов и компиляции sass. Компасные миксины почти всегда следует использовать в тех случаях, когда требуются префиксы поставщиков. Это снова хорошо, и Бурбон , на первый взгляд, является отличной альтернативой.

Принципы CCSS

Давайте теперь посмотрим на основные принципы CCSS.

Компонент на основе

Напишите небольшие и независимые компоненты, которые можно использовать повторно. Повторно используемый компонент CSS — это компонент, который не существует только в определенной части дерева DOM или требует использования определенных типов элементов. При необходимости, дополнительные HTML-элементы должны использоваться для повторного использования компонента.

Модульный и изолированный

Компоненты должны иметь все необходимое для определенной части пользовательского интерфейса и иметь единый фокус. Каждый компонент должен быть изолирован, то есть он не должен напрямую изменять или зависеть от другого компонента.

Изоляция важнее, чем повторное использование кода в компонентах, поскольку повторное использование может увеличить зависимости и тесную связь, что в конечном итоге делает CSS менее управляемым.

наборный

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

предсказуемый

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

Документация

Большинство людей предполагают, что CSS говорит само за себя. На самом деле, это обычно не так! Компоненты CSS должны иметь четкую документацию, которая описывает, что они делают и как их следует использовать.

Структура каталогов

Ниже приведен пример структуры каталогов для упрощения визуализации. Я также включил пример настройки в репозитории CCSS GitHub .

styles ├── bootstrap.css ├── ext │ ├── bootstrap │ │ ├── _settings.scss │ │ └── bootstrap.scss │ └── font-awesome │ └── font-awesome.scss ├── font-awesome.css ├── images.css ├── main.css └── scss ├── _config.scss ├── base │ ├── _animation-classes.scss │ ├── _base-classes.scss │ ├── _base.scss │ └── images.scss ├── components │ ├── directives │ │ ├── _empty-state.scss │ │ ├── _legend.scss │ │ └── _status-message.scss │ ├── pages │ │ ├── _404.scss │ │ └── _redirect.scss │ └── standard │ ├── _alarm-state.scss │ ├── _graph-message.scss │ └── _panel.scss ├── main.scss ├── mixins │ ├── _animation.scss │ ├── _bem.scss │ └── _icon.scss └── themes └── _light.scss 

Редактируйте / scss/ файлы только в папке scss/ в дереве папок, показанном выше. Это позволяет легко обновлять внешние библиотеки, которые находятся в папке ext/ . Многие приложения начинаются с внешнего CSS-фреймворка, такого как Bootstrap или Foundation, поэтому я добавил их в пример установки внутри ext/ . Но совершенно нормально, чтобы весь CSS был написан с нуля; все остальное, упомянутое выше, все еще применяется

Этот каталог components/ хорошо подходит для приложения AngularJS, но может быть настроен для других сред или приложений. Более подробная информация находится в разделе «Архитектура» ниже.

На странице HTML .css все файлы .css из папки style/ , которая содержит весь скомпилированный CSS (из Grunt, Compass и т. Д.). Никогда не изменяйте их.

Соглашения об именах — упрощенный БЭМ

  • u-className — Глобальные базовые / служебные классы
  • img-className — Глобальные классы изображений
  • animate-className — Глобальные классы анимации
  • ComponentName — Стандартные компоненты (B)
  • ComponentName-elementName — Элемент компонента (E)
  • ComponentName--modifierName компонента (M)

Обратите внимание на UpperCamelCase имени компонента UpperCamelCase чтобы указать, что это главный элемент; это означает, что это граница компонента . Имена элементов и модификаторов — elementName и modifierName соответственно. Не используйте дефис ( - ) для разделения имен компонентов, так как они означают начало имени элемента / элемента.

Архитектура и Дизайн

Давайте рассмотрим архитектуру, поддерживаемую CCSS.

хрюкать

Grunt — это отличный инструмент для выполнения задач, который может автоматизировать многие общие задачи (например, компиляцию CSS или проверку HTML). Есть и другие исполнители задач; идеальный рабочий процесс предполагает использование одного из них для просмотра разрабатываемых файлов и перекомпиляции CSS при внесении изменений.

Организация файлов

Посмотрите еще раз на структуру каталогов, которая является производной от SMACSS. Обратите внимание на каталог ext/ , который содержит все внешние фреймворки (например, Bootstrap). Для удобства обновления их не следует изменять; вместо этого переопределения и расширения должны быть помещены в каталог base/ .

base/ — это место, где вы храните глобальные базовые стили, которые используются во всем приложении.

_base.scss — это базовые стили только для селекторов элементов. Это своего рода «сброс CSS».

_base-classes.scss это все служебные классы, используемые во всем приложении для множества страниц, представлений и компонентов. Префикс имени класса с u-

images.scss используется как источник компиляции SCSS. Он должен определять и вставлять все изображения сайта как URI данных. /app/styles/images.css создается из этого файла.

_animate.scss содержит все классы анимации для всего приложения.

_bootstrap-overrides.scss содержит только переопределения фреймворка. Иногда уровень специфичности селекторов каркаса настолько высок, что для их переопределения требуются длинные специфические селекторы. Переопределение на глобальном уровне не должно выполняться в контексте компонента SCSS. Вместо этого все глобальные переопределения идут сюда.

Компоненты

Любая единица повторно используемого CSS, не упомянутая выше, считается «компонентом». Мы используем AngularJS, поэтому я разделил их на 3 типа компонентов CSS: view / page, директива и standard; следовательно, структура каталогов получена из SMACSS.

В примере настройки в репозитории GitHub я создал явные папки, которые будут понятны. Если ваше приложение маленькое, вы можете поместить их в одну папку. Все компоненты соответствуют измененному соглашению об именах BEM в сочетании с CamelCase. Это дало мне большие победы в том, что я вдохновил других членов команды следовать синтаксису в стиле БЭМ. Это также позволило избежать путаницы при переходе от использования типичного стиля БЭМ с символами - , -- и __ , которые генерируют имена классов, такие как module-name__child-name--modifier-name !

Также важно, чтобы порядок определения классов CSS в компоненте отражал представление HTML. Это облегчает сканирование, стилизацию, редактирование и применение классов. Наконец, хорошей идеей будет иметь обширное руководство по стилю для веб-приложения и следовать рекомендациям по CSS и Sass (например, избегать @extend ).

Пример CCSS

Обратитесь к коду для примера настройки CSS.

Вот пример компонента в Sass:

 .ProductRating { // nested element @include e(title) { ... } // nested element @include e(star) { ... // nested element's modifier @include m(active) { ... } } } 

Это компилируется в следующий CSS:

 .ProductRating { ... } // nested element .ProductRating-title { ... } // nested element .ProductRating-star { ... } // nested element's modifier .ProductRating-star--active { ... } 

И ваш HTML может выглядеть примерно так:

 <div class="ProductRating"> <img alt="Company logo" class="img-logo"> <h3 class="ProductRating-title">Title</h3> <div class="u-starHolder"> <span class="ProductRating-star ProductRating-star--active"></span> <span class="ProductRating-star ProductRating-star--active"></span> <span class="ProductRating-star ProductRating-star--active"></span> <span class="ProductRating-star"></span> </div> </div> 

Вы можете обратиться к упрощенному миксуну BEM , который использует селектор ссылок для достижения этой цели и проще, чем @at-root . Работать с BEM стало намного проще в Sass 3.3+, что дает нам возможность писать понятный код, который можно легко обслуживать.

Содействие

Вклады в репозитории GitHub в форме вопросов / PR для добавления большего количества примеров, улучшения с постобработкой, разъяснениями и т. Д. Являются наиболее полезными.

И не забудьте проверить репо на кредиты и полезные ресурсы, связанные с CCSS. Если у вас есть какие-либо вопросы или комментарии, оставьте их в комментариях ниже или в репозитории GitHub.