コンテンツにスキップ

バリアント

バリアントを使用すると、Tailwind CSSの`hover:`バリアントのように、既存のルールにいくつかのバリエーションを適用できます。

ts
variants: [
  // hover:
  (matcher) => {
    if (!matcher.startsWith('hover:'))
      return matcher
    return {
      // slice `hover:` prefix and passed to the next variants and rules
      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に適用します。この場合、`selector`フックに`:hover`を付加します。

結果として、以下のCSSが生成されます。

css
.hover\:m-2:hover { margin: 0.5rem; }

これにより、ユーザーが要素にカーソルを合わせた場合にのみ`m-2`が適用されます。

さらに詳しく

バリアントシステムは非常に強力であり、このガイドではすべてを網羅することはできません。 デフォルトプリセットの実装を確認して、より高度な使用方法をご覧ください。

MITライセンスの下でリリースされています。