CSSで特定の要素に条件を指定する方法にはいくつかの手段があります。これらの手法は、スタイルの適用範囲を限定したり、特定の状態に応じたデザインを実現したりするのに役立ちます。ここでは、CSS :has()
セレクターを中心に、条件指定の方法をわかりやすく説明します。
1. :has()
セレクター
CSSの:has()
セレクターは、ある要素が特定の子要素や条件を満たしている場合にスタイルを適用できる強力な機能です。これにより、JavaScriptを使わなくても親要素の条件によってスタイルを変えることができます。
使用例
/* 親要素が div で、子要素に p が含まれている場合 */
div:has(p) {
background-color: yellow;
}
このコードでは、div
要素が<p>
タグを子要素として持っている場合、そのdiv
要素に背景色を黄色にするスタイルが適用されます。
実際の利用ケース
- フォームの入力チェック: フォームのフィールドが正しく入力されているかどうかに応じて、親要素にスタイルを適用する
- ナビゲーションメニュー: メニュー項目にリンクがある場合にスタイルを変更する
ただし、現時点で:has()
は主要なブラウザではまだ完全にサポートされていないため、使う際にはブラウザの対応状況に注意が必要です。
2. :not()
セレクター
:not()
は、指定した要素を除外するために使用されます。特定の要素が含まれていない場合にスタイルを適用したいときに便利です。
使用例
/* .activeクラスがないすべての要素にスタイルを適用 */
div:not(.active) {
opacity: 0.5;
}
ここでは、div
要素が.active
クラスを持っていない場合、その要素に対して透明度を50%にするスタイルが適用されます。
実際の利用ケース
- 特定の状態を持たない要素にスタイルを適用
- 複数の状態を持つ要素に対して、一部を除外してスタイルを設定
3. :nth-child()
/ :nth-of-type()
セレクター
:nth-child()
や:nth-of-type()
は、要素の順番に基づいてスタイルを適用するために使います。特定の位置にある要素に対してスタイルを指定できます。
使用例
/* 3番目の子要素にスタイルを適用 */
ul li:nth-child(3) {
color: red;
}
これにより、ul
の中で3番目に位置するli
要素に赤色が適用されます。
実際の利用ケース
- リストの特定の項目にスタイルを適用
- 任意の順番の要素にスタイルを付ける
4. :checked
セレクター
:checked
は、チェックボックスやラジオボタンが選択された状態を対象にスタイルを適用します。フォーム関連の要素の状態をスタイルに反映させたい時に便利です。
使用例
/* チェックボックスが選択された場合に背景色を変更 */
input:checked + label {
background-color: lightgreen;
}
ここでは、チェックボックスが選択されると、隣接するlabel
要素の背景色が変わります。
実際の利用ケース
- フォームの入力状態に応じたスタイル変更
- チェックボックスやラジオボタンの状態によるデザイン変更
5. :focus
セレクター
:focus
は、ユーザーが要素を選択した時にスタイルを変更するために使用します。フォームの入力フィールドなど、アクティブな状態を視覚的に表現できます。
使用例
/* 入力フィールドにフォーカスが当たっているときに枠線を変更 */
input:focus {
border: 2px solid blue;
}
入力フィールドが選択されていると、枠線が青く変わります。
実際の利用ケース
- ユーザーが選択したフォームフィールドの視覚的強調
- フォームのエラーメッセージと組み合わせて状態を示す
6. :disabled
/ :enabled
セレクター
:disabled
や:enabled
は、フォームの入力要素が無効化されているか有効化されている状態に応じてスタイルを変えるために使います。
使用例
/* 無効化されたボタンのスタイルを変更 */
button:disabled {
background-color: grey;
cursor: not-allowed;
}
無効化されたボタンに対して灰色の背景色と、クリックできないことを示すカーソルを設定しています。
実際の利用ケース
- 無効化されたボタンのスタイルを変更
- 無効なフォーム入力を強調表示
結論
CSSで要素に条件を指定する方法は多岐にわたりますが、それぞれのセレクターには特定の用途があり、デザインの柔軟性を高めるために非常に役立ちます。CSS :has()
セレクターのような新しい機能は、将来的により多くの条件指定を可能にするため、ぜひ覚えておくと良いでしょう。