【问题标题】:Specific question on CSS Specificity关于 CSS 特异性的具体问题
【发布时间】:2011-08-23 19:54:47
【问题描述】:

我有一个关于 CSS 特异性的非常具体的问题,我无法清楚地理解; http://coding.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/

如果我有 2 个定义不矛盾的属性/属性的选择器,这两个属性是否仍然会被应用,或者它的工作方式是,它只是比较选择器,而不影响它们内部定义的内容。

如果我们有;

.menu1 {color:red}
p.menu1 {font-size:10px}

这里两个选择器都引用“menu1”,但定义了不相关的属性(颜色/字体大小)

所以我的问题是特异性仍然很重要,并且只考虑 2 个中的 1 个吗?我的问题更多的是关于实际实现是如何发生的。

【问题讨论】:

    标签: css css-selectors css-specificity


    【解决方案1】:

    不,在这种情况下,特异性无关紧要,因为您只是向 menu1 类添加了一个额外的属性,这不会更改任何现有规则。但是,如果您颠倒规则的顺序并尝试覆盖color

    p.menu1 {color:blue}
    .menu1 {color:red}
    

    那么不太具体规则.menu1 {color:red}不会覆盖更具体p.menu1 {color:blue},即使“红色”规则出现在“蓝色”规则之后(试试看)。

    当然,如果您将第二条规则更改为 p.menu1 {color:red},它将覆盖,因为这两条规则将具有相同的特异性。

    【讨论】:

    • 你似乎一针见血......你的答案正是我想要的......非常感谢......
    【解决方案2】:

    在文章的概述中,第 11 点说:

    11.最后定义的规则会覆盖任何以前的冲突规则。

    (其中“最后一条规则”可以替换为“最后一条或最具体的规则”)

    因此,如果有不同的属性,则不会覆盖任何内容。这两个规则组合在一起,所以p.menu1 的字体大小都为 10 像素并且颜色为红色。第二条规则仍然有一个更具体的选择器,但在您指定一个可能被覆盖的通用样式之前,它根本不相关。

    这一切是如何在实现中完成的,嗯,是一个实现细节,所以我不知道。

    【讨论】:

    • 请记住,带有class="menu1"不是 p 元素的元素只会是红色的;它们的字体大小可能不是 10 像素,因为它们不会响应 p.menu1 选择器。
    猜你喜欢
    • 1970-01-01
    • 2012-01-27
    • 2019-03-04
    • 2013-09-01
    • 2019-07-26
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    相关资源
    最近更新 更多