【问题标题】:Are "div > p" & "div p" same?“div > p”和“div p”一样吗?
【发布时间】:2011-04-13 05:28:30
【问题描述】:

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

对于像这样的代码:

<div>
     <p>We want to format this text :)</p>
</div>

有些人使用如下选择器:

div > p {
     something
}

还有其他人:

div p {
     something
}

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

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

谢谢!

【问题讨论】:

  • 那不是 CSS3 选择器。那是一个 CSS2 选择器。

标签: html css css-selectors


【解决方案1】:

简单:

 div > p

只影响直接子代。

 div p

影响孙辈、孙辈等。也是如此。(在您的示例中不会产生影响)

子选择器isn't supported by IE6

【讨论】:

  • ...我们等不及 IE6 死了,所以我们终于可以使用那些该死的子选择器了 :)
  • 这对我来说没有意义。如果这是真的,那么 "div > p" 等于 "div + p" O.o
  • @fomicz 没有。 + 选择器选择 下一个兄弟
  • @BalusC 你显然不知道你在说什么。 CSS4 将支持漫画选择器:例如&lt;3 表示 可爱 的 HTML 元素,^_^ 表示 有趣 内容。
  • @BoltClock 它将匹配斜体段落中ID为stackoverflow的独角兽图像。
【解决方案2】:

Pekka 在his answer 中对其进行了理论上的解释。根据他的回答和my answer to another question about the &gt; combinator,我将提供一个插图,经过修改以解决这个问题。

考虑以下 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>

哪些&lt;p&gt;s 被哪些选择器选中?

首先,它们都匹配div p,因为它们是&lt;p&gt; 元素,位于&lt;div&gt; 元素内的任何位置

这使得div &gt; p 更加具体,这就引出了下一个问题:

div &gt; p选择了哪些&lt;p&gt;s?

  1. 已选择

    此段落&lt;p&gt; 是最外层&lt;div&gt; 的子代或直系后代。这意味着它不会立即包含在&lt;div&gt; 之外的任何其他元素中。层次结构与选择器描述的一样简单,因此由div &gt; p 选择。

  2. 未选择

    &lt;p&gt; 位于 &lt;blockquote&gt; 元素中,&lt;blockquote&gt; 元素位于最外层的 &lt;div&gt; 中。因此,层次结构如下所示:

    div > blockquote > p
    

    由于段落直接包含在块引用中,它不是div &gt; p 选择的。但是,它可以匹配 blockquote &gt; p(换句话说,它是 &lt;blockquote&gt; 的子代)。

  3. 已选择

    此段落位于内部&lt;div&gt; 中,而外部&lt;div&gt; 则包含它。层次结构如下所示:

    div > div > p
    

    是否有更多的&lt;div&gt;s 相互嵌套,或者即使&lt;div&gt;s 包含在其他元素中也没关系。只要这个段落被自己的&lt;div&gt;直接包含,就会被div &gt; p选中。

【讨论】:

  • @Šime Vidas:好吧,OP 确实要求区别:P
  • +1 这个答案符合:o 选择器(令人惊讶的详细解释)
  • @Pekka:哈哈! This isn't my only one :)
  • 在 2015 年仍然是一个很好的答案。+1 =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 2010-11-21
  • 2011-01-14
相关资源
最近更新 更多