【CSSテクニック】:not()セレクタで階層を跨いだ除外を実現

【CSSテクニック】:not()セレクタで階層を跨いだ除外を実現

CSS の世界で :not() 擬似クラスって、実はめちゃくちゃ便利なのに、意外と過小評価されがちなんですよね。
多くの人は「同じ階層の要素を除外する」くらいにしか使ってない印象ですが、実はそれだけじゃないんです。
最近、このセレクタを使ったちょっと面白い課題にぶつかって、:not() の“階層を跨いでるように見える”使い方にハマりました。

背景と課題のシナリオ

こんな感じのHTML構造を想定しています:

<div class="post">
    <p>Lorem ipsum dolor sit amet, sed alia expetenda liberavisse ut, id sit purto possim expetenda. In atqui aeque mandamus vis, sonet tamquam id his. Ne tota nobis his, eam tale sumo ut. Id odio ludus pro, sit ut autem ubique, no agam nemore pertinax per. Solum reque forensibus ius eu, an vix probo verear.</p>
    <p>Lorem ipsum dolor sit amet, sed alia expetenda liberavisse ut, id sit purto possim expetenda. In atqui aeque mandamus vis, sonet tamquam id his. Ne tota nobis his, eam tale sumo ut. Id odio ludus pro, sit ut autem ubique, no agam nemore pertinax per. Solum reque forensibus ius eu, an vix probo verear.</p>
    <p>Lorem ipsum dolor sit amet, sed alia expetenda <code>div .item</code> ut, id sit purto possim expetenda. In atqui aeque mandamus vis, sonet tamquam id his. Ne tota nobis his, eam tale sumo ut. Id odio ludus pro, sit ut autem ubique, no agam nemore pertinax per. Solum reque forensibus ius eu, an vix probo verear.</p>
    <p>Lorem ipsum dolor sit amet, sed alia expetenda liberavisse ut, id sit purto possim expetenda. In atqui aeque mandamus vis, sonet tamquam id his. Ne tota nobis his, eam tale sumo ut. Id odio ludus pro, sit ut autem ubique, no agam nemore pertinax per. Solum reque forensibus ius eu, an vix probo verear.</p>
    <p>Lorem ipsum dolor sit amet, sed alia expetenda liberavisse ut, id sit purto possim expetenda. In atqui aeque mandamus vis, sonet tamquam id his. Ne tota nobis his, eam tale sumo ut. Id odio ludus pro, sit ut autem ubique, no agam nemore pertinax per. Solum reque forensibus ius eu, an vix probo verear.</p>

    <p>
        <pre>
            <code>
                :root {
                --theme-color: #ffe4c4;
                --flex-list-col-num: 5;
                --flex-list-column-gap: 1em;
                --flex-width: calc((100% - var(--flex-list-column-gap) * (var(--flex-list-col-num) - 1)) / var(--flex-list-col-num));
                }
                
                #app {
                padding: 20px;
                }
            </code>
        </pre>
    </p>
</div>

上の構造はWordPressの投稿内容なんですが、<code>タグに背景色を付けたい一方で、<pre>タグで囲まれたコードブロックの<code>は除外したいっていう問題があって。つまり、段落内のインラインコードだけにスタイルをかけて、コードブロックには影響を与えたくないんです。

従来のアプローチとその限界

この問題を解決しようとすると、ふつうはこんな方法を試してみることが多いです:

  • codeタグに直接スタイルを当てる
  • preタグを除外する方法を試してみる

でも、この方法だと階層をまたいで選択することができません。

:not() を使った「階層を跨ぐ除外」の実現方法

調べてみたら、:not()セレクタで完璧に解決できることが分かりました:

code:not(pre code) {
    background-color: red;
}

このセレクタは「すべてのcodeタグを選ぶけど、preタグの中にあるcodeは除く」という意味です。

この手法が効果的な理由

