"div> p"和"div p"相同吗?

fom*_*icz 18 html css css-selectors

嘿,我有一个明显的问题.

对于像这样的代码

<div>
     <p>We want to format this text :)</p>
</div>
Run Code Online (Sandbox Code Playgroud)

有些人使用选择器:

div > p {
     something
}
Run Code Online (Sandbox Code Playgroud)

和别的:

div p {
     something
}
Run Code Online (Sandbox Code Playgroud)

这种情况有什么不同?在我看来 - 没有?

顺便说一句,后代项目不是一个孩子吗?!这两者有什么区别?我正在阅读w3.org,但无法得到它:)

谢谢!

Pek*_*ica 37

简单:

 div > p
Run Code Online (Sandbox Code Playgroud)

只影响直接的孩子.

 div p
Run Code Online (Sandbox Code Playgroud)

也影响孙子孙女,孙子孙女等.(在你的例子中不会有所作为)

IE6不支持子选择.

  • @BalusC你显然不知道你在说什么.CSS4将支持漫画选择器:例如,对于***的HTML元素,"<3",对于*funny*内容,`^ _ ^`. (9认同)
  • ...我们不能等待IE6死掉,这样我们终于可以使用那些该死的孩子选择器了:) (4认同)
  • @fomicz没有.`+`选择器选择*下一个兄弟* (3认同)
  • Oo不是有效的选择器. (3认同)
  • @BoltClock 它将在斜体段落中匹配带有 ID `stackoverflow` 的独角兽图像。 (2认同)

Bol*_*ock 16

佩卡在他的回答中在理论上对此进行了解释.根据他的回答和我对另一个关于>组合子的问题的回答,我将提供一个例子,经过修改以解决这个问题.

考虑以下HTML块和您的示例CSS选择器.我使用了更详细的示例,因此我可以向您展示两个选择器之间的区别:

<div>
    <p>The first paragraph.</p>                 <!-- [1] -->
    <blockquote>
        <p>A quotation.</p>                     <!-- [2] -->
    </blockquote>
    <div>
        <p>A paragraph after the quotation.</p> <!-- [3] -->
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

哪个<p>选择器选择哪个?

首先,所有这些都匹配,div p因为它们是<p>位于元素内任何位置<div>元素.

div > p更具体,这引出了下一个问题:

<p>选择哪个div > p

  1. 本段<p>是最外层的儿童或直系后裔<div>.这意味着它不会被任何其他元素立即包含在内<div>.层次结构就像选择器描述的那样简单,因此它被选中div > p.

  2. 未选中的

    <p>是在发现<blockquote>元件,该<blockquote>元件在最外面的发现<div>.因此层次结构如下所示:

    div > blockquote > p
    
    Run Code Online (Sandbox Code Playgroud)

    由于段落直接包含在块引用中,因此不会选择它div > p.但是,它可以匹配blockquote > p(换句话说,它是一个孩子<blockquote>).

  3. 这段生活在内部<div>,由外部包含<div>.层次结构如下所示:

    div > div > p
    
    Run Code Online (Sandbox Code Playgroud)

    如果彼此之间存在更多<div>嵌套,或者即使<div>s被其他元素包含也无关紧要.只要该段直接包含在其中<div>,它就会被选中div > p.

  • +1这个答案符合`:o`选择器(令人惊讶的详细解释) (2认同)