Руководство
В этом разделе мы установим EffCSS и посмотрим, как им пользоваться.
Установка
Введите в вашем терминале:
Типизация CSS
По умолчанию EffCSS работает в гибком режиме: стили принимают любые объекты. Чтобы включить строгую типизацию CSS (автодополнение и проверку на недопустимые значения), один раз определите EffCSS.Properties в своем проекте, расширив глобальное пространство имен.
Например, можно установить пакет csstype
Затем объедините с EffCSS
Теперь для каждого правила стиля доступно полное автодополнение TypeScript для CSS-свойств.
Использование
Чтобы создать стили с помощью EffCSS, вам просто нужно вызвать утилиты. К счастью, их очень мало, и по их названию вы можете понять, что они делают.
Среди всех утилит нужно выделить classNames и attributes. Они требуют указания контракта в виде типа Typescript, с помощью которого будут реализованы селекторы. Это позволит вам контролировать как создание стилей, так и их использование. Тип контракта - это объект с любым уровнем вложенности свойств:
Остальные утилиты выводят типы из своих аргументов. Давайте подробнее рассмотрим использование каждой из них.
classNames
className создает одно CSS правило с указанным содержимым и возвращает селектор класса в виде строки:
lazyClassName (или className.lazy) отличается от className следующими особенностями:
- может принимать в качестве аргумента как объект, так и функцию;
- возвращает функцию-резолвер, которая вычисляет селектор;
- генерирует CSS после первого использования резолвера.
classNames создает таблицу стилей и возвращает функцию для получения имен классов:
lazyClassNames (или classNames.lazy) отличается от classNames тем, что выполняет переданную функцию и создает таблицу стилей после первого вычисления селекторов:
attributes
attribute создает одно CSS правило с указанным содержимым и возвращает селектор атрибута в виде объекта:
lazyAttribute (или attribute.lazy) отличается от attribute следующими особенностями:
- может принимать в качестве аргумента как объект, так и функцию;
- возвращает функцию-резолвер, которая вычисляет селектор;
- генерирует CSS после первого использования резолвера.
attributes создает таблицу стилей и возвращает функцию для получения атрибутов:
lazyAttributes отличается от attributes тем, что выполняет переданную функцию и создает таблицу стилей после первого вычисления селекторов:
id
attribute создает одно CSS правило с указанным содержимым и возвращает селектор идентификатора в виде строки:
lazyId (или id.lazy) отличается от id следующими особенностями:
- может принимать в качестве аргумента как объект, так и функцию;
- возвращает функцию-резолвер, которая вычисляет селектор;
- генерирует CSS после первого использования резолвера.
customStyles
customStyles создает таблицу стилей без генерируемых селекторов:
lazyCustomStyles отличается от customStyles тем, что выполняет переданную функцию и создает таблицу стилей после первого вызова резултьтата:
variables
variable создает одно правило @property, variables создает сразу несколько:
Получить и установить начальное значение глобальной переменной можно с помощью соответствующих методов:
INFO
Методы set/get для локальных переменных являются заглушками, поскольку эти переменные создаются внутри отдельной таблицы стилей и еще не существуют на момент выполнения функции-генератора. Следовательно, указанные методы можно вызывать только для глобальных переменных.
animations
animation создает одно правило @keyframes, animations создает сразу несколько:
layers
layer создает одно правило @layer, layers создает сразу несколько:
containers
container создает одно правило @container, containers создает сразу несколько:
fonts
font создает одно правило @font-face, fonts создает сразу несколько:
theme
theme группирует переменные и их значения в варианты темы, чтобы упростить динамическое переключение стилей:
update
update обновляет начальное значение глобальной переменной/переменных:
По возможности используйте метод set для установки переменной, поскольку он более очевиден.
stylesheet
stylesheet возвращает созданную таблицу стилей:
Также есть утилиты, которые возвращают специальные таблицы стилей:
layersStylesheetвозвращает таблицу стилей глобальных слоев,variablesStylesheetвозвращает таблицу стилей глобальных переменных,animationsStylesheetвозвращает таблицу стилей глобальных анимаций,fontsStylesheetвозвращает таблицу стилей глобальных шрифтов,sharedStylesheetвозвращает таблицу стилей глобальных правил (созданных с помощьюclassNameиattribute).
configure
configure влияет на генерацию CSS, если вызывается до создания первой таблицы стилей:
serialize
serialize преобразует свой аргумент или все созданные таблицы стилей в HTML-строку:
serializeMeta сериализует метаданные своего аргумента или всех созданных таблиц стилей в HTML-строку:
Таким образом можно вычислить стили и метаданные на сервере и переиспользовать их на клиенте. Это особенно полезно для SSG/SSR.
subscribe
subscribe позволяет отслеживать события создания стилей с помощью EffCSS:
Это инструмент для детального контроля и отладки, поэтому его не следует использовать в производственной сборке.
context
context позволяет создавать отдельную группу стилей, возвращая объект со всеми утилитами EffCSS (за исключением самого context):
Поскольку стили context можно независимо сериализовать и восстанавливать (гидратировать), эту возможность можно использовать для изоляции стилей между микрофронтендами.