登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
签到
每天签到奖励2-10圆
导读
排行榜
TG频道
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
VIP申请
VIP网盘
网盘
联系我们
发帖说明
每日签到
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
浏览器如何确定最终的CSS属性值?解析计算优先级与规则 ...
浏览器如何确定最终的CSS属性值?解析计算优先级与规则
[ 复制链接 ]
扎先
2025-6-2 22:25:08
前言
上篇文章中有提到CSS值的处理过程,但如果想要确定一个元素的最终样式值可以不需要这么多步。实际上我们写的任何一个标签元素无论写没写样式,它都会有一套完整的样式。理解这一点非常重要‼️
比如:一个简单的p标签
打开浏览器控制台,选中元素,切换到computed选项,勾选show all,这里就能够看到元素的所有CSS样式,尽管你什么样式也没写,它们也是有默认值的。任何标签都是这样,只不过默认值可能不一样。
一道面试题
<p>前端</p>
南玖
复制代码
很简单的一段代码,只需回答出这两个元素各自的文字颜色。
如果能够正确回答出,并知道其中的原理,OK那么这篇文章要讲的内容你都掌握了,如果不能,那么这篇文章需要好好阅读并理解一番。
答案是一红一蓝。
CSS属性值的确定步骤
要确定属性值的话,我们可以先想想CSS属性值都可以从哪里来?
声明值?继承?默认值?
想了想CSS值好像也只能从这三个地方来获取,再加上一个比较权重,我们是不是就可以确定一个CSS属性的值了?
ok,浏览器也确实是按这些步骤来确定CSS属性值的:
声明值:这里包含开发者自定义声明与用户代理的样式表【user agent stylesheet】(相当于浏览器默认样式表需要与默认值区分开)
比较权重:因为可能会有重复声明
继承:如果前两步还没确定值并且这个属性是可以继承的话,那么这个时候就可以使用继承值
默认值:最后如果还是无法确认值的话才会使用默认值
声明值
第一步是确认声明值,还是以上面代码为例
<p>前端</p>
南玖
复制代码
当前div既有开发者自定义声明样式(红框)也有用户代理样式(蓝框),这两块都属于声明值。
比较权重
再把代码做点变更
<p>前端</p>
南玖
复制代码
注意看此时p标签的外边距
由于开发者自定义声明样式表与用户代理样式表都有定义margin值,最终应用的是开发者自定义声明样式表,所以
开发者自定义声明样式表的权重要高于用户代理样式表
如果同为开发者自定义声明的样式表有冲突,则按正常的样式权重进行比较。对比较规则不了解的同学可以查看文档
继承
同样还是上面的代码,我们可以看到对于p标签我们既没有声明他的文字颜色,用户代理样式表同样也没声明文字颜色,那么它的红色是从哪来的呢?
答案是继承自div的文字颜色,因为前两步都不能确定p标签的color属性值,而color又恰好是可以继承的,并且父元素又正好有定义color属性的值。所以此时p标签就会继承父元素的color属性,渲染成红色字体。
这里需要注意的是继承采用就近原则,与权重无关
比如:
<p >前端</p>
南玖
复制代码
这里虽然important的权重更高,但最终继承的还是最近的属性值。
默认值
如果前三步都没能确认属性的值,则会使用默认值。
代码同上,比如还是p标签,我们没有自定义声明它的font-size,用户代理样式表也同样没有声明,它的父级元素同样没有声明,这也就说明对于font-size来说既没有声明值也没有继承值,那它最终渲染是按多大的字号来呈现的呢?
答案就是默认值,谷歌浏览器对于p标签的默认字号为16px。
面试题解答
<p>前端</p>
南玖
复制代码
p标签文字为红色这很好理解,因为继承自父元素的color值。
问题在于为什么a标签没有继承呢?
因为对于a标签来说,虽然没有自定义声明color,但用户代理样式表中有声明color,所以会直接使用用户代理样式表中的color值,而不会使用继承值。
出处:https://www.cnblogs.com/songyao666/每日面试题:Github-------------------------------------------
如果这篇文章有帮助到你,❤️关注+点赞❤️鼓励一下作者,文章公众号首发,关注 前端南玖 第一时间获取最新的文章~
扫描下方二维码关注公众号,回复进群,拉你进前端学习交流群
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
浏览器
如何
确定
最终
CSS
相关帖子
Kafka如何快速的入个门呢?
如何使用 INFINI Gateway 对比 ES 索引数据
CSS - transition 粗浅记忆
vue3使用h函数如何封装组件和$attrs和props的区别
【OpenGL ES】不用GLSurfaceView,如何渲染图像
如何使用io_uring构建快速响应的I/O密集型应用?
如何搭建智能DNS服务器?
浅谈如何更好的进行需求评审
【经验贴】多项目并行,如何解决资源管理这个难点?
如何把一个接口设计好?
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
Kafka如何快速的入个门呢?
0
567
炳裘垦
2025-10-07
安全
如何使用 INFINI Gateway 对比 ES 索引数据
1
98
稞冀
2025-10-08
代码
CSS - transition 粗浅记忆
0
861
峰襞副
2025-10-08
业界
vue3使用h函数如何封装组件和$attrs和props的区别
0
348
猷咎
2025-10-09
业界
【OpenGL ES】不用GLSurfaceView,如何渲染图像
0
117
坡琨
2025-10-09
安全
如何使用io_uring构建快速响应的I/O密集型应用?
0
286
井晶灵
2025-10-09
安全
如何搭建智能DNS服务器?
0
804
能氐吨
2025-10-10
安全
浅谈如何更好的进行需求评审
1
277
边书仪
2025-10-10
安全
【经验贴】多项目并行,如何解决资源管理这个难点?
0
716
拼匍弦
2025-10-10
安全
如何把一个接口设计好?
0
370
戎玉珂
2025-10-10
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
扎先
2025-6-2 22:25:08
关注
0
粉丝关注
21
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9999501
dage888
999994
富账慕
10007
4
匝抽
9986
5
孙淼淼
9992
6
柴古香
9993
7
筒濂
9982
8
凌彦慧
9988
9
崔瑜然
9984
10
慢秤
9979
查看更多