【问题标题】:why css apply #flowerContainer img rule instead of applying #flower rule为什么css应用#flowerContainer img规则而不是应用#flower规则
【发布时间】:2015-11-04 09:02:32
【问题描述】:

好的,有很多文章在讨论 CSS 中的级联优先级,我最近阅读了this one,我发现了一些要点:-

  1. id重于class,class重于tag
  2. id 权重与内联样式相同,但由于内联较晚,它赢得了优先规则
  3. more 选择器的权重大于 less 选择器,即 .container img 规则将覆盖 img 规则

看看这段代码:-

<div id="flowerContainer" >
     <img id="flower" src="..." />
</div>

尝试应用以下规则:-

#flowerContainer img{width:500px;}
#flower {width:300px}

根据第二条规则,应该应用 #flower 宽度规则,但应用了 #flowerContainer img,为什么?

【问题讨论】:

    标签: css


    【解决方案1】:

    #flowerContainer img 的特异性高于#flower 的特异性,这就是该规则在此处应用的原因。

    这是因为其中一个只有一个 ID 选择器,而另一个同时有一个 ID 选择器一个类型选择器。

    在 MDN 上阅读有关特异性的更多信息:https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity

    【讨论】:

    • 因此 img#flower 应该优先于上述任何一个示例。
    【解决方案2】:

    首先您应该阅读CSS 如何计算特异性here

    选择器的特异性计算如下:

    • 统计选择器中 ID 属性的数量 (= a)
    • 统计选择器中其他属性和伪类的数量 (= b)
    • 计算选择器中元素名称的数量 (= c) 忽略伪元素。

    连接三个数字 a-b-c(在具有大基数的数字系统中)给出了特异性。

    所以在这种情况下,

    #flowerContainer img { width:500px; } /* a=1,b=0,c=1 (a-b-c = 101) */
    
    #flower { width:300px; } /* a=1,b=0,c=0 (a-b-c = 100) */
    

    所以#flowerContainer img (101) 比#flower (100) 更具体

    【讨论】:

    • 老兄,你不应该复制我的答案!
    【解决方案3】:

    Here 是关于 CSS 如何计算优先选择器的官方文档。

    选择器的特异性计算如下:

    • 统计选择器中 ID 属性的数量 (= a)
    • 统计选择器中其他属性和伪类的数量 (= b)
    • 计算选择器中元素名称的数量 (= c) 忽略伪元素。

    连接三个数字 a-b-c(在具有大 base) 给出了特异性。

    一些例子:

    *             {}  /* a=0 b=0 c=0 -> specificity =   0 */
    LI            {}  /* a=0 b=0 c=1 -> specificity =   1 */
    UL LI         {}  /* a=0 b=0 c=2 -> specificity =   2 */
    UL OL+LI      {}  /* a=0 b=0 c=3 -> specificity =   3 */
    H1 + *[REL=up]{}  /* a=0 b=1 c=1 -> specificity =  11 */
    UL OL LI.red  {}  /* a=0 b=1 c=3 -> specificity =  13 */ 
    LI.red.level  {}  /* a=0 b=2 c=1 -> specificity =  21 */
    #x34y         {}  /* a=1 b=0 c=0 -> specificity = 100 */
    

    #id element 规则 (101) 比 #id 规则 (100) 更具体,因此它们将优先。

    【讨论】:

    • 不这么认为。 ID 规则 (#) 应优先于类 (.) 或元素 (img) 规则。但是,ID + 元素 (#img) 很可能被视为比 ID 更具体,即使 ID 不适用于元素
    • 是的,但这适用于相同权重的规则,即内部和外部样式表,而 id 和内联样式具有相同的权重,高于内部和外部样式表。从逻辑上讲,id 专门指代元素,因为每个元素不超过一个 id。在我的示例中,我选择 id 后跟任何子标签一次,然后我指定元素本身的 id 一次。我认为元素 id 应该赢得比赛
    • @MostafaNagib - 然后你需要澄清规则的位置。您的问题向我表明它们位于同一级别(在同一文件中),因此适用标准优先级。位置只会影响同等权重的结果。
    • @RogerWillcocks 是的,你是对的,请注意我将 2 个 CSS 代码并排添加,格式暗示它们处于同一级别:)
    猜你喜欢
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多