Tailwind CSS 状態処理
Tailwind CSS は、要素のさまざまなインタラクション状態におけるスタイル変更を制御するための強力な状態クラス(状態修飾子)を提供します。
Tailwind CSS は、開発者がインタラクション効果を迅速に処理できるよう、さまざまな状態クラス(hover:、focus:、active: など)を提供しています。これらの状態クラスを組み合わせることで、ホバー、フォーカス、クリックなどの状態におけるスタイル変更を非常に簡単に実装し、ユーザーエクスペリエンスを向上させることができます。
状態クラスのプレフィックス:
| 状態 | プレフィックス | 効果 |
|---|---|---|
| ホバー状態 | hover: | マウスホバー時の要素のスタイル変化を制御する |
| フォーカス状態 | focus: | 要素がフォーカスを取得したときのスタイル変化を制御する |
| アクティブ状態 | active: | 要素がクリックされたときのスタイル変化を制御する |
| 訪問済み状態 | visited: | 訪問済みリンクのスタイル変化を制御する |
| フォーカスウィズイン状態 | focus-within: | 子要素がフォーカスを取得したときに親要素のスタイル変化を制御する |
| 各状態の組み合わせ | 特定のプレフィックスなし | 複数の状態プレフィックスを同時に組み合わせることができます。例:hover:, focus:、およびactive: |
1. ホバー(Hover)
ホバー(hover)状態とは、ユーザーが要素上にマウスを置いたときに、要素のスタイルが変化することを指します。hover:プレフィックスを使用すると、この効果を簡単に実現できます。
構文:
hover:{class}
例:hover:bg-sky-700マウスホバー時に要素の背景色を変更します。sky-700。
一般的な使い方:
マウスホバー時に、ボタンの背景色はblue-500に変わりますsky-700。
その他の例:
hover:text-white: ホバー時にテキストの色を白に変更します。hover:underline: ホバー時にテキストに下線を追加します。hover:border-2 hover:border-gray-500: ホバー時に2pxのボーダーを追加し、グレーに設定します。
2. フォーカス(Focus)
フォーカス(focus)状態とは、ユーザーがフォーム要素(入力欄など)とやり取りするときに、要素がフォーカスを取得することを指します。focus:プレフィックスを使用すると、フォーカス時の要素のスタイルを制御できます。
構文:
focus:{class}
例:focus:ring-2 focus:ring-blue-600要素がフォーカスを取得したときに青いリングを表示します。
例
試してみる »
ユーザーが入力欄をクリックまたは選択すると、入力欄に青いハイライトリングが表示されます。
その他の例:
focus:text-black: フォーカス時にテキストの色を黒に変更します。focus:border-blue-500: フォーカス時に入力欄のボーダー色を青に変更します。focus:ring-4 focus:ring-opacity-50 focus:ring-green-500: フォーカス時に緑のリングを表示してハイライトし、透明度を設定します。
3. アクティブ(Active)
アクティブ(active)状態とは、要素がユーザーによってクリックされているときに、要素のスタイルが変化することを指します。active:プレフィックスを使用すると、クリック時のスタイルを制御できます。
構文:
active:{class}
例:active:bg-green-700要素が押されているときに背景色を緑に変更します。
一般的な使い方:
ボタンが押されているとき、背景色が緑に変わりますgreen-700。
その他の例:
active:text-gray-600: クリック時にテキストの色をグレーに変更します。active:ring-2 active:ring-opacity-50 active:ring-green-500: クリック時に要素へ緑のリングのハイライト効果を追加します。
4. 状態の組み合わせ
Tailwind CSS は複数の状態修飾子の組み合わせをサポートしており、インタラクション状態におけるスタイル変更をより正確に制御できます。例えば、ホバー、フォーカス、アクティブ状態に加え、レスポンシブやダークモードを組み合わせることができます。
構文:
{state}:{class}
例:dark:md:hover:bg-fuchsia-600ダークモード、中程度のブレークポイント、ホバー時に背景色を変更します。
例
マウスをホバーまたはフォーカスしてください
</button>
試してみる »
通常モードでは、ボタンの背景色はホバー時にsky-700に変わり、ダークモードでは背景色はfuchsia-600。
その他の例:
sm:focus:ring-2: 小さい画面のデバイスで、要素がフォーカスを取得したとき、2pxのハイライトリングを追加します。lg:active:bg-red-500: 大きい画面のデバイスで、ボタンをクリックしたときに背景色を赤に変更します。
5. 疑似クラス(Pseudo-classes)
Tailwind CSS はさまざまな疑似クラス修飾子もサポートしており、ドキュメント内での要素の位置や順序に基づいてスタイルを適用できます。
一般的な疑似クラス修飾子:
first-child: 最初の子要素に適用されます。last-child: 最後の子要素に適用されます。odd-child: 奇数位置の子要素に適用されます。even-child: 偶数位置の子要素に適用されます。
例
<li class="first:font-bold last:font-light">Item 1</li>
<li class="odd:bg-gray-100">Item 2</li>
<li class="even:bg-gray-200">Item 3</li>
</ul>
試してみる »
- 最初のリスト項目は
Item 1太字になり、最後のリスト項目はItem 3より細いフォントに変わります。 - 奇数と偶数の項目は、異なる背景色で区別されます。
6. フォーム状態(Form States)
Tailwind CSS は、フォーム要素のさまざまな状態におけるスタイル変更を制御するためのフォーム状態クラスを提供しています。例えば、必須(required)、無効(invalid)および無効化(disabled)状態などです。
一般的なクラス:
required: 入力フィールドが必須項目であることを示します。invalid: 無効なフォーム入力に使用されます。disabled: 無効化されたフォーム要素。
例
試してみる »
- 入力欄が無効な場合、黄色いボーダーが表示されます。
- 入力欄が無効化されている場合、背景色はグレーになります。
7. 親状態に基づくスタイル(Group Modifier)
Tailwind CSS では、親要素のホバーまたはフォーカス時に子要素のスタイルに影響を与えることができます。group-hoverとgroup-focus修飾子を使用すると、親要素の状態が変化したときに子要素のスタイルを調整できます。
構文:
group-{state}:{class}
例:group-hover:bg-gray-300親要素のホバー時に、子要素の背景色をグレーに変更します。
例
<button class="px-4 py-2 bg-blue-500 text-white group-hover:bg-gray-300">
親要素にマウスをホバーします
</button>
</div>
試してみる »
親コンテナがホバーされると、ボタンの背景色がグレーに変わります。
8. レスポンシブとダークモード
Tailwind CSS では、レスポンシブプレフィックスとダークモード修飾子を組み合わせて、さまざまな画面サイズやモードで異なるスタイルを適用できます。
構文:
- レスポンシブプレフィックス:
sm:,md:,lg:,xl:,2xl: - ダークモードプレフィックス:
dark:
例
レスポンシブおよびダークモードボタン
</button>
試してみる »
小さい画面では、ホバー時に背景色がblue-700に変わり、中程度の画面ではフォーカス時に青いハイライトリングが追加され、ダークモードでは背景色がグレーに変わります。
9. バリアントの設定(Variants)
にtailwind.config.jsファイルでは、variantsセクションで有効にする状態バリアントを設定できます。これにより、プロジェクトのニーズに応じて特定の状態のスタイル変更を有効または無効にできます。
例
theme: {
extend: {},
},
variants: {
extend: {
backgroundColor: ['active', 'group-hover'],
textColor: ['focus-visible', 'disabled'],
},
},
}
この設定では、backgroundColorがactiveとgroup-hover状態を追加し、textColorがfocus-visibleとdisabled状態を追加します。
10. 最初、最後、奇数、偶数
要素が最初の子要素または最後の要素である場合、firstとlast修飾子を使用して要素のスタイルを設定します:
例
<li class="first:text-red-500">First item</li>
<li>Second item</li>
<li class="last:font-bold">Last item</li>
</ul>
試してみる »
効果:
- 最初のリスト項目のテキスト色が赤 text-red-500 に変わります。
- 最後のリスト項目のフォントが太字 font-bold になります。
odd修飾子: odd は、親コンテナ内の奇数位置にあるすべての子要素を選択するために使用されます(1から始まるインデックス)。
例
<li class="odd:bg-gray-100">Item 1</li>
<li>Item 2</li>
<li class="odd:bg-gray-100">Item 3</li>
<li>Item 4</li>
</ul>
試してみる »
効果:リストの1番目と3番目の項目の背景色が薄い灰色 bg-gray-100 に変わります。
even修飾子: even は、親コンテナ内の偶数位置にあるすべての子要素を選択するために使用されます(1から始まるインデックス)。
例
<li>Item 1</li>
<li class="even:bg-gray-200">Item 2</li>
<li>Item 3</li>
<li class="even:bg-gray-200">Item 4</li>
</ul>
試してみる »
効果:リストの2番目と4番目の項目の背景色がより濃い灰色 bg-gray-200 に変わります。
修飾子リファレンス
| Modifier | CSS 対応疑似クラス/ 疑似要素またはルール |
説明 | サンプルコード |
|---|---|---|---|
hover |
:hover |
マウスホバー時に有効 | <button class="hover:bg-blue-500">Hover me</button> |
focus |
:focus |
要素がフォーカスを取得したときに有効 | <input class="focus:ring-2 focus:ring-blue-600" /> |
focus-within |
:focus-within |
親コンテナ内の任意の子要素がフォーカスを取得したときに有効 | <div class="focus-within:border-blue-500"><input /></div> |
focus-visible |
:focus-visible |
キーボードナビゲーションまたは支援技術によってアクティブ化されたフォーカス | <input class="focus-visible:ring-2 focus-visible:ring-blue-600" /> |
active |
:active |
要素が押下されているかアクティブ状態のときに有効 | <button class="active:bg-green-700">Click me</button> |
visited |
:visited |
訪問済みリンク | <a class="visited:text-purple-600" href="../index.html">Visited link</a> |
target |
:target |
ターゲットリンクがアクティブになったときに有効 | <div id="section" class="target:bg-yellow-500"></div> |
first |
:first-child |
最初の子要素 | <ul><li class="first:text-red-500">First</li><li>Other</li></ul> |
last |
:last-child |
最後の子要素 | <ul><li>Other</li><li class="last:font-bold">Last</li></ul> |
odd |
:nth-child(odd) |
奇数番目の子要素(1から数える) | <ul><li class="odd:bg-gray-100">Odd</li><li>Even</li></ul> |
even |
:nth-child(even) |
偶数番目の子要素 | <ul><li>Odd</li><li class="even:bg-gray-200">Even</li></ul> |
empty |
:empty |
内容が空の要素 | <div class="empty:bg-gray-50"></div> |
disabled |
:disabled |
無効化されたフォーム要素 | <button class="disabled:opacity-50" disabled>Disabled</button> |
enabled |
:enabled |
有効状態のフォーム要素 | <input class="enabled:border-blue-500" /> |
checked |
:checked |
選択されたチェックボックスまたはラジオボタン | <input type="checkbox" class="checked:bg-blue-500" checked /> |
required |
:required |
フォーム要素が必須項目である場合 | <input class="required:border-red-500" required /> |
before |
::before |
要素の前に挿入される疑似要素 | <div class="before:content-['*'] before:text-red-500"></div> |
after |
::after |
要素の後に挿入される疑似要素 | <div class="after:content-['!'] after:text-green-500"></div> |
sm |
@media (min-width: 640px) |
小さい画面(640px 以上) | <div class="sm:bg-blue-100">Resize to small screen</div> |
dark |
@media (prefers-color-scheme: dark) |
ダークモード | <div class="dark:bg-black dark:text-white">Dark mode content</div> |
rtl |
[dir="rtl"] |
右から左のテキスト方向 | <div dir="rtl" class="rtl:text-right">Right to Left</div> |
aria-checked |
[aria-checked="true"] |
ARIA属性を持つ要素にスタイルを適用 | <div aria-checked="true" class="aria-checked:bg-green-500">Checked</div> |
motion-safe |
@media (prefers-reduced-motion: no-preference) |
アニメーション設定: 設定なしの場合に有効 | <div class="motion-safe:transition-transform motion-safe:duration-500"></div> |