CSS子代与子代选择器


298

我对这两个选择器有些困惑。

后代选择器是否:

div p

选择所有pdiv它是否是一个即时descedent?那么,如果p在另一个内部div,则仍会被选中?

然后是选择器:

div > p

有什么不同?一个孩子意味着直系孩子吗?例如。

<div><p>

<div><div><p>

是否都将被选中?


我试图在这里详细解释,如果对其他人有帮助的话,可以参考一下……
Alien先生

Answers:


468

只要想一想英语中的“孩子”和“后代”是什么意思:

  • 我的女儿既是我的孩子,又是我的后代
  • 我的孙女不是我的孩子,但她是我的后代。

49
一个重要的注意事项是,子选择器将比后代选择器更快,这会对具有1000个DOM元素的页面产生明显影响。
杰克·威尔逊

很好的答案,但我只是简单地在问题中添加对他的示例的直接答案,只是为了使之荒谬可笑。
JoeCool 2013年


23

Bascailly,“ AB ”所有选择B的内部,而“ A> B ”选择B的东西只是孩子的一个,也不会选择b什么是孩子b是什么的孩子一个

此示例说明了不同之处:

div span{background:red}
div>span{background:green}

<div><span>abc</span><span>def<span>ghi</span></span></div>

abcdef的背景色将是绿色,但是ghi将具有红色的背景色。

重要说明:如果您将规则的顺序更改为:

div>span{background:green}
div span{background:red}

所有字母都将具有红色背景,因为后代选择器也会选择子字母。


您添加的“重要”部分使此答案完整。谢谢!
Aakash Verma

10

从理论上讲: Child =>祖先的直接后代(例如Joe和他的父亲)

后代=>从特定祖先后代的任何元素(例如,乔和他的曾曾祖父)

实践中:尝试以下HTML:

<div class="one">
  <span>Span 1.
    <span>Span 2.</span>
  </span>
</div>

<div class="two">
  <span>Span 1.
    <span>Span 2.</span>
  </span>
</div>

使用此CSS:

span { color: red; } 
div.one span { color: blue; } 
div.two > span { color: green; }

http://jsfiddle.net/X343c/1/


有趣的是,您在哪种浏览器上进行了测试,因为它确实可以正常工作
yoel halb 2014年

3
仅供参考,答案中的CSS与JSFiddle中的CSS不匹配(redblue交换)。

7

请注意,Internet Explorer 6不支持子选择器。(如果您在jQuery / Prototype / YUI等选择器中使用选择器,而不是在样式表中使用它,则该选择器仍然可以使用)


我想我在CSS中使用它。但是在jquery中,我检测浏览器是否为ie6(在jquery中我可以这样做吗?还是我需要使用<!-[如果IE 6]>)并添加一个类
iceangel89

2
jQuery确实具有嗅探功能而不是浏览器嗅探功能,因此我认为您无法检测到浏览器是否为ie6。而且你不应该。最好的办法是为ie6包括一个附加的样式表,其中包含您所描述的条件注释。
rlovtang

4
div p 

选择所有父元素为“ div”元素的“ p”元素

div> p

这意味着直系子代选择所有“ p”元素,其中父代是“ div”元素


-1

CSS选择和将样式应用于特定元素可以通过遍历dom元素来完成[示例

.a .b .c .d{
    background: #bdbdbd;
}
div>div>div>div:last-child{
    background: red;
}
<div class='a'>The first paragraph.
 <div class='b'>The second paragraph.
  <div class='c'>The third paragraph.
   <div class='d'>The fourth paragraph.</div>
   <div class='e'>The fourth paragraph.</div>
  </div>
 </div>
</div>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.