CSS「:not()」で複数指定の場合

例えば、.hogeと.pekoの二つのクラスを持たない要素に指定したい場合は、カンマを用いて記述します。

:not(.hoge, .peko) { etc.}

記述的に問題はありませんが、実際は今のほとんどのブラウザで実装されていません。

:not(.hoge):not(.peko) { etc.}

今のブラウザに認識させる方法として上記のように「:not()」を続けて書く方法があります。ただし、気をつけないといけない点があります。

下記の状態のhtmlソースの内容に、上記の「:not()」を続けて書く方法を適用してみます。

<ul class="unlist">
<li class="listA">トップ</li>
<li class="listA hoge">会社概要</li>
<li class="listA">沿革</li>
<li class="listA peko">商品紹介</li>
<li class="listA">お問い合わせ</li>
</ul>
:not(.hoge):not(.peko) { color: red;}

上記のセレクタでは、.hogeと.pekoのセレクタを持たない要素が赤になれ!と指定したことで1と3と5行の要素が選ばれたことになりますが、実際にブラウザで確認してみると全て赤になってしまいます。これは.hogeと.pekoのセレクタを持たない要素として.listAが選ばれたので該当する全ての行(.listAで指定された行)に赤が指定されたことになるからです。これを回避する方法として下記の記述をします。

.unlist :not(.hoge):not(.peko) { color: red;}

cssの詳細度を上げて指定すると回避できます。

関連記事