【CSS】特定の要素「以外」を指定する:not()否定クラスの使い方
CSSで:not()「否定の擬似クラス」を使い、特定の要素以外を指定するセレクタの書き方をご紹介します。
:not() - CSS: カスケーディングスタイルシート | MDN
また、これを応用したセレクタの書き方も紹介しています。
例①
このようなHTMLだとします。
<ul>
<li>リスト</li>
<li>リスト</li>
<li>リスト</li>
<li class="target">特定の要素</li>
<li>リスト</li>
<li>リスト</li>
</ul>
このようなCSSを書くと
ul li:not(.target) {
color: red;
}
こうなります。
- リスト
- リスト
- リスト
- 特定の要素
- リスト
- リスト
.target以外が赤くなっていますね。
もう一度、セレクタを確認してみると
ul li:not(.target)
これで「ulの中のli ただし.targetは除く」って意味になります。
例②
このようなHTMLだとします。
<ul>
<li>リスト1-1</li>
<li>リスト1-2</li>
<li>リスト1-3</li>
</ul>
<ul class="target">
<li>リスト2-1</li>
<li>リスト2-2</li>
<li>リスト2-3</li>
</ul>
このようなCSSを書くと
ul li:not(.target li) {
color: red;
}
こうなります。
- リスト1-1
- リスト1-2
- リスト1-3
- リスト2-1
- リスト2-2
- リスト2-3
「.targetの中のli」以外の「ul li」が赤くなっています。
例③
このようなHTMLだとします。
<ul>
<li>リスト1-1</li>
<li>リスト1-2</li>
<li>リスト1-3</li>
</ul>
<ul class="target">
<li>リスト2-1</li>
<li>特定の要素</li>
<li>リスト2-3</li>
</ul>
このようなCSSを書くと
ul li:not(.target li:nth-child(2)) {
color: red;
}
こうなります。
- リスト1-1
- リスト1-2
- リスト1-3
- リスト2-1
- 特定の要素
- リスト2-3
「.targetの中の2番目のli」以外の「ul li」が赤くなっています。
例④
このようなHTMLだとします。
<div class="target">
<p>文章1</p>
<p>文章2</p>
<div>
<p>文章3</p>
</div>
</div>
このようなCSSを書くと
.target p:not(.target > p) {
color: red;
}
こうなります。
文章1
文章2
文章3
「.target 直下の p」以外の「.target p」が赤くなっています。
このように:not()の中は結構自由に書けて、否定したいセレクタを入れれば否定されます。