快捷搜索:  汽车  科技

css优先级比较,不得不知的CSS优先级及我们的建议

css优先级比较,不得不知的CSS优先级及我们的建议这3条CSS规则都选定了上述的p元素,但是浏览器只能用一种颜色来绘制文本。类似这样的样式冲突,究竟哪个规则会起作用呢?#introduction{ color: red;}我们分别使用标签(tag)、类(class)和ID选择器来设置元素的颜色:p{ color: blue;}.message{ color: green;}

由于前面章节所述的CSS继承特性以及多种类型的选择器作用域范围会出现重叠,所以常会有多个CSS规则作用于同一个HTML元素。比如对于下面的HTML代码:

<p class="message" id="introduction">

CSS优选级课程.

</p>

我们分别使用标签(tag)、类(class)和ID选择器来设置元素的颜色:

p{ color: blue;}

.message{ color: green;}

#introduction{ color: red;}

这3条CSS规则都选定了上述的p元素,但是浏览器只能用一种颜色来绘制文本。类似这样的样式冲突,究竟哪个规则会起作用呢?

答案是靠级联(cascade)

级联将结合重要性、具体性(或称为特殊性:Specificity)以及出现的顺序来决定每一种样式属性的权重, 这个权重将会用来决定浏览器将会采用哪一种样式属性,权重高的则优先使用(具有更高的作用优先级)。上例中p的颜色将会是红色,因为 #id 选择器是最具体的也因此是最重要的。

  • 内联样式(inline styling) 权重 1000

  • ID(#id) 权重 100

  • 类(.class) 权重 10

  • 标签(tag) 权重 1

  • 然后你可以把多个选择器的权值相加,来得到最终的Specificity:

    • p 具体性 1 (1个标签选择器)

    • div p 具体性 2 (2个标签选择器 1 1)

    • tree 具体性 10 (1个类选择器)

    • div p.tree 具体性 12 (2个标签选择器 1个类选择器 1 1 10)

    • #baobab 具体性 100 (1个id选择器)

    • body #content .alternative p 具体性 112 (标签选择器 id选择器 class选择器 标签选择器 1 100 10 1)

    选择器具体性的完整计算公式要比上面复杂得多,但了解上面的法则在一般情况下已经足够。

    第四步,判断样式属性出现的先后顺序

    这一步最简单,出现晚的选择器将拥有高优先级,也就是后来者居上。

    对于外部引入的样式表,@import比link拥有更高的优先级,不管它是否出现在link引入之后。

    理解了上述的优先级计算规则,我们应该可以推断出前面例子中p元素的最终颜色:

    #introduction{ color: red;}

    .message{ color: green;}

    p{ color: blue;}

    <p class="message" id="introduction">

    HTML/CSS高级教程。

    </p>

    如何避免冲突

    尽管浏览器能够处理CSS样式冲突,但避免不必要的样式冲突仍然是一个好的编程习惯,即可以避免意外的样式覆盖,也有助于减少无谓的优先级计算。

    我们推荐的编码规范是:

    • 尽量使用 class,而不是id,即使该元素在HTML文档中只出现过一次

    • 避免在一个HTML元素上使用多个类:不建议这样写 <p class="big red important">,建议写成 <p class="title">,后者具有更好的语义描述性

    • 避免使用内联样式(inline styles) 比如 <div style="background: blue;">

    当然上面的只是一般性建议,很多场合下给一个HTML元素添加多个类是有益的,比如给所有希望被隐藏的元素加上hidden类(display:none),可以提高样式代码的复用度。

    css优先级比较,不得不知的CSS优先级及我们的建议(1)

    猜您喜欢: