【问题标题】:Why CSS Descendant Combinator doesn't overrides styles of Class Selector为什么 CSS 后代组合器不会覆盖类选择器的样式
【发布时间】:2016-04-04 00:18:27
【问题描述】:

我在规范Calculating a selector's specificity 中使用了示例来确定选择器的权重。两个选择器都具有特异性:11 分。 11 = 10(类名)+1(元素名)

根据规范w3c cascading rules,第二个选择器应该覆盖第一个选择器,因为它稍后会出现在文件中。 因此,我的问题是为什么该段落仍然是红色的?

p.c11 {             
  color: darkred;
}

p .c11 {              
  color: magenta;
}  
<p>
    <p class="c11">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sed, eius iusto     provident laudantium voluptates adipisci voluptatem amet repudiandae ex aspernatur rem voluptatibus recusandae vero corporis distinctio quia reprehenderit dolores facere.
    </p>
</p>

【问题讨论】:

    标签: css css-selectors css-specificity


    【解决方案1】:

    因此,我的问题是为什么该段落仍然是红色的?

    您的 HTML 无效。您不能嵌套 p 元素。有关p 元素可以包含的元素列表,请参阅relevant spec

    由于它无效,这就是元素的渲染方式:

    <p class="c11">Lorem ipsum dolor...</p>
    <p></p>
    

    段落仍然是红色的,因为选择器p .c11 将选择一个类为c11 的元素,它是p 元素的后代。选择器p .c11 中的空格是descendant combinator。由于您不能嵌套 p 元素,所以选择器 p .c11 没有选择任何内容。

    【讨论】:

    • 为什么我可以嵌套 div 但不能为 'p' 做同样的事情?
    • @ieXcept 因为一个文档分区可以包含较小的文档分区,但是一个段落包含其他段落是没有意义的。
    • 另外,你确定p 不能嵌套在p 中。根据规范,p 可以存在于流内容中,p 是其中的一部分。
    • @Oriol,我明白这没有意义,但我不确定它是否无效。
    • @Michael_B Oriol 说了什么。此外,它不是validate。抛出以下错误:"No p element in scope but a p end tag seen."
    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 2017-08-08
    • 2011-11-21
    • 2011-11-14
    • 2012-02-15
    • 2019-11-13
    • 1970-01-01
    • 2019-05-21
    相关资源
    最近更新 更多