CSS :not()セレクター - 要素の除外

CSS :not()否定擬似クラスで特定の要素をセレクターから除外。構文、詳細度ルール、チェイン、クリーンなスタイルシートのための実践的なパターンを学びます。

Pseudo-classes

詳細な説明

:not()否定擬似クラス

:not()セレクターは、引数セレクターにマッチしない要素にマッチします。クリーンで効率的なCSSを書くための最も多用途なツールの一つです。

構文

:not(selector) {
  /* セレクターにマッチしない要素のスタイル */
}

基本的な例

クラスを持たないすべての段落をスタイリング:

p:not(.special) {
  color: gray;
}

送信ボタン以外のすべての入力をスタイリング:

input:not([type="submit"]) {
  border: 1px solid #ccc;
  padding: 8px;
}

:not()のチェイン

複数の:not()セレクターをチェインできます:

/* 最初と最後を除くすべてのリスト項目 */
li:not(:first-child):not(:last-child) {
  border-bottom: 1px solid #eee;
}

CSSセレクターレベル4

モダンブラウザでは、:not()はカンマ区切りのセレクターリストを受け入れます:

/* レベル4:複数のセレクターを除外 */
:not(.hidden, .disabled, [aria-hidden="true"]) {
  display: block;
}

詳細度

:not()の詳細度は、最も具体的な引数によって決定されます。:not()ラッパー自体は詳細度を追加しません:

:not(.active)     /* 詳細度: (0, 1, 0) — .activeから */
:not(#main)       /* 詳細度: (1, 0, 0) — #mainから */
:not(p)           /* 詳細度: (0, 0, 1) — pから */

よくあるパターン

/* 項目間の区切り線(最後はボーダーなし) */
.item:not(:last-child) {
  border-bottom: 1px solid #ddd;
}

/* disabled以外のすべてのフォーム要素をスタイリング */
input:not(:disabled) {
  cursor: pointer;
}

/* リンクスタイルのボタンのリセット */
a:not([href]) {
  text-decoration: none;
  color: inherit;
}

ユースケース

:not()セレクターはエッジケースを除外する簡潔なCSSルールの記述に非常に有用です。一般的なパターンには、リスト項目間のボーダー追加(最後を除く)、disabled以外のすべてのフォーム入力のスタイリング、特定の要素バリアントのスタイルリセット、追加マークアップなしのgapのようなスペーシングの作成があります。繰り返しのオーバーライドルールを避けるのに役立ちます。

試してみる — CSS Selector Reference

フルツールを開く