全面介绍 CSS 属性值计算 —— 掌握它就了解大部分 CSS

CSS 的核心之一就在此,直接影响我们开发中的调试和布局!!!

举个 🌰:页面上存在一个 h1 元素,不设置任何样式,但是当我们点开 computed 查看,几乎 MDN 上的 CSS 属性都存在且有值。这里的每一个属性才真正是这个元素在页面上所呈现的样式。换言之,我们在样式表中书写的样式不一定是最终样式。

CSS 属性值的计算过程是某个元素从所有 CSS 属性没有值,到所有 CSS 属性都有值的过程。

1. 确定声明值

作者样式表(开发人员设置的)和浏览器默认样式表中,找到「没有冲突」的样式,直接作为计算后的样式。

2. 层叠 - 解决冲突

在两张表中,找到有冲突的样式,经过三个步骤(顺序不能错)解决冲突:

2.1 比较重要性

! important 的默认样式 > ! important 的作者样式 > 作者样式表 > 默认样式。

2.2 比较特定性(权重)

对每个样式分别计数:style、id、属性、元素。最终选择数量大的。

- id:id 选择器的数量;

- 属性:属性、类、伪类的数量;

- 元素:元素、伪元素的数量。

在 vscode 上会有直接的展示,默认省略 style,因为 style 中,1 表示内联样式,0 表示非内联样式。

2.3 比较源次序

源码中靠后的样式覆盖靠前的样式。

补充,优先级的规则从低到高为:

- 元素选择器:如 p、div。优先级最低。

- 类选择器和伪类选择器:如 .class、:hover。

- ID 选择器:如 #id。优先级较高。

- 内联样式:如 <div style="color: red;">。优先级最高。

- !important:可以强制覆盖其他规则的优先级,但要谨慎使用。

举个 🌰

<p id="section" class="paragraph">段落</p>
#section {color: red;
}
.paragraph {color: orange;
}
p {color: yellow;
}

最终颜色为 red,因为 ID 选择器的优先级高于元素选择器。

3. 继承

对经过了前两步骤之后「仍然没有值」的属性,若「可以继承」的属性,则使用继承。

CSS 中的很多属性是可以被继承的。例如 color 和 font-family 等样式会从父元素传递到子元素。

注意 📢:

- 可继承属性:如 color、font-family、line-height 等。这些属性如果在子元素中没有显式指定,会继承父元素的值。

- 不可继承属性:如 border、margin、padding。这些属性不会从父元素继承。

- inherit 关键字:可以强制任何属性继承父元素的值,即使该属性默认不可继承。

