美文网首页
CSS样式选择器的权重之重塑三观

CSS样式选择器的权重之重塑三观

作者: 陈建芳 | 来源:发表于2016-11-28 16:07 被阅读0次

关于css权重,前端开发者大概能想到:!important优先级最高,内联样式次之,然后是css样式文件显示最后的样式选择器。</br>
 周末看了《CSS权威指南》的第三章-结构和层叠,感触很深。整理了一下读书笔记,分享给大家!</br>
 页面显示样式的优先级取决于其“特殊性”’,特殊性越高,就显示最高的,当特殊性相等时,显示后者。只要弄明白特殊性的高低,对于选择器的权重就能迎刃而解。</br>
 三观重塑从特殊性的概念开始,非常重要!特殊性表述为4个部分:0,0,0,0。一个选择器的特殊性如下确定:
  1.对于选择器是#id的属性值,特殊性值为:0,1,0,0
  2.对于属性选择器、class或伪类,特殊性值为:0,0,1,0
**   3.对于标签选择器或伪元素,特殊性值为:0,0,0,1**
**   4.通配符‘*’对特殊性值为:0,0,0,0 所以通配符对与选择器来说不会影响其特殊性值,但对继承属性的时候会有影响,后面会讲解。**

例如:

h1{color:red;} /* specificity = 0,0,0,1  */
p em{color: purple;} /* specificity = 0,0,0,2  */
.grape{color:purple;} /* specificity = 0,0,1,0  */
*.bright{color:yellow;} /* specificity = 0,0,1,0 */
p.bright em.dark{color:maroon;} /* specificity = 0,0,2,2 */ **
#id216 {color:blue;} /* specificity = 0,1,0,0 */
div#sidebar *[href] {color:silver;} /* specificity = 0,1,1,1 */ ******

这里的4部分特殊性的值没有所谓的进位,从左往右比较,比如:0,1,0,0 比 0,0,6,7大,所以0,1,0,0的优先级更高。
通过上面的解释,应该能明白特殊性值的取值,下面通过几个有代表性的例子来重塑你的三观!

h1.title{color:blue} /* specificity = 0,0,1,1 */
.title{color:red;} /* specificity = 0,0,1,0 */
<h1 class="title">hello world</h1>

这个h1标题的字体颜色就是blue,因为它的特殊性值更高。(一些初学者以为当这种情况的时候显示后者,其实和选择器在css文件的位置无关!!!)

#side-content{color:black;}  /* specificity = 0,1,0,0 */
html>body ul li[name="list"] {color:white;} /* specificity = 0,0,1,4 */
<li id="side-content">侧边栏列表</li> 

这里 li 的字体颜色是black,因为特殊性值最高。
最前面0开头的特殊性,第一个位置是留给内联样式的,所以当出现如下的时候,内联样式的特殊性值高

body#box{background:red;} /* specificity = 0,1,0,1 */
<body style="background:blue"></body> /* specificity = 1,0,0,0 */
背景色显示blue

还有一个超凡脱俗的,换上神装的声明:!important 。它的优先级最高,直接鄙视前面讲的特殊性值!当出现 !important声明属性时,显示 !important声明的属性。
 关于通配符“*”的特殊性值:0,0,0,0 虽然对其他选择器没有影响,但是对继承属性还是有作用的,比如:

<p>hello <em>world</em></p>
*{color:gray} 
p{color:red}

因为color属性具有继承特性,p声明了颜色为red,em标签也继承了color:red;虽然通配符的特殊性值为0,但是有总比没有强(我对这种解释其实无语的,但是我也不知道怎么解释,只能搬书上的一句话了)。所以通配符“*”比继承特性的优先级高,如下图。
<img src="https://img.haomeiwen.com/i2711211/ab01ebb57f30e732.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="200" height="200" alt="继承和通配符优先级" >

最后一个就是当特殊性相等的时候:

h1{color:red;} /* specificity = 0,0,0,1 */
h1{color:blue}/* specificity = 0,0,0,1 */

显示后者,页面h1字体颜色显示blue。
相信你对样式权重有了新的认知吧,哈哈,树立正确的三观的感觉真好!!!

相关文章

  • CSS样式选择器的权重之重塑三观

    关于css权重,前端开发者大概能想到:!important优先级最高,内联样式次之,然后是css样式文件显示最后的...

  • CSS样式选择器权重 计算

    CSS样式选择器权重 计算

  • CSS选择器优先级及!important属性

    CSS的选择器是有权重的,当不同选择器的样式设置有冲突时,会采用权重高的选择器设置样式。权重(即优先级)的规则如下...

  • css问题整理(持续更新中...)

    1. css权重、优先级 权重 内联样式id选择器class、属性选择器(eg:[title]{ color:bl...

  • css3

    CSS三大特性 1成叠行 2继承性 3优先级性 行内样式>id选择器权重>类选择器>标签选择器 /*1. 权重相同...

  • 学习钢要:样式生效规则

    学习条件 了解css/css3常见选择器 学习目标 了解选择器权重的计算 了解浏览器默认样式 了解样式的继承 了解...

  • CSS选择器

    权重 根据不同的样式选择器,有不同的权重,而最终呈现的效果是根据选择器的权重和排列顺序确定的。css采用覆盖式渲染...

  • CSS样式(选择器)的优先级

    css样式(选择器)的优先级 计算权重分类 important 内联样式 后写的优先级高

  • 归零——CSS-第四天

    CSS学习 CSS权重 选择器 权重...

  • css基础一(权重与position)

    权重 一、权重,了解权重必须先了解css样式的6种基础选择器 二、其它的选择符均可由基本的组成,组合的方式分为三种...

网友评论

      本文标题:CSS样式选择器的权重之重塑三观

      本文链接:https://www.haomeiwen.com/subject/ymdopttx.html