全面解析:HTML页面的加载全过程(四)--浏览器渲染之样式计算

news2024/11/24 17:52:19

主线程遍历得到的 DOM 树,依次为树中的每个节点计算出它最终的样式,称之为 Computed Style。

通过前面生成的DOM 树和 CSSOM 树,遍历 DOM 树,为每一个 DOM 节点,计算它的所有 CSS 属性,最后会得到一棵带有样式的 DOM 树–也叫“渲染树 Render Tree”

在这里插入图片描述

可在控制台查看样式计算

在这里插入图片描述

属性值的计算过程

1、确定声明值

声明值就是 “自己所书写的 CSS 样式+浏览器内置的样式表” 相加得到全部的声明值,并且将部分值进行转换

如:color: red;转换为`color: rgb(255, 0, 0);

​ font-size: 2em;转换为font-size: 14px;`。

2、层叠冲突

在确定声明值时,声明的样式规则发生了冲突,解决冲突,下面这三个步骤:

(一)比较源的重要性

样式有三种来源:

1. 浏览器默认样式(用户代理样式):浏览器会有一个基本的样式表来给任何网页设置默认样式
2. 网页设计者定义的样式(页面作者样式):即外联样式、内部样式、style行内样式等
3. 控制台调试样式(用户样式):浏览器的用户在开发者模式里使用自定义样式表定制使用体验

对应的重要性顺序依次为:网页设计者定义的样式 > 用户样式 > 浏览器默认样式

(二)比较优先级–权重

如果在同一源中出现了样式声明冲突,则比较其优先级。

权重的等级

!important,权重最大,会覆盖页面内任何位置定义的元素样式。
内联样式,写在标签中的,权重为1000
ID选择器,权重为0100
类、伪类、属性选择器,权重为0010
标签、伪元素选择器,权重为0001
通配符、子选择器、相邻选择器等,权重为0000

我手写了计算权重的方法:
在这里插入图片描述

案例1
<ul id="nav" class="nav">
    <li class="active" id="bb"><a href=""></a></li>
</ul>

ul#nav li.active a   权值为(0,1,1,3);

`ul li.active a` 权值为(0,0,1,3);---一个伪类,三个标签

`ul.nav li.active a` 的权值为(0,0,2,3);

