看完就懂--CSS选择器优先级的计算
CSS选择器优先级的计算
一、什么是选择器的优先级
既然是深入了解,那么我们肯定先要知道什么是选择器的优先级,这里我就直接引用MDN Web Docs的解释。
浏览器通过优先级来判断哪些属性值与一个元素最为相关,从而在该元素上应用这些属性值。优先级是基于不同种类选择器组成的匹配规则。
看概念总是抽象的,最直观的感受就是: 你为页面上的同一个元素设置多个属性,有时候设置的一个样式死活没有生效,这时候您遇到的很可能就是CSS选择器的优先级问题了。
* {
margin: 0;
padding: 0;
}
body .box1{
width: 300px;
height: 300px;
background-color: orange;
}
.box1{
/*样式将无法生效*/
/*因为这个选择器的优先级不够body .box1高*/
background-color: red;
}
<div class="box1">
我的样式涉及到了选择器优先级问题
</div>
二、优先级的计算与比较(一)
那首先我们就必须知道CSS各选择器(这里还一些特殊声明)之间的基础优先级是如何的
!important > 内联样式 > id选择器 > 类/伪类选择器 > 标签/伪元素选择器 > 通配选择器 > 继承的样式
我们可以量化上面说到的选择器基础优先级
!important 9999
内联样式 1000
id选择器 100
类/伪类选择器 10
标签/伪元素选择器 1
通配选择器 0
继承的样式 不存在优先级
那么就能计算出最开始里例子中个个选择器的优先级,从而判断出最终应用的样式
/*优先级为: 1 + 10 = 11*/
body .box1{
width: 300px;
height: 300px;
background-color: orange;
}
/*优先级为: 10*/
.box1{
background-color: red;
}
优先级的计算还具有以下条件:
- 优先级具有可加性
- 选择器优先级不会超过自身最大数量级
- 同等优先级情况下,后写的覆盖前写的
- 并集选择器之间的优先级是独立的
我来为大家一个个解释:
优先级具有可加性
这个很简单就能知道
/*优先级都是能够简单相加的: 11*/
p.box1{
width: 100px;
}
选择器优先级不会超过自身最大数量级
上面我们解释了优先级的可加性,那么有些丧心病狂的人可能就会想,既然优先级能够简单相加,那我直接用多个低优先级的选择器相加不就能够突破优先级的问题? 我想说:too young, too simple!
/*优先级: 100*/
#box1{
background-color: red;
}
优先级不能超过自身最大量级: 99
/*全是类选择器,优先级为: 90 */
.a1.a2.a3.a4.a5.a6.a7.a8.a9.a10.a11{
background-color: blue;
}
<div id="box1" class="a1 a2 a3 a4 a5 a6 a7">
我是红色的
</div>
同等优先级情况下,后写的覆盖前写的
#box1{
width: 100px;
}
#box1{
width: 200px;
}
<div id="box1">
宽度为200px
</div>
并集选择器之间的优先级是独立的
/*优先级有两个*/
/* 标签选择器:1 */
/* id选择器: 100 */
p,
#box1{
background-color: orange;
}
优先级的计算与比较(二)
刚刚已经介绍完了第一种选择器优先级的计算方式,不得不说还是比较复杂的。现在就为大家介绍第二种优先级的计算方式,也是我个人比较推荐的一种。
我们假定优先级的计算由A、B、C、D四个项的值来决定
1. 判断是否存在内联样式,存在A=1, 否则A=0
2. B的值是id选择器出现的次数
3. C的值是类选择器出现的次数
4. D的值是标签选择器出现的次数
简单来看两个例子:
#box1 ul > li > a.myClass{
width: 100px;
}
没有内联样式:A=0
一个id选择器:B=1
一个类选择器:C=1
三个标签选择器: D=3
综上,优先级为: 0 1 1 3
#box1 ul > li > a.myClass{
width: 100px;
}
<div id="box1" style="height:100px;"></div>
有内联样式:A=1
一个id选择器:B=1
一个类选择器:C=1
三个标签选择器: D=3
综上,优先级为: 1 1 1 3
优先级已经计算出来了,那么接下来就是如何去比较的问题了:
- 从左到右比较
- 有一个值大于另一个值则比较完毕
- 上面例子中0113与1113比较,第一位的0小于1所以1113的优先级较大
- 如果从左到右全部值相等,则后写的样式覆盖前面写的
写在最后
这是我的第一篇博客,我是一名正在学习前端的小白,有错误的地方希望大家能够多多谅解与指出,一起努力、加油吧!
看完就懂--CSS选择器优先级的计算的更多相关文章
- 深入理解CSS选择器优先级的计算
选择器的优先级关系到元素应用哪个样式.在CSS2.1的规范(http://www.w3.org/TR/2009/CR-CSS2-20090908/cascade.html#specificity)中是 ...
- css 选择器优先级的计算过程
以下转自互联网 下面看看官方对选择器的定义:一个选择器的优先级由四个数字a,b,c,d确定.当比较两个选择器时,先比较a,a值大的优先级高,如果a相等则比较b,b值大的优先级高,以此类推.因此,无论b ...
- 深入理解CSS选择器优先级
题外话 今天把 <CSS REFACTORING>(中文名叫<CSS重构:样式表性能调优>)电子书粗略的浏览了一遍,这本书很薄,150页左右,首先是介绍了什么是重构并举了两个简 ...
- 关于Css选择器优先级
今天练习css的时候,重叠后的style发现不起作用,原来css选择器优先级大有文章. 声明: yi下内容选自 51cto.com --加以自己的理解 以备日后参照使用,毕竟自己理解的才是自己的. ...
- 深度剖析HashMap的数据存储实现原理(看完必懂篇)
深度剖析HashMap的数据存储实现原理(看完必懂篇) 具体的原理分析可以参考一下两篇文章,有透彻的分析! 参考资料: 1. https://www.jianshu.com/p/17177c12f84 ...
- CSS选择器优先级(转)
原文:http://www.cnblogs.com/wangfupeng1988/p/4285251.html 另外,w3c有文章介绍了CSS选择器的特定性,见https://www.w3.org/T ...
- [转帖]Linux shell中2>&1的含义解释 (全网最全,看完就懂)
Linux shell中2>&1的含义解释 (全网最全,看完就懂) https://blog.csdn.net/zhaominpro/article/details/82630528 ...
- 2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文
2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文:https://juejin.im/post/5b94d8965188255c5a0cdc02
- day44:CSS选择器优先级&JS基础
目录 1.CSS选择器优先级 2.补充:margin是可以设置百分比的 3.JS 3.1 js代码的引入方式 3.2 变量 3.3 数据类型 3.4 数组(类似于python中的列表) 3.5 自 ...
随机推荐
- 【uva 120】Stacks of Flapjacks(算法效率--构造法+选择排序思想)
题意:有N张正在锅里的一叠煎饼,每张都有一个数字,代表其大小.厨师每次可以选择一个数k,把从锅底开始数第k张上面的煎饼全部翻过来,即原来在上面的煎饼现在到了下面.要求设计一种方法使得所有煎饼按照从小到 ...
- poj3252 Round Numbers (数位dp)
Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, P ...
- Codeforces Round #669 (Div. 2) B. Big Vova (枚举)
题意:有一个长度为\(n\)的序列,你需要对其重新排序,构造一个新数组\(c\),\(c_{i}=gcd(a_{1},...,a{i})\)并且使得\(c\)的字典序最小. 题解:直接跑\(n\)次, ...
- Codeforces Round #654 (Div. 2) C. A Cookie for You (思维)
题意:有\(a\)个蛋糕,\(b\)个巧克力,第一类人有\(n\)个,总是吃多的东西(若\(a>b\),吃蛋糕,否则吃巧克力),第二类人有\(m\)个,总是吃少的,可以随便调整这两类人吃的顺序, ...
- C# Dictionary(字典)源码解析&效率分析
通过查阅网上相关资料和查看微软源码,我对Dictionary有了更深的理解. Dictionary,翻译为中文是字典,通过查看源码发现,它真的内部结构真的和平时用的字典思想一样. 我们平时用的字典主要 ...
- PowerShell随笔1---背景
既然是随笔,那就想到什么说什么,既会分享主题知识,也会分享一些其他技巧和个人学习方法,供交流. 我一般学习一个东西,我都会问几个问题: 这东西是什么? 这东西有什么用,为什么会出现,出现是为了解决什么 ...
- 2.PowerShell概述
PowerShell PowerShell命令窗一般随系统带着,运行->输入:powershell,即可打开命令窗口. 命令 Powershell有诸多命令,兼容cmd命令 语法和命令 在此我推 ...
- Leetcode(22)-括号生成
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()())& ...
- Docker下载Mysql 2059
接着我上一篇的,在我们安装好docker后我们尝试在docker里面安装mysql并连接使用 正式开始 1.启动docker 2.打开Windows PowerShell(执行下载命令) `docke ...
- VSCode 在 Vue 导入路径中使用 @ 符号后无法正确跳转 bug
VSCode 在 Vue 导入路径中使用 @ 符号后无法正确跳转 bug bug jsconfig.json { // This file is required for VSCode to unde ...