CSS中理解层叠性及权重如何分配


Posted in HTML / CSS onDecember 24, 2022

CSS中理解层叠性及权重如何分配

前言

大家好,我是翼同学。今天笔记的内容是:

  • CSS的三大特性,分别是层叠性、优先性和继承性

三大特性

☀️层叠性

什么是层叠性?

在CSS中,样式的设置顺序很重要。当相同选择器设置同一样式时,往往最后设置的样式才是实际应用的样式,这就是CSS的层叠性。

为了更好的理解这个概念,先来看这样一个问题:

h3 {
color: red;
}
h3 {
color: blue;
}

上述代码运行后,color属性应呈现哪个值?

很显然,答案是蓝色。

总的来说,相同级别的选择器选择设置同一样式时,会发生样式冲突,此时只有一个规则起作用,也就是最后一条样式生效。这就是CSS层叠性

但有时我们发现,实际情况并不是这样。看下面代码:

<!DOCTYPE html>
<html>
<head>
    <style>
        .nav {
            color: red;
        }
        h3 {
            color: blue;
        }
    </style>
</head>
<body>
    <h3 class="nav">
        Hello world!
    </h3>
</body>
</html>

为什么上述代码运行后,标题呈现为红色?明明<h3>标签是在后面定义的,按照层叠性来讲,标题应该呈现出蓝色才是?

其实,这些都引出了CSS的另一大特性:优先性

✔️优先性

选择器具有权重的概念,不同权重的选择器优先级不同。当发生样式冲突时(同一元素的属性被多次设置),浏览器会根据不同选择器的权重来判断哪些样式设定有效,这就是CSS的优先性。

就前面的例子而言,标签选择器h3 { } 会选择页面中所有的<h3>标签,这并不是很具体。但是类选择器会选择页面中具有特定class属性的标签,这就稍微具体了些。所以,类选择器的权重会比标签选择器大一些,导致即使标签选择器在最后定义也无法实现特定效果。

总结:

当同一个元素被多个不同的选择器指定时,就会有优先级存在。根据选择器的权重来决定执行哪个样式。(关于权重,后面小节单独讲)

?继承性

继承性也是CSS中的一大特性。如何理解继承?

举个例子,将一个元素的color值设置为红色,如果该元素的子元素没有设置color值,那么子元素会自动继承父元素的设定值,也就是红色。

  • 总的来说,继承就是一些在父元素上的样式设置,可以被子元素继承

注意,只是一部分属性可以被继承,例如:颜色color属性。也有无法被继承的属性,比如width

小结:

  • 常见的可继承的属性color属性、font属性、text属性
  • 常见的不可继承的属性widthheightbordermarginpadding

权重

当不同选择器定义同一属性时,浏览器该选择执行哪一个?前文讲过,这种情况叫做样式冲突,当发生样式冲突时,会有优先级的指向。由于不同选择器的权重不同,使得样式冲突的解决成为可能。那么到底选择器的权重有哪些呢?

具体优先级看下表:

等级 定义 权重
!important 最大
行内样式 1, 0, 0, 0
ID选择器 0, 1, 0, 0
伪类选择器属性选择器 0, 0, 1, 0
标签选择器 0, 0, 0, 1
通配符选择器* 0, 0, 0, 0
继承 没有权重

注意事项:

  • !important是用于指定样式规则的最大优先权
  • 但注意,虽然!important权重最大,但是并不经常使用。
  • 等级一到等级六,权重依次递减,并且注意到,继承是没有权重的。
  • 不同选择器间设置同一属性,浏览器会根据选择器的权重大小来决定执行哪个样式
  • 需要注意的是,复合选择器的使用会产生权重的叠加问题

权重叠加时,如何计算叠加权重?

具体来说,就是相同位上的值互相叠加,但不会产生进位。

举个例子:

h2 p {
    color: red;
}
.nav p {
    color: green;
}

运行后,段落的颜色显示为绿色。

在上面这个例子中:

  • 后代选择器 h2 p { } 权重为0,0,0,1 + 0,0,0,1 = 0,0,0,2
  • 后代选择器.nav p { }权重为0,0,1,1 + 0,0,0,1 = 0,0,1,1
  • 可以看到,权重相加后是不会出现进位的

最后,总结如下:

权重值一共有四位数值,判断权重大小的方法是从左往右,判断位上数值的大小,如果某一位的数值相同,则判断下一位数值

到此这篇关于CSS中理解层叠性及权重如何分配的文章就介绍到这了,更多相关css层叠性权重内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
CSS3中的元素过渡属性transition示例详解
Nov 30 HTML / CSS
CSS3制作日历实现代码
Jan 21 HTML / CSS
css3 自定义字体font-face使用介绍
May 14 HTML / CSS
css3设置box-pack和box-align让div里面的元素垂直居中
Sep 01 HTML / CSS
使用CSS3来实现滚动视差效果的教程
Aug 24 HTML / CSS
利用CSS3实现单选框动画特效示例代码
Sep 26 HTML / CSS
HTML5 canvas基本绘图之绘制曲线
Jun 27 HTML / CSS
html2canvas把div保存图片高清图的方法示例
Mar 05 HTML / CSS
html5 canvas简单封装一个echarts实现不了的饼图
Jun 12 HTML / CSS
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
Aug 07 HTML / CSS
CSS 左边固定宽右边自适应的6种方法
May 15 HTML / CSS
table不让td文字溢出操作方法
Dec 24 HTML / CSS
CSS 鼠标点击拖拽效果的实现代码
Dec 24 #HTML / CSS
详解CSS3浏览器兼容
Dec 24 #HTML / CSS
HTML5页面打开微信小程序功能实现
Sep 23 #HTML / CSS
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
Sep 23 #HTML / CSS
微信小程序纯CSS实现无限弹幕滚动效果
Sep 23 #HTML / CSS
使用 CSS 构建强大且酷炫的粒子动画效果
详解CSS中postion和opacity及cursor的特性
Aug 14 #HTML / CSS
You might like
PHP漏洞全解(详细介绍)
2012/11/13 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
Python读写Excel文件方法介绍
2014/11/22 Python
如何在Python中编写并发程序
2016/02/27 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
主题婚礼策划方案
2014/02/10 职场文书
银行爱岗敬业演讲稿
2014/05/05 职场文书
高中历史教学反思
2016/02/19 职场文书
你知道Java Spring的两种事务吗
2022/03/16 Java/Android
Python如何将list中的string转换为int
2022/07/15 Ruby