Ответ 1
CSS3 предоставляет псевдо-класс :first-of-type
для выбора первого элемента его типа по отношению к его братьям и сестрам. Однако он не имеет псевдо-класса :first-of-class
.
В качестве обходного пути, если вы знаете стили по умолчанию для других элементов .A
, вы можете использовать правило переопределения с общим сочетанием sibling ~
для применения к ним стилей. Таким образом, вы отмените первое правило.
Плохая новость заключается в том, что ~
является селектором CSS3.
Хорошей новостью является то, что IE распознает ее, начиная с IE7, например, CSS2 >
, поэтому, если вас беспокоит совместимость браузера, единственным "основным браузером", с которым это происходит, является IE6.
Итак, у вас есть эти два правила:
.C > * > .A {
/*
* Style every .A that 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 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
, поэтому применяется первое правило. Он также приходит после других элементов с одним и тем же классом под одним и тем же родителем, как требуется~
, поэтому применяется второе правило. Первое правило переопределяется.