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

server/2024/11/25 0:42:59/

主线程遍历得到的 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 属性。

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

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

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

继承原则

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

4、使用默认值

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

在这里插入图片描述


http://www.ppmy.cn/server/144667.html

相关文章

【bug】使用transformers训练二分类任务时,训练损失异常大

使用transformers训练二分类任务时&#xff0c;训练损失异常大 问题分析 问题 training_loss异常大&#xff0c;在二分类损失中&#xff0c;收敛在1~2附近&#xff0c;而eval_loss却正常&#xff08;小于0.5&#xff09; 分析 参考&#xff1a; Bug in gradient accumulation…

【PCIE常见面试问题-1】

PCIE常见面试问题-1 1 PCIE概述1.1 PCI为何发展开PCIE&#xff1f;1.2 什么是Root Complex(RC)1.3 什么是EP&#xff1f;1.4 什么是Swith1.5 PCIE协议如何组织通信的&#xff1f;1.6 简要介绍一下PCIE的分层结构&#xff0c;为什么需要分层&#xff1f;1.7 PCIE的事务类型有哪些…

微软 Ignite 2024 大会

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

金融科技白皮书:2022-2023年度回顾与前瞻

在金融科技领域&#xff0c;2022至2023年见证了一系列创新技术的应用和发展。本白皮书将回顾过去一年的主要成就&#xff0c;并展望未来一年的发展趋势。 2022年亮点回顾 **低代码平台&#xff1a;**低代码平台通过高度抽象化和自动化的可视化过程&#xff0c;简化了应用程序开…

前端:春节倒计时的简单实现

目录 一、前言 二、效果图及分析 三、代码 四、总结 一、前言 时间如白驹过隙&#xff0c;一转眼也快要年末了&#xff0c;感受着春节一天接一天的靠近&#xff0c;突然想到了用倒计时来进行记录&#xff0c;这应该能更直观的感受春节的临近。因此&#xff0c;我在这里跟大…

使用LLaMA-Factory微调时的问题与解决方案记录

文章目录 如何指定微调使用的显卡如何解决显卡通信导致的报错模型微调的实际epoch和step如何计算如何实现多卡全量微调模型微调后的结果如何查看模型测试后的指标如何理解如何指定微调使用的显卡 启动网页时使用这种执行命令 CUDA_VISIBLE_DEVICES=5,6,7 llamafactory-cli we…

uniapp 相关的swiper的一些注意事项

先推荐一个一个对标pc端swiper的uniapp版本 zebra-swiper 缺点是自定义分页器不是很好处理 不知道怎么弄 优点:可以进行高度自适应 &#xff08;这个uniapp原生swiper没有 只能动态修改 采用js 或者只有几种固定高度时采用变量修改&#xff09; <swiperref"lifeMiddle…

【U盘车载音乐】某宝198的3068首车载专用音乐合集【高音质】24G

「【U盘车载音乐】某宝198的3068首车载专用音乐合集【高音质】24G」 复制下方口令&#xff0c;打开最新版「夸克APP」即可获取保存&#xff08;防止和谐&#xff01;&#xff01;&#xff01;&#xff09; 口令&#xff1a; 动作懿范鉴真渡多好备用口令&#xff1a; /~19dc35…