CSS选择器优先性以及权重计算

2018-07-19  本文已影响0人  zx_lau

样式根据引入和声明需要分开介绍,一般来说分为引入样式优先级声明样式优先级

一、引入样式优先级

引入样式优先级一般是在外部样式、内部样式、内联样式之间应用同一个样式的情况是使用, 优先级如下:

外部样式 | 内部样式 < 内联样式

外部样式和内部样式,最后出现的优先级最高。

二、样式声明优先级

a.选择器类型

    ①、ID  #id

    ②、class  .class

    ③、标签  p

    ④、通用  *

    ⑤、属性  [type="text"]

    ⑥、伪类  :hover

    ⑦、伪元素  ::first-line

    ⑧、子选择器、相邻选择器

b、选择器所占权重

    ①:代表内联样式,如: style=””,权值为1000。

    ②:代表ID选择器,如:#content,权值为100。

    ③:代表类,伪类和属性选择器,如.content,权值为10。

    ④:代表类型选择器和伪元素选择器,如div p,权值为1。    

    ⑤:通配符、子选择器、相邻选择器等的。如*、>、+,权值为0。

    ⑥:继承的样式没有权值。

权值计算示例

c、!important

    !important是选择器优先级比较特殊的存在。

    !important 的作用是提升优先级,换句话说。加了这句的样式的优先级是最高的(比内联样式的优先级还高)。

    加了!important的样式如果要覆盖的话,只能在后面继续加important,所以一般不建议使用。

    table td {height:50px!important;}

    .myTable td{height:50px!important;}

    #myTable td{height:50px!important;}   //生效

d、就近原则

    当权值相同的情况下怎么办呢,这个时候就要看就近原则了。

    css有4种引入方式,除了行内式以外,后设置的值会覆盖前面设置的, 因为剩余三种引入方式都是在头部引入,后设置也就离目标属性更近,   也就是就近原则了。

e、基于形式的优先级

    优先级是基于选择器的形式进行计算的。在下面的例子中,尽管选择器*[id="foo"] 选择了一个ID,但是它还是作为一个属性选择器来计算自身的优先级。

    *#foo{color:green;}     //生效

    *[id="foo"] {color:purple;}

f、无视DOM树的距离

    body h1 {color:green;}

    html h1 {color:purple;}   //生效

上一篇下一篇

猜你喜欢

热点阅读