IDまたはクラス「B」の要素でクラス「A」の最初の要素を選択しようとしています。クラス要素「B」内の最初の要素ではないため、> +と最初の子のセレクターの組み合わせを試しました。それは機能しましたが...私はいくつかのデフォルトのcssをオーバーライドしようとしていますが、サーバー側を制御できず、クラス「A」要素が別の位置で生成されることがあるようです。これがイラストです:
<class-C>
<class-B> might have a different name
<some-other-classes> structure and element count might differ
<class-A></class-A> our target
<class-A></class-A> this shouldn't be affected
<class-A></class-A> this shouldn't be affected
</class-B>
</class-C>
クラス「B」の名前が異なり、「A」の前の要素も異なる場合があります。では、要素「C」で最初に出現する「A」を選択する方法はありますか?クラス「C」は常にそこにあるからです。最初の「A」要素へのパスが異なるため、+>および最初の子セレクターを使用できませんが、要素「C」は常に存在し、それは素晴らしい出発点になります。
CSS3は、兄弟に関連してそのタイプの最初の要素を選択するための:first-of-type
疑似クラスを提供します。ただし、:first-of-class
疑似クラスはありません。
回避策として、他の.A
要素のデフォルトのスタイルがわかっている場合は、一般的な兄弟コンビネータ~
でオーバーライドルールを使用して、それらにスタイルを適用できます。このようにして、最初のルールを「元に戻す」ようにします。
悪いニュースは、~
がCSS3セレクターであるということです。
良いニュースは、IEは、CSS2の>
のように、IE7以降で認識されるため、ブラウザーの互換性が心配な場合は、唯一の「主要なブラウザー」です。これはIE6で失敗します。
したがって、次の2つのルールがあります。
.C > * > .A {
/*
* Style every .A that's a grandchild of .C.
* This is the element you're looking for.
*/
}
.C > * > .A ~ .A {
/*
* Style only the .A elements following the first .A child
* of each element that's a child of .C.
* You need to manually revert/undo the styles in the above rule here.
*/
}
スタイルが要素にどのように適用されるかを以下に示します。
<div class="C">
<!--
As in the question, this element may have a class other than B.
Hence the intermediate '*' selector above (I don't know what tag it is).
-->
<div class="B">
<div class="E">Content</div> <!-- [1] -->
<div class="F">Content</div> <!-- [1] -->
<div class="A">Content</div> <!-- [2] -->
<div class="A">Content</div> <!-- [3] -->
</div>
<div class="D">
<div class="A">Content</div> <!-- [2] -->
<div class="E">Content</div> <!-- [1] -->
<div class="F">Content</div> <!-- [1] -->
<div class="A">Content</div> <!-- [3] -->
</div>
</div>
この要素にはクラスA
がありません。ルールは適用されません。
この要素のクラスはA
であるため、最初のルールが適用されます。ただし、その前に~
セレクターが必要とする他のそのような要素はないため、2番目のルールはnotが適用されます。
この要素のクラスはA
であるため、最初のルールが適用されます。また、~
で要求されるように、同じ親の下で同じクラスを持つ他の要素の後に来るため、2番目のルールも適用されます。最初のルールは上書きされます。