CSSセレクタでスマートにコーディング!「A または B かつ C」の書き方まとめ

2024-06-16

CSS セレクタ "(A または B) かつ C" の詳細解説

このCSSセレクタは、A または B の要素であり、かつ C の条件を満たす要素を選択します。"かつ" は論理積を表し、すべての条件を満たす要素だけが対象となります。

構文

A, B.C {
  /* スタイル */
}

以下の例では、p 要素または h1 要素で、かつ .red クラスを持つ要素にスタイルが適用されます。

p, h1.red {
  color: red;
  font-weight: bold;
}

詳細

  • A または B: これは論理和を表し、A または B のどちらかの条件を満たす要素を選択します。
  • .C:** これはクラスセレクタで、.red クラスを持つ要素を選択します。
  • 組み合わせることで、より複雑な条件を指定できます。例えば、p.red, h1.blue とすると、p 要素で .red クラスを持つ要素と、h1 要素で .blue クラスを持つ要素を選択します。

補足

  • このセレクタは、ネストされた要素にも適用されます。例えば、div p.red とすると、div 要素内にあり、かつ .red クラスを持つ p 要素が対象となります。
  • 擬似クラスや擬似要素も組み合わせることができます。例えば、a:hover.red とすると、マウスカーソルがホバリングしている a 要素で、かつ .red クラスを持つ要素が対象となります。
    • 上記以外にも、様々なCSSセレクタが存在します。詳細は、MDN Web Docsなどのリファレンスを参照してください。
    • CSSは奥深い言語なので、最初は簡単なセレクタから始めて、徐々に複雑なセレクタを学んでいくことをおすすめします。



    例1:要素の種類とクラス

    p.red, h1.blue {
      color: #f00; /* 赤色 */
      font-weight: bold;
    }
    

    このコードは、p 要素で .red クラスを持つ要素と、h1 要素で .blue クラスを持つ要素に、赤色と太字のスタイルを適用します。

    例2:要素の子孫要素と属性

    div ul li.active[data-status="completed"] {
      text-decoration: line-through;
    }
    

    このコードは、div 要素の子孫要素である ul 要素の中の li 要素で、.active クラスを持ち、かつ data-status 属性の値が "completed" である要素に、取り消し線のスタイルを適用します。

    例3:擬似クラスと擬似要素

    a:hover.red::after {
      content: " (詳細)";
      background-color: #ccc;
      padding: 5px;
    }
    

    このコードは、マウスカーソルがホバリングしている a 要素で .red クラスを持つ要素の直後に、" (詳細)" というテキストとグレー色の背景を持つ擬似要素を挿入します。

    例4:複数の子孫要素

    div .section:nth-child(odd) h2 {
      background-color: #eee;
    }
    

    このコードは、div 要素の子孫要素である .section クラスを持つ要素のうち、奇数番目の要素 (nth-child(odd)) 内の h2 要素に、グレー色の背景を適用します。

    例5:兄弟要素

    li + li.active {
      font-weight: bold;
    }
    

    このコードは、li 要素の直後に .active クラスを持つ li 要素に、太字のスタイルを適用します。




      CSS セレクタ "(A または B) かつ C" を表現するその他の方法

      擬似クラス :is() を使用する

      p, h1:is(.red, .blue) {
        /* スタイル */
      }
      

      この例では、擬似クラス :is() を使用して、p 要素または h1 要素のうち、.red クラス または .blue クラスの いずれか を持つ要素を選択します。

      属性セレクタを組み合わせる

      p[class*="red blue"] {
        /* スタイル */
      }
      

      この例では、属性セレクタ [class*="red blue"] を使用して、class 属性の値に "red" または "blue" を含む p 要素を選択します。

      JavaScript を使用する

      const elements = document.querySelectorAll('p, h1');
      for (const element of elements) {
        if (element.classList.contains('red') || element.classList.contains('blue')) {
          // スタイルを適用
        }
      }
      
      • シンプルな条件であれば、A, B.C のような書き方が最もわかりやすく、読みやすいです。
      • より複雑な条件や、動的にスタイルを適用したい場合は、擬似クラス :is() や JavaScript を使用する方法が適しています。

          html css css-selectors


          最速でマスター!CSSでテキストを非表示にする3分間チュートリアル

          display: none; は、要素を完全に非表示にする最も一般的な方法です。このプロパティを指定すると、要素は画面に表示されなくなり、スクリーンリーダーでも読み上げられません。visibility: hidden; は、要素を非表示にしますが、画面上のスペースは確保されます。つまり、要素は目に見えませんが、スクリーンリーダーでは読み上げることができます。...


          CSSのみで上付き文字を表示する方法【positionプロパティを使った簡単実装】

          そこで、CSSのみを使って上付き文字を表示する方法をご紹介します。vertical-alignプロパティを使って、文字の垂直方向の位置を調整することで、上付き文字を表示することができます。この例では、.superscriptクラスが付与された文字が上付き文字になります。...


          DOM操作で陥りがちな落とし穴!JavaScriptで「送信は関数ではありません」エラーを回避する方法

          送信ボタンの ID または名前のスペルミス送信ボタンに誤った ID または名前が指定されていると、JavaScript がそのボタンを認識できず、このエラーが発生します。解決策:送信ボタンの ID または名前が正しく記述されていることを確認してください。...


          【HTMLとCSS】入力欄のサイズと幅を自在に調整! ユーザー満足度アップの秘訣

          HTMLでの入力サイズと幅の属性HTMLでは、input要素のサイズと幅を直接制御する属性はありません。代わりに、以下の属性を使用して、ブラウザがデフォルトで表示する入力フィールドのサイズを間接的に制御することができます。type: 入力フィールドの種類を指定します。text、password、number、emailなどの種類があり、それぞれ異なるデフォルトサイズが設定されています。...


          HTML ネストリストのトラブルシューティング

          ネストリストは、<ul> と <li> タグを使って作成します。<ul> タグは、リストの開始を表します。ネストリストを作成するには、<ul> タグの中に複数の <li> タグをネストさせます。上記の例では、3つの項目を持つリストを作成しています。3番目の項目は、さらに2つのサブ項目を持つネストリストになっています。...