我正在深入研究子和后代选择器之间的区别。根据我找到的文档和此问题CSS Child vs Descendant selectors 我写这个例子:
<div>
<h2>h2 1</h2>
<h2>h2 2</h2>
<section>
section
<h1>h1 section's son
<h2>h2 section's nephew</h2>
</h1>
<h2>h2 section's son</h2>
</section>
<h2>h2 3</h2>
<h2>h2 4</h2>
</div>
的CSS:
section > h2 {
color:red;
}
(小提琴:http://jsfiddle.net/armdan/ksB6f/1/)
我希望在这个例子中不会选择“h2部分的侄子”,但它会被选中并变为红色。我不明白我错过了什么。
答案 0 :(得分:3)
可能是因为h1
包含h2
无效。如果您将h1
更改为可以包含h2
的元素,例如div
,则它会按预期运行:
<div>
<h2>h2 1</h2>
<h2>h2 2</h2>
<section>
section
<div>h1 section's son
<h2>h2 section's nephew</h2>
</div>
<h2>h2 section's son</h2>
</section>
<h2>h2 3</h2>
<h2>h2 4</h2>
</div>
背景:HTML5 spec for h1
表示它只能包含文字和"phrasing elements",它们是:
答案 1 :(得分:2)
有一些事情......
<h2>
无法包含在<h1>
。section > h2
选择<h2>
,它直接位于<section>
下,而不是大子元素。在后一种情况下,您需要使用section h2
。解决方法是以这种方式更改代码以使其具有语义:
<div>
<h2>h2 1</h2>
<h2>h2 2</h2>
<section>
section
<h1>h1 section's son</h1>
<h2>h2 section's nephew</h2>
<h2>h2 section's son</h2>
</section>
<h2>h2 3</h2>
<h2>h2 4</h2>
</div>