CSS选择器后代选择器

时间:2013-10-22 03:51:57

标签: css css-selectors

我无法理解 W3C规范中的以下内容。

  

div * p

     

匹配作为DIV元素的孙子或后来的后代的P元素。请注意,“*”两侧的空白区域不是通用选择器的一部分; 白色空间是一个组合子,表示DIV必须是某个元素的祖先,并且该元素必须是P的祖先。

白色空间是如何组合,表明DIV必须是某个元素的祖先?

请帮助澄清

1 个答案:

答案 0 :(得分:3)

要回答您的问题,您需要先了解浏览器如何解释CSS规则。

无论何时编写CSS选择器,都可以在选择器中使用一个或多个元素。例如,选择器div有一个元素,div pdiv > p都有两个元素。

将CSS选择器视为几个过滤阶段。 CSS选择器实际上是由浏览器从右到左读取它们来解释的。当在选择器中指定多个元素时,首先找到最右边一块的所有元素,然后过滤下一块所设置的元素,依此类推。

div规则的情况下,我们说“在页面上找到所有'div'元素”。很简单。

div p规则的情况下,我们首先“在页面上找到所有'p'元素”。但是,对于每个'p'元素,我们然后问“给我''''元素,'div'作为祖先”。

使用相同的逻辑,让我们描述div * p:我们首先“在页面上找到所有'p'元素”。接下来,我们问“给我一个'p'元素,它们具有任何类型的父元素”。从那个设置开始,我们再问'给我这个集合中有'div'作为祖先的元素。“

选择器div * p 几乎div p相同,但有一个关键区别:<div>必须至少是祖父母要匹配的选择器的<p>。有关示例,请参阅http://jsfiddle.net/cDTGY/