(1)CSS选择器都有权重值,权重值越大优先级越高。
内联样式表的权重值最高,值为1000。
id选择器的权重值为100。
class选择器的权值为10。
类型(元素)选择器的优先级为1。
通配符选择器的优先级为0。
(2)当权值相等时,后定义的样式表要优于先定义的样式表。
(3)在同一组属性设置中表有“!important"规则的优先级最大。
CSS优先级是根据等级的值相加得出选择器的权重来决定的。
!important >行内样式 >ID >类、伪类、属性 >标签名 >继承 >通配符
计算权重方式:
从图上看讲权重分为:
1. 第一等:代表内联样式,如: style=””,权值为1000。
2. 第二等:代表ID选择器,如:#content,权值为0100。
3. 第三等:代表类,伪类和属性选择器,如.content,权值为0010。
4. 第四等:代表类型选择器和伪元素选择器,如div p,权值为0001。
5. 通配符、子选择器、相邻选择器等的。如*、>、+,权值为0000。
6. 继承的样式没有权值。
当权重一样时遵循准则:
1. 选择器越 具体 优先级越 高
2. 在同一个级别的情况下, 最后 指定的规则优先级就越 高 ,也就是我们通常说的就近原则;
权重计算例子:
1. li ->0 0 0 1 权重为 1
2. h1 + *[rel=up] ->0 0 1 1 这个相邻选择器由标签选择器与属性选择器组成,属性选择器为10,因此权重为11
3. ul ol li.red ->0 0 1 3 权重为13
4 li.red.level ->0 0 2 1 权重21
1. !important (width: 100% !important)
2. 行内样式 (style="width:100%")
3. id选择器 (#myIdName)
4. class选择器 (.myClassName)
5. 标签选择器 (div,h1,p)
1. 使用 " >>>" 符号,这种方式主要是用于普通css,方式为:
外层 >>>第三方组件样式: .wrapper >>>.swiper-pagination { color: #eee }
2. 使用 "/deep/" ,这种方式主要用于sass或less,方式为:
外层 /deep/ 第三方组件样式: .wrapper /deep/ .swiper-pagination { color: #eee }
当在一个样式声明中使用一个 !important 规则时,此声明将覆盖任何其他声明。虽然,从技术上讲, !important 与优先级无关,但它与最终的结果直接相关。使用 !important 是一个 坏习惯 ,应该尽量避免,因为这破坏了样式表中的固有的级联规则 使得调试找bug变得更加困难了。当两条相互冲突的带有 !important 规则的声明被应用到相同的元素上时,拥有更大优先级的声明将会被采用。
一些经验法则:
什么的情况下可以使用 !important:
A) 覆盖内联样式
你的网站上有一个设定了全站样式的 CSS 文件,同时你(或是你同事)写了一些很差的内联样式。
全局的CSS文件会在全局范围内设置网站的外观,而直接在各个元素上定义的内联样式可能会覆盖您的全局CSS文件。 内联样式和!important都被认为是非常不好的做法,但是有时你可以在CSS文件里用!important去覆盖内联样式。
在这种情况下,你就可以在你全局的 CSS 文件中写一些 !important 的样式来覆盖掉那些直接写在元素上的行内样式。