Обзор
В этом разделе мы рассмотрим базовые конфцепции EffCSS, сравним этот инструмент с аналогами и оценим, когда его использовать.
Еще одна CSS-in-JS библиотека?
Вкратце - да. EffCSS - это CSS-in-JS библиотека, которая стремится быть простым инструментом для создания сложных и предсказуемых стилей. Библиотека базируется на нескольких концепциях:
- Функция-автор (
StyleSheet maker) - это просто JS-функция, которая принимает в качестве аргумента объект с утилитами и должна вернуть объект со стилями; утилиты предоставляют некоторую полезную функциональность, как, например, генерация псевдо-селекторов, at-rules, БЭМ-селекторов и т.д., - Провайдер стилей (
Style provider) - это веб-компонент на основе HTMLScriptElement (на сервере его эмуляция), который обрабатывает функцииStyleSheet makerи управляет таблицами стилей
Библиотека опирается на некоторые браузерные API, такие как
По итогу EffCSS не требует никаких внешних зависимостей. Она работает одинаково во всех современных браузерах и с любыми фреймворками.
Особенности
- генерация CSS на клиенте - вы можете использовать таблицы стилей динамически на клиенте через
Style provider, - генерация CSS на сервере -
Style providerможет сериализовать свое состояние в HTML-строку, которая может быть использована для SSR / SSG, - переключение CSS - любая сгенерированная таблица стилей может быть включена или выключена с помощью методов
on/offобъектаStyle provider, - поддержка темизации - создание/обновление/удаление тем производится через объект контроллера тем, доступный из свойства
themeобъектаStyle provider, - таблицы стилей на базе TypeScript - если при создании таблицы стилей в функции
StyleSheet makerиспользуется тип TypeScript, тоStyle providerможет выводить автодополнения относительно доступных селекторов, - изолированные и минифицированные селекторы - каждая функция
StyleSheet makerможет использовать утилитуbem, которая возвращает селекторы с уникальным префиксом; эти селекторы можно минифицировать с помощью атрибутаminдляStyle provider.
Сравнение
Sass / Less
Препроцессоры имеют свой собственный синтаксис и связанные с ним ограничения. EffCSS позволяет использовать современные JavaScript и TypeScript так, как вы хотите.
Tailwind
Tailwind оперирует утилитами и требует настройки редактора для подсветки синтаксиса и автодополнения. EffCSS оперирует таблицами стилей и поддерживает автодополнение селекторов с помощью дженериков TypeScript.
Emotion
@emotion/css имеет зависимости и в некоторых случаях требует другие пакеты из смежной экосистемы (такие как @emotion/react, @emotion/styled). EffCSS уверен в себе и не имеет зависимостей, работает одинаково во всех случаях.
Styled Components
Styled Components предназначены для стилизации компонентов React. EffCSS не зависит от фреймворка.
Linaria
Linaria создает стили CSS до выполнения кода в браузере. EffCSS создает CSS где угодно.
Когда использовать?
Что ж, выбор библиотеки - дело вкуса. На самом деле, может быть несколько других причин:
Вы желаете
- использовать инструмент, не зависящий от фремворка 😍,
- использовать стили многократно и с подсказками TypeScript 😎,
- использовать стили на сервере без дополнительных усилий 😃.
Вы не желаете
- устанавливать дополнительные плагины для сборки проекта 😦,
- добавлять специальные расширения в свой редактор кода 😨,
- изучать новый синтаксис 😠.
Подошел хотя бы один вариант? Тогда приступим!