例如:
div > p.some_class { /* Some declarations */ }
>标志的具体含义是什么?
>
>是子组合器,有时被错误地称为直系后代组合器。1
这意味着选择器div > p.some_class只匹配 直接*.some_class嵌套在a中的段落,而不匹配任何进一步嵌套的段落。这意味着每个匹配的元素也必然与后代组合符(空格)匹配,因此这两者经常混淆是可以理解的。 *div``div > p.some_class``div p.some_class
div > p.some_class
.some_class
div``div > p.some_class``div p.some_class
将子组合器与后代组合器进行比较的插图:
div > p.some_class { background: yellow; } div p.some_class { color: red; } <div> <p class="some_class">Some text here</p> <!-- [1] div > p.some_class, div p.some_class --> <blockquote> <p class="some_class">More text here</p> <!-- [2] div p.some_class --> </blockquote> </div>
哪些元素由哪些选择器匹配?
由两者匹配div > p.some_class和div p.some_class Thisp.some_class直接位于 内部div,因此在两个元素之间建立了父子关系。由于“child”是“descendant”的一种,因此任何子元素根据定义也是后代。因此,两个规则都适用。
div p.some_class
p.some_class
div
仅匹配 this 由div p.some_class 中p.some_class的 a 包含blockquote,div而不是div本身。虽然这p.some_class是 的后代div,但它不是孩子;这是一个孙子。因此,仅应用在其选择器中具有后代组合器的规则。
blockquote
1 许多人更进一步称其为“直接子元素”或“直接子元素”,但这完全没有必要(而且对我来说非常烦人),因为子元素无论如何 定义 都是直接 __的,所以它们的含义完全相同。 没有所谓的“间接孩子”。