:not()擬似クラスのすごいところは、単純なクラスやIDだけじゃなくて、複雑なセレクタも引数にできるってところです。だから、こんな感じで高度な選択ができるんです:

  • 複数の階層をまたいで除外すること
  • 親要素を踏まえてスタイルを調整する

この機能のおかげで、普通のCSSセレクタではできない「逆向きに選ぶ」方法ができちゃいます。

応用パターンと実用例

このテクニックはいろんな場面で使えます。例えば:

  • インラインコードだけにスタイルをつけて、コードブロックには影響させない
  • 特定の親要素の中の要素を除外したいとき
  • 複雑な階層構造を操作したい場合

まとめ::not() の可能性を引き出すには

:not()擬似クラスのこういう使い方は、CSSセレクタの柔軟さとパワフルさをよく表してますね。CSSの機能を工夫して使えば、一見ややこしい問題も案外シンプルに解決できるって分かりました。

次に「上方向に選択したい」や「特定の構造を除外したい」みたいなスタイルの問題にぶつかったら、ぜひ:not()セレクタのこの使い方を試してみてください。きっとビックリするような効果が出ますよ。

関連記事
和暦から西暦変換ツール
このツールは、日本の元号(和暦)と西暦を相互に変換できるシンプルな変換ツールです。「昭和64年は何年?」「2025年は令和何年?」といった場面で、すぐに答えがわかります。 履歴書の作成、行政手続き、年齢計算、歴史的資料の読み解きなどにご活用 […]
aki0o0
aki0o0
7ヶ月前
和暦から西暦変換ツール
PHPでウェブサイトのフッターにあるCopyrightの年数範囲を自動更新する
auto_copyright() 関数は、動的に著作権の年数を出力します。引数として開始年を受け取り、現在の年と比較して、単一年または範囲(例: 2015 - 2025)を表示します。
Details
Details
7ヶ月前
PHPでウェブサイトのフッターにあるCopyrightの年数範囲を自動更新する
【2025年6月最新版】TIOBEインデックスで見る人気プログラミング言語ランキングとは?
2025年6月最新版のTIOBEインデックスから、今人気のプログラミング言語を解説。Python、C、C++、Javaなどの注目度や、インデックスの活用方法も紹介します。
解構人
解構人
7ヶ月前
【2025年6月最新版】TIOBEインデックスで見る人気プログラミング言語ランキングとは?
iPhone(iOS Safari)における input タグの角丸問題とその対策
iPhone(iOS Safari)でinputタグに自動で適用される角丸スタイルを無効化する方法を詳しく解説。CSSによるリセットやカスタムスタイルの実装手順を、具体的なコードとともに紹介します。
キウイフルーツ
キウイフルーツ
7ヶ月前
iPhone(iOS Safari)における input タグの角丸問題とその対策
inputのプレースホルダー(placeholder)の色を変更する
プレースホルダーの色は::placeholder疑似要素で変更可能 IEやEdgeなどの古いブラウザ向けに:-ms-input-placeholder、::-ms-input-placeholderを併用 Firefoxでは透明度の調整のためopacity指定が推奨される
Details
Details
7ヶ月前
inputのプレースホルダー(placeholder)の色を変更する
SafariでGoogleフォントが正しく表示されない原因と対策【font-weight・font-style完全ガイド】
SafariやiOSでGoogleフォントが正しく表示されない主な原因と対策を徹底解説。font-weight・font-styleの指定ミスによるWebフォント崩れを解決するCSSサンプル付きガイド。
aki0o0
aki0o0
7ヶ月前
SafariでGoogleフォントが正しく表示されない原因と対策【font-weight・font-style完全ガイド】
【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法
このjQueryコードは、トグルボタンの状態に応じてナビゲーションを開閉し、背景のスクロールを動的に制御します。クラス名 back をトリガーとして、html 要素に適切なスタイルを適用し、快適なフルスクリーンUIを提供します。
Details
Details
7ヶ月前
【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法
日本語用WebサイトのCSSフォント設定(日本語フォント/游ゴシック/游明朝)
日本語フォントはOSにより異なるため、複数のフォントを優先順に指定する。 "Yu Gothic"や"Yu Mincho"はモダンな日本語フォントでWindows 8.1以降に搭載。 "ヒラギノ角ゴ"や"ヒラギノ明朝"はmacOS向けで、高品質。 "メイリオ"や"MS 明朝"などは古いWindows環境にも対応。 ゴシック体はカジュアル・読みやすさ重視、明朝体はフォーマル・高級感重視に適している。
Details
Details
7ヶ月前
日本語用WebサイトのCSSフォント設定(日本語フォント/游ゴシック/游明朝)
フッターのJavaScriptは画像読み込みに影響する?ブラウザの読み込み順と最適化の基本
はじめに Webサイトの表示速度や操作感は、単にコンテンツの量や見た目だけでなく、ブラウザがリソースをどのように読み込むかによっても大きく左右されます。特にJavaScriptや画像の読み込み順序、そしてそれらがどのように相互作用しているか […]
解構人
解構人
7ヶ月前
フッターのJavaScriptは画像読み込みに影響する?ブラウザの読み込み順と最適化の基本
ABテストとは?赤か青か?データが導く最適な選択
ABテストは、今やデジタルマーケティングの「常識」となった科学的な意思決定手法です。日本のECサイトやアプリ開発の現場でも、「どちらのデザインが効果的か」「どんなキャッチコピーが響くか」を決める際に頻繁に活用されています。 この手法のルーツ […]
解構人
解構人
6ヶ月前
ABテストとは?赤か青か?データが導く最適な選択
PHPのcheckdnsrr関数徹底解説:メールアドレス検証での活用方法
目次 フォーム開発で遭遇した課題 checkdnsrr関数とは? 主な用途 メールアドレスのドメイン検証 ドメイン存在確認 SPFレコードチェック ネットワーク診断ツール メリット デメリットと制限事項 実際の活用例 基本的なメールドメイン […]
解構人
解構人
6ヶ月前
PHPのcheckdnsrr関数徹底解説:メールアドレス検証での活用方法
ユーザーのブラウザに保存されているJavaScript、CSS、画像のキャッシュを削除するにはどうすればいいですか?
ブラウザのキャッシュによる古いJavaScript、CSS、画像の表示を防ぐには、URLにバージョン番号や日時パラメータを付けてリソースを更新する方法が有効です。 毎回タイムスタンプを使うとキャッシュ効果がなくなるため、手動や適切なタイミングでバージョン番号を管理するのがおすすめです。
Details
Details
8ヶ月前
ユーザーのブラウザに保存されているJavaScript、CSS、画像のキャッシュを削除するにはどうすればいいですか?
CSSによる絶対中央寄せ
実用性が高い方法順で7種類の実装方法を紹介 最も推奨されるのは Flexbox と Grid transform を使う方法はどんな要素にも応用可能 line-height や table-cell は特定用途向け JavaScript による制御も紹介されている
Details
Details
7ヶ月前
CSSによる絶対中央寄せ
PHPの hash_equals 関数とは?なぜ == や === を使わないのか?
hash_equals は PHP において、2つの文字列が等しいかを安全に比較するための関数です。特にパスワードのハッシュや署名の検証などで使われます。== や === といった通常の比較演算子とは異なり、タイミング攻撃(Timing A […]
解構人
解構人
5ヶ月前
PHPの hash_equals 関数とは?なぜ == や === を使わないのか?
よく使われるPHPライブラリ9選【公式リンク付き・2025年版】
2025年最新!PHPでのWeb開発に役立つライブラリ&フレームワーク12選を厳選紹介。Laravel・Symfony・PHPMailer・Guzzleなど、実務で使えるツールをまとめてチェック。公式リンク付きで、今すぐ使える便利リスト!
aki0o0
aki0o0
7ヶ月前
よく使われるPHPライブラリ9選【公式リンク付き・2025年版】