Варианты
Варианты позволяют применять некоторые вариации к существующим правилам, например, вариант hover: из Tailwind CSS.
Пример
ts
variants: [
// hover:
(matcher) => {
if (!matcher.startsWith('hover:'))
return matcher
return {
// отрезать префикс `hover:` и передать следующим вариантам и правилам
matcher: matcher.slice(6),
selector: s => `${s}:hover`,
}
},
],
rules: [
[/^m-(\d)$/, ([, d]) => ({ margin: `${d / 4}rem` })],
]matcherконтролирует, когда вариант включен. Если возвращаемое значение является строкой, оно будет использоваться в качестве селектора для сопоставления правил.selectorпредоставляет возможность настройки сгенерированного CSS-селектора.
Под капотом
Давайте рассмотрим, что происходит при сопоставлении hover:m-2:
hover:m-2извлекается из использования пользователяhover:m-2отправляется всем вариантам для сопоставленияhover:m-2сопоставляется нашим вариантом и возвращаетm-2- результат
m-2будет использован для следующего раунда сопоставления вариантов - если другие варианты не сопоставлены,
m-2затем идет на сопоставление с правилами - наше первое правило сопоставляется и генерирует
.m-2 { margin: 0.5rem; } - наконец, мы применяем преобразование наших вариантов к сгенерированному CSS. В этом случае мы добавляем
:hoverк перехватчикуselector
В результате будет сгенерирован следующий CSS:
css
.hover\:m-2:hover { margin: 0.5rem; }С этим m-2 будет применяться только при наведении пользователя на элемент.
Углубляемся
Система вариантов очень мощная и не может быть полностью раскрыта в этом руководстве, вы можете ознакомиться с реализацией пресета по умолчанию, чтобы увидеть более продвинутые варианты использования.