⭐CSS基础之CSS属性值的计算过程

前置知识

你需要知道,每一个 HTML 元素,都拥有所有的 CSS 属性,并且属性值大多为默认值。

比如,一个div元素:

问题:div 元素,为什么是一个块级元素?

由下图,我们可知,div 元素是一个块级元素,本质上是因为,在Chrome浏览器源码中的浏览器默认样式表中,将 div 设置为 display:block。当然,仅仅是改变display的值并不能改变其语义。

在 Computed,计算后的样式中,我们可以看到,浏览器默认 display 值,代替了 display 属性本身的默认值。

我们将 display 设置为 inline,可以看到:

我们自己写的样式display: inline顶替掉了浏览器默认样式display: block

以上,就是我们这篇文章要讨论的,Computed 中的这些 CSS 属性的值,都是怎么计算出来的。

属性值的计算过程

1. 确定声明值

对于没有冲突的 CSS 样式声明,我们直接使用其值,作为 Computed 计算后的值。

如上图中的font-size是有冲突的。

color: red; display: block; font-weight: bold;这 3 个是没有冲突的。

此时,h1 元素的 CSS 属性值如下图所示:

2. 层叠冲突处理(权重计算)

对于有冲突的声明使用层叠规则,确定最终的 CSS 属性值

关于这一部分内容,我在上一篇文章⭐CSS基础之层叠冲突处理 - 掘金 (juejin.cn)中做了详细介绍,想深入了解的同学可以去看看,下面只做简单的流程介绍。

由上可知,font-size这个属性发生了层叠冲突,冲突处理规则如下:

1. 比较源(CSS样式表来源)的重要性

作者样式表 > 浏览器默认样式表,因此去掉font-size: 2em;

2. 比较特殊性(选择器优先级)

有关 h1 元素的 3 个不同选择器的优先级(由高到底):

  • div h1.red:0 1 2
  • .red:0 1 0
  • h1:0 0 1

3. 比较书写顺序

后面覆盖前面

font-size: 30px; 最终胜出!

到这里,层叠冲突处理完毕,目前 h1 元素的 CSS 属性值如下:

3. 使用继承

经过前 2 步计算后,仍然没有值的属性,如果可以继承,则继承父元素的值

4. 使用默认值

经过前 3 步计算后,仍然没有值的属性,使用默认值。

background-color默认值为transparent

到这里,CSS 属性值的计算就完了,剩下的所有没有值的属性,全部使用默认值。

思考题

a 元素中的内容显示什么颜色?

html 复制代码
<style>
    div {
        color: red;
    }
</style>

<div>
    <a href="">asdasdasd</a>
</div>

答案是:蓝色。

为什么不是红色?

因为 a 元素有浏览器默认样式 color: -webkit-link,因此,在第 3 步 使用继承时,a 元素的 color 已经有值了,不需要继承了。

补充:4个特殊的CSS属性值

  • inherit:手动(强制)继承,将父元素的值取出应用到该元素
  • initial:将该属性设置为默认值
  • revert:将该属性设置为浏览器默认样式值
  • unset:当该属性可以继承时,等价于 inherit,否则等价于 initial

参考文献

相关推荐
ShineWinsu1 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
福兮说2 小时前
JSON 格式正确,数据就可靠吗?我用一份自编配置检查类型与空值
java·前端·json
程序员老赵4 小时前
Docker 部署青龙面板:轻松搭建定时任务管理平台
前端·docker·开源
Swot4 小时前
Asciidoctor 公式数字下标错位问题:原因分析与解决方案
前端
Swot4 小时前
leo-editor 中将 Markdown 内容转成 asciidoc 格式
前端
狒狒AI4 小时前
Remotion / GSAP+Three / HyperFrames / Skia 四栈实测:代码渲染知识视频的选栈方法(附开源技能)
前端·人工智能·aigc
修炼的dance4 小时前
浏览器里导出H.265,8.5秒和55.5秒差在硬件
前端
补码缩写4 小时前
WebCodecs选编码器,探测之后还要验解码和播放
前端
大文说跨境4 小时前
亚马逊多账号管理浏览器怎么选?云登/紫鸟/AdsPower 对比
java·前端·自动化
hunter_0764 小时前
iOS 首页复杂嵌套滚动技术方案:头部固定 + 网格滚动 + Tab 吸顶 + 每 Tab 独立下拉刷新
前端