:not()疑似クラスの複数引数
CSSの:not()疑似クラスと複数の引数
日本語訳
CSSの:not()
疑似クラスは、複数の要素を否定的にマッチングさせることができます。これは、複数のセレクタをカンマで区切って指定することで実現されます。
例
.container:not(.item1, .item2) {
/* .item1 と .item2 ではない要素にスタイルを適用 */
}
このコードでは、.container
クラスを持つ要素のうち、.item1
や .item2
クラスを持たない要素にスタイルが適用されます。つまり、.container
クラスを持つ要素から.item1
と .item2
を除外した要素をターゲットにすることができます。
:not() 疑似クラスの複数引数の具体的な例と解説
:not() 疑似クラスとは?
:not() 疑似クラスは、特定の要素 以外 にスタイルを適用したいときに使うCSSの機能です。いわば、要素の「逆」を選択するためのセレクタと言えるでしょう。
複数の引数を使うメリット
:not() には、複数のセレクタをカンマで区切って渡すことができます。これにより、より複雑な条件で要素を選別できるようになります。
具体的な例と解説
例1:特定のクラスを持つ要素を除外する
.container:not(.item1, .item2) {
/* .item1 と .item2 を除く .container の子要素にスタイルを適用 */
background-color: lightblue;
}
- 解説
.container
クラスを持つ要素の中から、.item1
や.item2
クラスを持つ要素 以外 に背景色を水色にします。- つまり、
.container
の子要素で、.item1
でも.item2
でもない要素にスタイルが適用されます。
例2:特定の要素タイプとクラスを除外する
div:not(.important, p) {
/* div要素で、.important クラスを持たない、かつ、p要素でないものにスタイルを適用 */
font-size: 12px;
}
- 解説
div
要素のうち、.important
クラスを持たないもの、かつ、p
要素でないものにフォントサイズを12pxにします。- これは、
div
要素で段落要素ではないもの、かつ、重要な情報ではないものに対してスタイルを適用したい場合などに有効です。
例3:複数の属性セレクタを組み合わせる
a[href^="https://"]:not([target="_blank"]) {
/* https:// で始まるリンクで、新しいタブで開かないものにスタイルを適用 */
color: blue;
}
- 解説
href
属性がhttps://
で始まるリンクのうち、target="_blank"
属性を持たないものに青い色を付けます。- つまり、現在のタブで開かれる外部リンクにのみスタイルを適用します。
:not() 疑似クラスは、複数の引数を使うことで、より柔軟かつ複雑な条件で要素を選択できるようになります。
- 属性セレクタとの組み合わせ
属性セレクタと組み合わせることで、属性に基づいた否定的な選択ができます。 - 否定の組み合わせ
複数の否定条件を組み合わせることで、より絞り込んだ選択が可能です。 - カンマで区切る
複数のセレクタをカンマで区切って指定します。
注意
- ブラウザの互換性にも注意が必要です。
- :not() の内部に、:not() 自身や他の疑似要素を含めることはできません。
:not() 以外にも、:is() や :where() といった擬似クラスを使うことで、より複雑な条件を表現できます。これらの擬似クラスは、:not() よりも新しい機能であり、より直感的な書き方ができる場合があります。
:not() 疑似クラスの複数引数に代わる方法
:not() 疑似クラスで複数の引数を指定する方法以外に、CSSで特定の要素を除外してスタイルを適用する方法がいくつかあります。それぞれの方法には、メリットとデメリットがあります。
子セレクタと否定の組み合わせ
- デメリット
- メリット
- 例
.container > :not(.item1, .item2) { /* .container の直接の子要素で、.item1 や .item2 ではない要素にスタイルを適用 */ }
- 考え方
:not() を使わずに、子セレクタを使って直接除外したい要素を指定します。
:is() 疑似クラスと否定の組み合わせ
- デメリット
- メリット
- 考え方
:is() 疑似クラスで複数のセレクタをグループ化し、そのグループに属さない要素を選択します。
:where() 疑似クラス
- メリット
- 考え方
:where() 疑似クラスは、複数のセレクタを論理演算子で組み合わせることができます。
一般的なセレクタの組み合わせ
- デメリット
- セレクタが複雑になりがち。
- メリット
- 例
.container > * { /* .container の直接の子要素全てにスタイルを適用 */ } .container .item1, .container .item2 { /* .container の中の .item1 と .item2 に別のスタイルを適用 */ }
- 考え方
複数のセレクタを組み合わせることで、目的の要素を絞り込む。
どの方法を選ぶべきか
- 可読性
どの方法でも、適切なインデントやコメントを入れることで可読性を高めることができる。 - ブラウザサポート
:is() や :where() は、古いブラウザではサポートされていない可能性がある。 - 柔軟性
:is() や :where() は、より複雑な条件に対応できる。 - シンプルさ
子セレクタや一般的なセレクタの組み合わせが最もシンプル。
選ぶ際のポイント
- メンテナンス性
将来的にスタイルを変更する可能性がある場合は、可読性の高い書き方を心がける。 - コードの複雑さ
シンプルな条件であれば、子セレクタや一般的なセレクタの組み合わせで十分。 - CSSのバージョン
古いブラウザをサポートする必要がある場合は、:is() や :where() は避けるべき。
- JavaScriptを用いて動的にスタイルを変更することも可能です。
- CSS Preprocessor (Sass, Lessなど) を利用すると、より複雑な条件を簡潔に記述できる場合があります。
css css-selectors