CSS3 предоставляет псевдокласс :first-of-type
для выбора первого элемента своего типа по отношению к его родным элементам. Однако у него нет псевдокласса :first-of-class
.
В качестве обходного пути, если вы знаете стили по умолчанию для других элементов .A
, вы можете использовать правило переопределения с общим комбинатором братьев и сестер ~
, чтобы применять к ним стили. Таким образом, вы как бы «отменяете» первое правило.
Плохая новость заключается в том, что ~
является селектором CSS3.
Хорошей новостью является то, что IE распознает его, начиная с IE7, как CSS1 >
, поэтому, если вы беспокоитесь о совместимости браузера, единственный «основной браузер», на котором это не работает, - это IE6.
Итак, у вас есть два правила:
.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
, поэтому применяется первое правило. Однако до него не было других подобных элементов, которые требуются для селектора ~
, поэтому второе правило - , а не .
Этот элемент имеет класс A
, поэтому применяется первое правило. Он также идет после других элементов с тем же классом под тем же родителем, как требуется ~
, поэтому также применяется второе правило. Первое правило отменено.