`
如是行内样式(内联样式),权值为(1,0,0,0) ;

某项 CSS 属性后面带 `!important` 时,权值最大。


案例2

都是设置文字颜色,应该以哪个为主?

<!DOCTYPE html>
<html lang="en">
<head>	
	<style>
		/* 权重 0,0,1,1 */
		.nav a {
			color: red;
		}
		
		/*  权重 0,0,1,0  */
		.blog {
			color: yellow;
		}
		
		/*  权重 0,0,2,0 */
		.nav .blog {
			color: blue;
		}
	</style>
</head>
<body>
	<div class="nav">
		<a href="" class="blog">java</a>
		<a href="">python</a>
		<a href="">css</a>
		<a href="">ruby</a>
	</div>
</body>
</html>

分析:

0011>0010 以红色为主

0020>0011 以蓝色为主

在这里插入图片描述

案例3

<!DOCTYPE html>
<html lang="en">
<head>
   
    <style>
        a{color: yellow;} /*权重:0,0,0,1*/
        div a{color: green;} /*权重:0,0,0,2*/
        .demo a{color: black;} /*权重:0,0,1,1*/
        .demo input[type="text"]{color: blue;} /*权重:0,0,2,1*/
        .demo *[type="text"]{color: grey;} /*权重:0,0,2,0*/
        #d1 a{color: orange;} /*权重:0,1,0,1*/
        div#d1 a{color: red;} /*权重:0,1,0,2*/
    </style>
</head>
<body>
    <a href="">第一</a> 
    <div class="demo">
        <input type="text" value="第二" />
        <a href="">第三</a>
    </div>
    <div id="d1">
        <a href="">第四</a>
    </div>
</body>
</html>

分析:

#d1 a和div#d1 a 设置相同的属性,但0101<0102 以红色为主

在这里插入图片描述

(三)比较次序----重要:如权重值相同,“就近原则

后声明的样式会覆盖先声明的样式。

p{
    /* 会被覆盖 */
    color: yellow;
}

p{    
	color: green;
}

3、使用继承

对于每一个 DOM 节点,都会去计算它的所有 CSS 属性。

对于未声明的属性,并不是直接使用默认值,而是使用继承值。

<div>
	<p>java</p>
</div>
div{
	color: red;
}

这里<p>标签会继承来自<div>color: red样式。

继承原则

  • 就近原则,谁近就继承谁的,与权重无关。
  • 大部分字体相关的属性都是可继承的

4、使用默认值

如果最后仍不能确定属性值,则使用浏览器默认值。

在这里插入图片描述

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

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

相关文章

Linux|内存级文件原理

目录 进程与文件 Linux下的文件系统 文件操作&#xff0c;及文件流 C语言函数 文件流 文件描述符 系统调用操作 系统调用参数 重定向与文件描述符 输出重定向 输入重定向 文件内容属性 Linux下一切皆文件 进程与文件 当我们对文件进行操作时&#xff0c;文件必须…

40分钟学 Go 语言高并发:Context包与并发控制

Context包与并发控制 学习目标 知识点掌握程度应用场景context原理深入理解实现机制并发控制和请求链路追踪超时控制掌握超时设置和处理API请求超时、任务限时控制取消信号传播理解取消机制和传播链优雅退出、资源释放context最佳实践掌握使用规范和技巧工程实践中的常见场景…

【SpringMVC - 1】基本介绍+快速入门+图文解析SpringMVC执行流程

目录 1.Spring MVC的基本介绍 2.大致分析SpringMVC工作流程 3.SpringMVC的快速入门 首先大家先自行配置一个Tomcat 文件的配置 配置 WEB-INF/web.xml 创建web/login.jsp 创建com.ygd.web.UserServlet控制类 创建src下的applicationContext.xml文件 重点的注意事项和说明…

neo4j图数据库community-5.50创建多个数据库————————————————

1.找到neo4J中的conf文件&#xff0c;我的路径是&#xff1a;D:\Program Files\neo4j-community-5.5.0-windows\neo4j-community-5.5.0\conf 这里找自己的安装路径&#xff0c; 2.用管理员模式打开conf文件&#xff0c;右键管理员&#xff0c;记事本或者not 3.选中的一行新建一…

如何最简单、通俗地理解Python的迭代器?

我们知道迭代器&#xff08;iterator&#xff09;可以用for循环去取数&#xff0c;这和列表取数有什么区别呢&#xff1f; 想理解Python迭起器的差异&#xff0c;有个很简单的例子 打个比方&#xff0c;你去玩街头投篮机&#xff0c;可以投5个球&#xff0c;这里有两种方式&a…

JavaEE 【知识改变命运】02 多线程(1)

文章目录 线程是什么&#xff1f;1.1概念1.1.1 线程是什么&#xff1f;1.1.2 为什么要有线程1.1.3 进程和线程的区别1.1.4 思考&#xff1a;执行一个任务&#xff0c;是不是创建的线程或者越多是不是越好&#xff1f;&#xff08;比如吃包子比赛&#xff09;1.1.5 ) Java 的线程…

Linux内核USB2.0驱动框架分析--USB包

一&#xff0c; 包的组成 每个包都由SOP&#xff08;包起始域&#xff09;、SYNC&#xff08;同步域&#xff09;、Packet Content&#xff08;包内容&#xff09;、EOP&#xff08;包结束域&#xff09;四部分组成&#xff0c;其中SOP、SYNC、EOP为所有包共有的域&#xff0c…

云轴科技ZStack亮相2024 IDC中国生态峰会,共塑AI时代IT生态新格局

11月21日&#xff0c;2024 IDC中国生态峰会在北京举办&#xff0c;吸引了超过300位生态伙伴齐聚一堂&#xff0c;聚焦行业内最前沿的热点话题。本届峰会以“创见先机&#xff0c;智领风云”为主题&#xff0c;深入探讨宏观经济趋势、技术革新以及如何融合AI与数据技术&#xff…

C0029.在Clion中解决Debug时,提示Process finished with exit code -1的错误

1.错误提示 Process finished with exit code -12.解决办法 如上在使用Debug进行代码调试时&#xff0c;直接出现如上报错&#xff0c;解决办法就是直接点击运行程序&#xff0c;即可查出报错编号&#xff0c;然后根据报错编号来查找问题&#xff1b; 然后在网上就可以根据该…

07-Making a Bar Chart with D3.js and SVG

课程链接 Curran的课程&#xff0c;通过 D3.js 的 scaleLinear, max, scaleBand, axisLeft, axisBottom&#xff0c;根据 .csv 文件生成一个横向柱状图。 【注】如果想造csv数据&#xff0c;可以使用通义千问&#xff0c;关于LinearScale与BandScale不懂的地方也可以在通义千…

读取各种来源格式单细胞数据集构建seurat分析对象,代做生信分析

参考资料和分析注意事项 全流程的分析指导视频 演示数据集网盘文件 分析参数文件路径格式的特别提示 大家给要分析用到的文件路径或目录路径的时候&#xff0c;以D:/omics_tools/demo_data/scrnaseq/GSE189125/GSE189125_5prime_scRNAseq_seqbatchA_counts.txt.gz 这个文件为…

SQL-多表操作

前文所介绍的sql操作都是基于单表进行的&#xff0c;接下来我们来学习多表操作。 多表设计 在实际的项目开发中&#xff0c;会根据业务需求和业务模块之间的关系进行数据库表结构设计&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xf…

c++ STL线程安全使用

c STL不是线程安全的&#xff0c;因此在多线程中使用的时候&#xff0c;操作同一个容器&#xff0c;会崩溃&#xff0c;因此需要解决线程安全的问题&#xff1a; 使用实例类似于以下&#xff1a; #include <thread> #include <vector> #include "thread_safe…

Swift 实现判断链表是否存在环:快慢指针法

文章目录 前言摘要描述题解答案题解代码题解代码分析示例测试及结果时间复杂度空间复杂度总结关于我们 前言 本题由于没有合适答案为以往遗留问题&#xff0c;最近有时间将以往遗留问题一一完善。 LeetCode - #141 环形链表 不积跬步&#xff0c;无以至千里&#xff1b;不积小流…

SpringCloud实用-OpenFeign 调用三方接口

文章目录 前言正文一、项目环境二、项目结构2.1 包的含义2.2 代理的场景 三、完整代码示例3.1 定义FeignClient3.2 定义拦截器3.3 配置类3.4 okhttp配置3.5 响应体3.5.1 天行基础响应3.5.2 热点新闻响应 3.6 代理类3.6.1 代理工厂3.6.2 代理客户端3.6.3 FeignClient的建造器 四…

C++设计模式行为模式———中介者模式

文章目录 一、引言二、中介者模式三、总结 一、引言 中介者模式是一种行为设计模式&#xff0c; 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互&#xff0c; 迫使它们通过一个中介者对象进行合作。 中介者模式可以减少对象之间混乱无序的依赖关系&…

HarmonyOS:使用ArkWeb构建页面

一、简介 页面加载是Web组件的基本功能。根据页面加载数据来源可以分为三种常用场景&#xff0c;包括加载网络页面、加载本地页面、加载HTML格式的富文本数据。 页面加载过程中&#xff0c;若涉及网络资源获取&#xff0c;需要配置ohos.permission.INTERNET网络访问权限。 二、…

矩阵的拼接

矩阵的拼接分为横向拼接和纵向拼接 注意&#xff1a;横向拼接要求两矩阵行数相同&#xff0c;纵向拼接要求两矩阵列数相同 h o r z c a t horzcat horzcat和 v e r t c a t vertcat vertcat函数 h o r z c a t ( a , b ) horzcat(a,b) horzcat(a,b)将 a a a和 b b b横向拼接&a…

SpringCloud框架学习(第五部分:SpringCloud Alibaba入门和 nacos)

目录 十二、SpringCloud Alibaba入门简介 1. 基本介绍 2.作用 3.版本选型 十三、 SpringCloud Alibaba Nacos服务注册和配置中心 1.简介 2.各种注册中心比较 3.下载安装 4.Nacos Discovery服务注册中心 &#xff08;1&#xff09; 基于 Nacos 的服务提供者 &#xf…

Ollama vs VLLM:大模型推理性能全面测评!

最近在用本地大模型跑实验&#xff0c;一开始选择了ollama,分别部署了Qwen2.5-14B和Qwen2.5-32B&#xff0c;发现最后跑出来的实验效果很差&#xff0c;一开始一直以为prompt的问题&#xff0c;尝试了不同的prompt&#xff0c;最后效果还是一直不好。随后尝试了vllm部署Qwen2.5…