举个 🌰

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>.container {border: 2px solid #f3ddf3;border-radius: 6px;color: orchid;}.paragraph {border: inherit;border-radius: inherit;}</style></head><body><div class="container">父元素 div<p class="paragraph">子元素:强制继承父元素</p></div></body>
</html>

color 属性是自动继承,border 属性是强制继承。继承之前和继承之后:

- initial 关键字:将属性值重置为默认值,通常用于恢复浏览器的默认样式。

举个 🌰

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>.container {border: 2px solid #f3ddf3;border-radius: 6px;color: orchid;padding: 10px;font-size: 26px;}#div {font-size: inherit;}</style></head><body><div id="div" class="container">恢复浏览器的默认样式</div></body>
</html>

4. 默认值 

最后,对「仍然没有值」的属性,使用 MDN 官网的默认值。 

以上就是 CSS 属性的计算过程,对于页面上所有元素的 CSS 属性都是如此。

浏览器从 CSS 代码到最终的样式渲染过程中,经过多个阶段完成。为了达到视觉上最终的样式,浏览器会解析样式表、继承和应用样式值,最后计算出应用到每个元素的具体样式。

补充一些:

5. 计算值(Computed Value)

经过优先级和继承计算后,浏览器会获得每个元素的计算值。在这个阶段,所有的相对值都会转换为绝对值。例如,em、% 等相对单位会被计算成具体的像素值。 

具体过程:

- 相对单位计算:em 是相对于父元素的字体大小,% 是相对于某个父级元素的尺寸。例如,如果父元素的 font-size 是 16px,那么 2em 相当于 32px。

- 百分比计算:通常用在宽高、边距、位置等属性中,比如 width: 50% 是基于父元素宽度的 50%。

🌰

div {width: 50%; /* 计算值取决于父元素的宽度 */font-size: 2em; /* 计算值取决于父元素的字体大小 */
}

6. 使用值(Used Value)

使用值是 CSS 属性值的另一个阶段,是在计算值的基础上进一步确定的。例如,在 width  和 height 的计算中,如果内容溢出了容器,浏览器可能会调整某些属性的值。

- 溢出处理:当一个元素内容比容器大时,overflow 属性会决定如何处理,比如裁剪内容或显示滚动条。

div {width: 100px;height: 50px;overflow: scroll; /* 超出范围时,显示滚动条 */
}

7. 实际值(Actual Value)

实际值是元素在显示时真正呈现出来的样式,结合了设备特性和环境(如分辨率、DPI)等因素。在不同的设备上,元素的实际渲染可能会有所不同。

- DPI 和屏幕缩放:在高分辨率设备上,元素可能看起来比低分辨率设备要小,因此实际显示的像素值会有所不同。浏览器会根据设备的 DPI 调整实际显示值。

8. 布局阶段(Layout Phase)

布局阶段是浏览器根据已计算的样式值,计算出每个元素的大小和位置的过程。这个过程通常依赖于 box model(盒模型),以及 display、position 等布局属性。

注意点📢:

1、盒模型:元素的大小由 content、padding、border 和 margin 决定,布局时需要将这些因素考虑在内。

2、流式布局:默认情况下,块级元素会垂直排列,内联元素会水平排列。

3、浮动和清除:float 属性会改变元素在文档流中的行为,而 clear 用于清除浮动对其他元素的影响。

9. 渲染阶段(Rendering Phase)

最后,浏览器将经过布局计算后的元素绘制到页面上。这一步还包括处理 CSS 中的颜色、字体、阴影等视觉效果。

注意点:重绘(Repaint)与回流(Reflow):修改布局属性(如 width、height)会触发回流,而修改视觉属性(如 color)只会触发重绘。回流比重绘消耗更多资源,因此在性能优化中应尽量减少回流的发生。

10. 总结

1、浏览器的默认样式表:浏览器会应用一套默认样式,确保即使不编写样式表,HTML 也有基本的可读性。

2、使用 initial、inherit、unset 等关键字:这些关键字可以帮助控制样式的继承与重置。

- initial:重置为初始值;

- inherit:强制继承父元素的值;

- unset:依据属性是否可继承来决定使用初始值或继承值。

3、动态单位:vh、vw 等单位可以用于动态布局。它们表示相对于视口宽度或高度的值。

div {width: 50vw; /* 宽度是视口宽度的 50% */height: 100vh; /* 高度是视口高度的 100% */
}

4、相对单位和绝对单位的区别:绝对单位(如 px)在不同设备上表现一致,而相对单位(如 %、em)的行为依赖于父元素或上下文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147909.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2206. 将数组划分成相等数对(排序/哈希)

目录 一&#xff1a;题目&#xff1a; 二&#xff1a;代码&#xff1a; 三&#xff1a;结果&#xff1a; 一&#xff1a;题目&#xff1a; 给你一个整数数组 nums &#xff0c;它包含 2 * n 个整数。 你需要将 nums 划分成 n 个数对&#xff0c;满足&#xff1a; 每个元素…

Python画笔案例-058 绘制单击画酷炫彩盘

1、绘制单击画酷炫彩盘 通过 python 的turtle 库绘制 单击画酷炫彩盘,如下图: 2、实现代码 绘制单击画酷炫彩盘,以下为实现代码: """单击画酷炫彩盘.py"""from turtle import Turtle # 导入海龟类 from random import randint…

经典大语言模型解读(3):参数量更大、泛化性能更强的生成式模型GPT-2

概述 在GPT-1的基础上&#xff0c;OpenAI提出了包含15亿参数&#xff08;GPT-1参数量的10倍以上&#xff09;的GPT-2模型。该模型在一个更大规模的文本数据集WebText上进行预训练。与GPT-1依赖特定任务上的有监督微调来提升性能不同&#xff0c;GPT-2具备更强的零样本&#xf…

「OC」引用计数(一)

iOS学习 前言自动引用计数引用计数引用计数的思考方式自己生成的对象&#xff0c;自己持有非自己生成的对象&#xff0c;自己也能持有不再需要自己持有的对象时释放无法释放非自己持有的对象 总结 前言 在学习oc时对引用计数略有了解&#xff0c;现在进行系统的学习总结。 自动…

Spring AOP - 配置文件方式实现

目录 AOP基础概念 示例1&#xff1a;模拟在com.text包及子包项下所有类名称以ServiceImpl结尾的类的所有方法执行前、执行后、执行正常后返回值、执行过程中出异常的情况 示例2&#xff1a;统计com.text包及子包项下所有类名称以DaoImpl结尾的类的所有方法执行时长情况 AOP基…

英伟达开源 NVLM 1.0 引领多模态 AI 变革

新闻 NVLM 1.0 是由英伟达&#xff08;Nvidia&#xff09;最新推出的一系列前沿级别的多模态大型语言模型&#xff08;MLLM&#xff09;&#xff0c;这些模型在视觉-语言任务上取得了与领先专有模型&#xff08;例如 GPT-4o&#xff09;和开放访问模型&#xff08;例如 Llama 3…

文件上传、重定向、Gin路由

文件上传 单个文件上传 index.html 文件上传前端页面代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><title>index</title> </head> <body> <form action"/upload" method"post"…

【WPF】桌面程序开发之窗口的用户控件详解

使用Visual Studio开发工具&#xff0c;我们可以编写在Windows系统上运行的桌面应用程序。其中&#xff0c;WPF&#xff08;Windows Presentation Foundation&#xff09;项目是一种常见的选择。然而&#xff0c;对于初学者来说&#xff0c;WPF项目中xaml页面的布局设计可能是一…

基础算法(4)——前缀和

1. 前缀和 题目描述&#xff1a; 解法一&#xff1a;暴力解法 直接模拟实现题目流程即可 时间复杂度为&#xff0c;根据题目给出的条件&#xff0c;肯定会超时 解法二&#xff1a;前缀和&#xff08;适用题型&#xff1a;快速 求出数组中某一个 连续区间 的 和&#xff09;…

车路云一体化大模型数据治理方案

车路云一体化大模型数据治理解决方案 "杭州市发改委已批复了杭州交通投资集团的智能网联汽车“车路云一体化”试点项目。这一批复体现了其对该项目可行性研究报告的肯定&#xff0c;预示着杭州市在智能驾驶领域的进一步发展。" 2024年6月18日&#xff0c;第十一届国…

WGS1984快速度确定平面坐标系UTM分带(快速套表、公式计算、软件范围判定)

之前我们介绍了坐标系3带6带快速确定带号及中央经线&#xff08;快速套表、公式计算、软件范围判定&#xff09;就&#xff0c;讲的是CGCS2000 高斯克吕格的投影坐标系。 那还有我们经常用的WGS1984的平面坐标系一般用什么投影呢? 对于全球全国的比如在线地图使用&#xff1a…

面向未来的算力网络连接发展趋势分析

面向未来的算力网络连接发展特点与实践 AI算力研究&#xff1a;英伟达B200再创算力奇迹&#xff0c;液冷、光模块持续革新 英伟达隆重宣布新一代Blackwell架构&#xff0c;华为对GPU算力需求高达百万片。 英伟达发布的GB200 NVL72 机架级系统内部包括 72 个 Blackwell GPU 和…

【排序算法】插入排序_直接插入排序、希尔排序

文章目录 直接插入排序直接插入排序的基本思想直接插入排序的过程插入排序算法的C代码举例分析插入排序的复杂度分析插入排序的优点 希尔排序希尔排序&#xff08;Shell Sort&#xff09;详解希尔排序的步骤&#xff1a;希尔排序的过程示例&#xff1a;希尔排序的C语言实现举例…

S3C2440定时器

ee一、构造 二、设置相关位 1、MPLLCON寄存器&#xff08;配置MPLL寄存器&#xff0c;进行倍频&#xff09; 根据下列表格的想要输出的频率进行选择&#xff0c;选择完毕之后&#xff0c;对该寄存器进行设置 2、时钟分频控制&#xff08;CLKDIVN&#xff09;寄存器 根据不…

CSP-J 2024 入门组初赛第一轮初赛试题及答案解析

CSP-J 2024 入门组初赛第一轮初赛试题及答案解析 一、 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 1 32 位 int 类型的存储范围是&#xff08; &#xff09; A -2147483647 ~ 2147483647 B -21…

第十四章:html和css做一个心在跳动,为你而动的表白动画

💖 让心跳加速,传递爱意 💖 在这个特别的时刻,让爱在跳动中绽放!🌟 无论是初次相遇的心动,还是陪伴多年的默契,我们的心总在为彼此跳动。就像这颗炙热的爱心,随着每一次的跳动,传递着满满的温暖与期待。 在这个浪漫的季节,让我们一同感受爱的律动!无论你是在…

【深度学习】(4)--卷积神经网络

文章目录 卷积神经网络一、画面不变性二、图像识别三、卷积网络结构1. 原理2. 卷积层3. 池化层4. 全连接层 四、感受野 总结 卷积神经网络 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称CNN&#xff09;是一种深度学习模型&#xff0c;特别适用于处理…

基于SpringBoot+Vue+MySQL的校园一卡通系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着现代社会的快速发展&#xff0c;校园一卡通已成为大学生活中不可或缺的一部分。它不仅承载着校园消费的功能&#xff0c;还集成了学生身份证明、图书馆借阅、门禁系统等多种服务。然而&#xff0c;传统的一卡通管理系统往往…

设计模式之策略模式例题

答案&#xff1a;A 知识点&#xff1a; 策略模式又叫模板方法模式 它的意图是定义一个操作中的算法骨架。而将一些步骤延迟到子类中&#xff0c;使得子类可以不改变一个算法的结构即可重新定义算法的某些特定步骤

Elasticsearch——介绍、安装与初步使用

目录 1.初识 Elasticsearch1.1.了解 ES1.1.1.Elasticsearch 的作用1.1.2.ELK技术栈1.1.3.Elasticsearch 和 Lucene1.1.4.为什么不是其他搜索技术&#xff1f;1.1.5.总结 1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排 1.3.Elasticsearch 的一些概念1.3.1.文档和字…