:not() を“自在に使いこなす”ための実践ガイド
:not() は CSS の中でも 「特定の要素だけ除外してスタイルを当てる」 という、非常に強力で柔軟な疑似クラスです。
初心者がここを理解すると、CSS 設計が一気にスッキリし、Tailwind CSS でも応用が効くようになります。
ここでは、実務でよく使うパターンを中心に、
CSS と Tailwind の両方でわかりやすく解説します。
:not() の基本文法を理解する
CSS の基本形
.box:not(.active) {
opacity: 0.5;
}
CSSこれは「.box のうち .active が付いていないもの」に適用されます。
HTML
<div class="box">通常</div>
<div class="box active">アクティブ</div>
HTML→ .active 以外の .box が半透明になります。
Tailwind での基本形
Tailwind は :not() を標準では持たないため、
任意プロパティ構文(Arbitrary Variants) を使います。
<div class="box [&:not(.active)]:opacity-50">通常</div>
<div class="box active [&:not(.active)]:opacity-50">アクティブ</div>
HTMLTailwind でも CSS と同じ動きを再現できます。
深掘り::not() の本質
:not() は「除外」ではなく「条件フィルタ」
例えば、
p:not(:first-child)
CSSこれは「最初の p 以外のすべての p」を意味します。
つまり、
- 何かを“選ぶ”のではなく
- “選ばれた中から除外する”
というフィルタのような動きをします。
この考え方を理解すると、複雑なセレクタが一気に読みやすくなります。
よく使う :not() の実践パターン
最後以外の要素にだけ余白を付ける
CSS版
.item:not(:last-child) {
margin-bottom: 16px;
}
CSSHTML
<div class="item">1つ目</div>
<div class="item">2つ目</div>
<div class="item">3つ目(最後)</div>
HTMLTailwind版
<div class="item [&:not(:last-child)]:mb-4">1つ目</div>
<div class="item [&:not(:last-child)]:mb-4">2つ目</div>
<div class="item [&:not(:last-child)]:mb-4">3つ目</div>
HTML特定のクラスを持たない要素だけデザインする
CSS版
.button:not(.primary) {
background: #eee;
color: #333;
}
CSSHTML
<button class="button">通常ボタン</button>
<button class="button primary">メインボタン</button>
HTMLTailwind版
<button class="button [&:not(.primary)]:bg-gray-200 [&:not(.primary)]:text-gray-700">
通常ボタン
</button>
<button class="button primary">
メインボタン
</button>
HTML特定のタグ以外をまとめてスタイリング
CSS版
.container > *:not(h2) {
margin-left: 16px;
}
CSSHTML
<div class="container">
<h2>タイトル</h2>
<p>本文</p>
<p>本文2</p>
</div>
HTMLTailwind版
<div class="container">
<h2>タイトル</h2>
<p class="[&:not(h2)]:ml-4">本文</p>
<p class="[&:not(h2)]:ml-4">本文2</p>
</div>
HTML:not() の“つまずきポイント”を深掘り
1. :not() の中には「1つのセレクタ」しか書けない
これは初心者がよくやるミスです。
/* ❌ これは無効 */
p:not(.a, .b) { … }
CSS正しくはこう。
/* ⭕ 2つ書きたいなら2回使う */
p:not(.a):not(.b) { … }
CSSTailwind でも同じです。
2. :not() は「除外」ではなく「フィルタ」
例えば、
.item:not(:first-child)
CSSこれは「最初の item 以外すべて」。
“最初以外”という意味であって、“2番目だけ”ではない。
3. Tailwind では任意プロパティ構文が必須
Tailwind の強みは、CSS の疑似クラスをそのまま書ける柔軟性です。
<div class="[&:not(:last-child)]:mb-4">
HTMLこの構文を覚えると、Tailwind の表現力が一気に広がります。
例題で理解を深める
例題:ニュース一覧で「最後以外の項目にだけ下線を付ける」
CSS版
.news-item:not(:last-child) {
border-bottom: 1px solid #ddd;
padding-bottom: 12px;
}
CSSHTML
<div class="news-item">ニュース1</div>
<div class="news-item">ニュース2</div>
<div class="news-item">ニュース3(最後)</div>
HTMLTailwind版
<div class="news-item [&:not(:last-child)]:border-b [&:not(:last-child)]:pb-3">
ニュース1
</div>
<div class="news-item [&:not(:last-child)]:border-b [&:not(:last-child)]:pb-3">
ニュース2
</div>
<div class="news-item [&:not(:last-child)]:border-b [&:not(:last-child)]:pb-3">
ニュース3
</div>
HTMLまとめ::not() を使いこなすコツ
本質
- :not() は「除外」ではなく「条件フィルタ」
- nth-child や first-child と組み合わせると強力
- 1つのセレクタしか書けない(複数はチェーンする)
実務での使いどころ
- 最後以外に余白を付ける
- 特定のクラスを持たない要素だけデザイン
- 特定のタグ以外をまとめて調整
- リストやカードの整列調整
Tailwind の強み
- 任意プロパティ構文で CSS と同じ表現が可能
- セレクタを柔軟に扱えるため、設計の幅が広がる


