Я вникаю в разницу между дочерним и потоковым селектором. В соответствии с документацией, которую я нашел, и к этому вопросу сериалы CSS Child vs Descendant я пишу этот пример:
<div>
<h2>h2 1</h2>
<h2>h2 2</h2>
<section>
section
<h1>h1 section son
<h2>h2 section nephew</h2>
</h1>
<h2>h2 section son</h2>
</section>
<h2>h2 3</h2>
<h2>h2 4</h2>
</div>
CSS:
section > h2 {
color:red;
}
(скрипка здесь: http://jsfiddle.net/armdan/ksB6f/1/)
Я ожидал, что в этом примере "h2 section племянник" не будет выбран, но он выбран и станет красным. Я не понимаю, чего не хватает.
Вероятно, это связано с тем, что h1
содержит h2
. Если вы измените h1
на элемент, который может содержать h2
, например div
, он работает так, как вы ожидаете:
<div>
<h2>h2 1</h2>
<h2>h2 2</h2>
<section>
section
<div>h1 section son
<h2>h2 section nephew</h2>
</div>
<h2>h2 section son</h2>
</section>
<h2>h2 3</h2>
<h2>h2 4</h2>
</div>
Предпосылки: спецификация HTML5 для h1
говорит, что она может содержать только текст и "фразировочные элементы", которые:
Есть несколько вещей...
<h2>
не может содержаться внутри <h1>
.section > h2
выбирает <h2>
, который находится непосредственно под <section>
а не как большой дочерний элемент. В последнем случае вам нужно использовать section h2
.Временные решения будут менять ваш код таким образом, чтобы сделать его семантическим:
<div>
<h2>h2 1</h2>
<h2>h2 2</h2>
<section>
section
<h1>h1 section son</h1>
<h2>h2 section nephew</h2>
<h2>h2 section son</h2>
</section>
<h2>h2 3</h2>
<h2>h2 4</h2>
</div>
<section>
а не как дочерний элемент» Дочерний элемент по определению - это тот, который находится непосредственно под другим элементом.