CSS特适度和层叠

本文详细介绍了CSS特适度和层叠相关知识。特适度可通过公式计算数值,由选择符组成部分决定,行内样式优先级最高。继承方面,子元素无指定样式时会继承父元素样式。样式来源有开发人员、用户代理和用户提供,优先级不同,还可使用!important设置权重。

CSS特适度和层叠

特制度

特指度(specificity): 特指度表示一个css选择器表达式的重要程度,可以通过一个公式来计算出一个数值,数越大,越重要。

一个特制度由选择符本身的组成部分决定,一个特制度由四个部分构成,例如 0,0,0,0。

选择符的特制度规则如下:

  • 选择符的每个 ID 属性值加 0,1,0,0
  • 选择符的每个类属性值,属性选择或伪类加 0,0,1,0
  • 选择符中的每个元素和伪元素加 0,0,0,1
  • 连结符和通用符不加特制度
  • 行内样式的特制度是 1,0,0,0,这也是为什么行内元素优先级最高
/*
加入这两个修饰同一个元素的同一种属性,则 #python 会胜出,因为 h1.java 的特指度是 0,0,1,1 而 #python 的特制度是 0,1,0,0 
我们通过特制度的计算可以推算出样式的优先级
*/
h1.java - #python

#python 0,1,0,0

.python 0,0,1,0

h1[class="python"] 0,0,1,0

/* 用类选择器来指定ID属性,最终的特制度是 0,0,1,0*/
h1[id="python"] 0,0,1,0 

div + span 0,0,0,2

* 0,0,0,0 (这里需要注意,就算是特制度为0,优先级也会大于没有特制度,比如会覆盖继承,滥用 * 是一个陷阱)

继承

当子元素没有特别指定样式时,它会继承父元素的样式

<div>
    Javascript : 
    <span>
        Hello,World!!!
    </span>
</div
/*
此时的 Hello,World!!! 也会变成 黄色,应为继承是span 继承 div 是没有特制度,这个时候会被 特制度为
0,0,0,0 的通配符覆盖,这一是不要滥用 * 的原因
*/
div {
  color : red;
}

*{
  color : yellow
}

不是所有的样式都是默认继承的,以下是样式的继承情况:

来自一个老哥的详细总结:https://www.cnblogs.com/thislbq/p/5882105.html


样式的来源

样式有三个来源:

  • 开发人员提供的样式
  • 用户代理体用的样式,也就是浏览器,也就是默认样式,例如 a 元素未访问是蓝色
  • 用户提供的样式,例如用户可以通过谷歌浏览器来自己修改样式

优先级: 开发人员 > 用户提供 > 用户代理

使用 !important 可以设置权重,有此声明的样式将忽略特制度规则获得最高的优先级

   <span id={"js"}>
            Hello,World!!!
        </span>
/*此时 span 是黄色,尽管 id 的特制度更大*/
span {
  color : red !important;
}

#js{
  color : yellow
}

结合 !important 的优先级如下:

  1. 开发人员的 !important
  2. 用户人员的 !important
  3. 开发人员的样式
  4. 用户人员的样式
  5. 用户代理的样式

当样式的特制度相同,且未指定权重 (!important)时,则按照先后顺序来排序,后面声明的样式会覆盖前面声明的样式

/* 假如它们指向同一个元素,由于优先级都是 0,0,1,0 ,这个时候后声明的 div + span 会胜出*/
.python{
    color : red
}

div + span {
	color : yellow
}


我们有时候会使用 @import(url) 来引入外部css样式表,它要求必须要在 <style></style> 的第一行,那么我们后面声明的样式,如果特制度相同,且权重相同,将会覆盖外部样式表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值