Варианты
Варианты позволяют применять различные модификации к существующим правилам, подобно варианту 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 применялся только при наведении пользователем курсора на элемент.
Следующие шаги
Система вариантов очень мощная, и её невозможно полностью охватить в этом руководстве. Вы можете ознакомиться с реализацией пресета по умолчанию, чтобы увидеть более продвинутые примеры использования.