你是否了解CSS 的属性计算过程呢? 

<body>
  <h1>这是一个h1标题</h1>

</body>

 

目前我们没有设置改h1的任何样式,但是却能看到改h1有一定的默认样式,例如有默认的字体大小,默认的颜色 

那么问题来了,我们这个h1元素上面除了有默认字体大小,默认颜色等属性以外,酒精还有哪些属性呢?

答案: 是该元素上面会有CSS所有的属性,你可以打开浏览器的开发者面板,选择[元素],切换到[计算样式],之后勾选[全部显示],此时你就能看到在次h1上面所有css属性对应的值

换句话说,我们所书写的任何一个HTML元素,实际上都有完整的一整套CSS样式,这一点往往是让初学者比较意外的,因为我们平时在书写CSS样式时,往往只会书写必要的部分,例如前面的: 

p{

    color : red

}

这往往会给我们造成一种错觉,认为该p元素上面就只有color属性,而真是的情况确实是,任何一个HTML,都有一套完整的CSS样式,只不过你没有书写的样式,大概率可能会使用其默认值,例如上图中h1一个样式都没有设置,全部都用的默认值. 

但是注意,我这里强调的是"大概率可能",难道还有我们"没有设置值,但是不使用默认值"的情况么?

嗯,确实有的,所以我才强调你要了解"CSS属性的计算过程"

总的来讲,属性值的计算过程,分为如下这么4个步骤: 

  • 确定声明值
  • 层叠冲突
  • 使用继承
  • 使用默认值

1. 确定声明值

首先第一步,是确定声明值,所谓声明值就是作者自己所书写的CSS样式,例如前面的:

p{

  color: red;

这里我们声明了p元素为红色,那么就会应用此属性设置

当然,除了作者样式表,一般浏览器还会存在"用户代理样式表",简单来说就是浏览器内置了一套样式表. 

 

在上面的示例中,作者样式表中设置了color属性,而用户代理样式表(浏览器提供的样式表)中设置了诸如display,margin-block-start,margin-block-end,margin-inline-start,margin-inline-end 等属性对应的值. 

这些值目前来讲也没有什么冲突,因此最终就会应用这些属性值

2.层叠冲突

在确定声明值时,可能出现一种情况,那就是声明的样式规则发生了冲突. 

此时会进入解决层叠冲突的流程,而这一步又可以细分为下面这三个步骤: 

  • 比较源的重要性
  • 比较优先级
  • 比较次序

1.比较源的重要性

当不同的CSS样式来源有用相同的声明时,此时就会根据样式表来源的重要性来确定应用哪一条样式规则. 

那么问题来了,咱们的样式表的源究竟有几种呢?

整体来讲有三种来源: 

  • 浏览器会有一个基本的样式表来给任何网页设置默认样式,这些样式统称为用户代理样式.
  • 网页的作者可以定义文档的样式,这是最常见的样式表,称之为页面作者样式. 
  • 浏览器的用户,可以使用自定义样式表定制使用体验,称之为用户样式

对应的重要性顺序依次为: 页面作者样式>用户样式> 用户代理样式

我们来看一个示例 

例如现在有页面作者样式表和用户代理样式表中存在属性的冲突,那么会以作者样式表优先 

p{
  color : red;
  display: inline-block;
}

 

可以明显的看到,作者样式表和用户代理样式表中同时存在的idsplay属性的设置,最终作者样式表干掉了用户代理样式表中冲突的属性,这就是第一步,根据不同源的重要性来决定应用哪一个源的样式. 

3. 比较优先级  

那么接下来,如果是在在同一个源中又样式声明冲突怎么办呢? 此时就会进行样式声明的优先级比较. 

例如: 

<div class='test'>

   <h1>test</h1>

<div>

.test h1{

  font-size: 50px

}
 

h1 {

 font-size: 20px;

}

在上面的代码中,同属于页面作者样式,源的重要性是相同的,此时会以选择器的权重来比较重要性. 

很明显,上面的选择器的权重要大于下面的选择器,因此最终标题呈现50px. 

 

可以看到,落败的作者样式在Element Style中会被划掉

有关选择器的权重计算方式,不清楚的同学,可以进入此传送门:  Specificity - CSS | MDN

4.比较次序 

经历了上面两个步骤,大多数的样式声明能够被确定下来,但是还剩下最后一种情况,那就是样式声明即是同源,权重也相同. 

此时就会进入第三个步骤,比较样式声明的次序 

举个例子: 

h1{

  font-size: 50px; 

}

h1 {

  font-size: 20px; 

}

在上面的代码中,同样都是页面作者样式,选择器的权重也想通,此时位于下面的样式声明会层叠掉上面的那一条样式声明,最终会应用20px这一条属性值

 

至此,样式声明中存在冲突的所有情况,就全部被解决了. 

 5.使用继承

层叠冲突这一步完成后,解决了相同元素被声明了多条样式规则,究竟应用哪一条样式规则的问题.那么如果没有声明的属性呢?此时就是用默认值吗?

不是的.此时还有第三个步骤,那就是使用继承而来的值

例如: 

<div>
  <p>Lorem ipsum dolor sit amet.</p>
</div>

 div {
  color: red;
}

在上面的代码中,我们针对div 设置color属性值为红色,而针对p元素我们没有声明任何的属性,但是由于color是可以继承的,因此p元素会从父元素的同属性的计算值继承到color属性的值 

 

来看下面的一个例子: 

<div class="test">
  <div>
    <p>Lorem ipsum dolor sit amet.</p>
  </div>
</div>

 div {
  color: red;
}
.test{
  color: blue;
}

 

 因为这里并不涉及到选中p元素声明color值,而是从父元素上面继承到color对应的值,因此这里是谁近就听谁的,初学者往往会产生混淆,又去比较权重,但是这里根本不会涉及到权重比较,因为压根儿就没有选中到p元素. 

另外哪些属性能够继承?

关于这一点的话,大家可以在MDN上很轻松的查阅到,例如我们以text-align 为例,如下图所示: 

6.使用默认值

目前走到这一步,如果属性值都还不能确定下来,那么久只能是使用默认值了. 

如下图所示:

前面我们也说过,一个HTML元素要在浏览器中渲染出来,必须具备所有的CSS属性值,但是绝大部分我们是不会去设置的,用户代理样式表里面也不会去设置,也无法从继承拿到,因此最终都是用默认值 

好了,这就是关于CSS属性计算过程的所有知识了. 

7.面试题

下面的代码,最终渲染出来的效果,a元素是什么颜色?p元素又是什么颜色

<div>
  <a href="">test</a>
  <p>test</p>
</div>

 

为什么会呈现这样的效果?

实际上原因很简单,因为a元素在用户代理样式表中已经设置了color属性对应的值也就是默认样式,因此会应用此声明值,而在p元素中无论是作者样式表还是用户代理样式表,都没有对此属性进行声明,然而由于color属性是可以继承的,因此最终p元素的color属性值通过持恒来自于父元素. 

 

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis高频面试题:利用I/O多路复用实现高并发

Redis 通过 I/O 多路复用&#xff08;I/O Multiplexing&#xff09;技术实现高并发&#xff0c;这是其单线程模型能够高效处理大量客户端连接的关键。以下是通俗易懂的解释&#xff0c;结合 Redis 的工作原理&#xff0c;详细说明其实现过程。 1. 什么是 I/O 多路复用&#xff…

爬虫小知识(二)网页进行交互

一、提交信息到网页 1、模块核心逻辑 “提交信息到网页” 是网络交互关键环节&#xff0c;借助 requests 库的 post() 函数&#xff0c;能模拟浏览器向网页发数据&#xff08;如表单、文件 &#xff09;&#xff0c;实现信息上传&#xff0c;让我们能与网页背后的服务器 “沟通…

WPF学习(五)

文章目录一、FileStream和StreamWriter理解1.1、具体关系解析1.2、类比理解1.3、总结1.4、示例代码1.5、 WriteLine()和 Write&#xff08;&#xff09;的区别1.6、 StreamWriter.Close的作用二、一、FileStream和StreamWriter理解 在 C# 中&#xff0c;StreamWriter 和 FileS…

ctf.show-web习题-web2-最简单的sql注入-flag获取详解、总结

解题思路打开靶场既然提示是最简单的sql注入了&#xff0c;那么直接尝试永真登录1 or 11#这里闭合就是简单的单引号可以看到没登录成功&#xff0c;但是有回显&#xff1a;欢迎你&#xff0c;ctfshowsql注入最喜欢的就是回显了&#xff01;这题的思路就是靠这个回显&#xff0c…

upload-labs 靶场通关(1-20)

目录 Pass-01(JS 绕过) Pass-02(文件类型验证) Pass-03(黑名单验证) Pass-04(黑名单验证.htaccess) Pass-05(大小写绕过) Pass-06(末尾空格) Pass-07(增加一个.) Pass-08(增加一个::$DATA) Pass-09&#xff08;代码不严谨&#xff09; Pass-10&#xff08;PPHPHP&am…

[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+vue实现的酒店预订管理系统,推荐!

摘 要 使用旧方法对酒店预订信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在酒店预订信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的酒店预订管理系…

LSTM入门案例(时间序列预测)| pytorch实现(可复现)

需求 假如我有一个时间序列&#xff0c;例如是前113天的价格数据&#xff08;训练集&#xff09;&#xff0c;然后我希望借此预测后30天的数据&#xff08;测试集&#xff09;&#xff0c;实际上这143天的价格数据都已经有了。这里为了简单&#xff0c;每一天的数据只有一个价…

Axure RP 10 预览显示“无标题文档”的空白问题探索【护航版】

1. 安装情况 官网 Axure RP 10&#xff1a;Download Axure RP 10 - Axure &#xff08;PS&#xff1a;11都出了&#xff09; 版本&#xff1a;10.0.0.3924 激活码&#xff1a;49bb9513c40444b9bcc3ce49a7a022f9 &#xff08;10/11都可以用&#xff0c;但只尝试了10&#xff…

基于SpringBoot+Vue的汽车租赁系统(协同过滤算法、腾讯地图API、支付宝沙盒支付、WebsSocket实时聊天、ECharts图形化分析)

系统亮点&#xff1a;协同过滤算法、腾讯地图API、支付宝沙盒支付、WebsSocket实时聊天、ECharts图形化分析&#xff1b;01系统开发工具与环境搭建—前后端分离架构项目架构&#xff1a;B/S架构运行环境&#xff1a;win10/win11、jdk17前端&#xff1a;技术&#xff1a;框架Vue…

数据结构入门:像整理收纳一样简单!

在我们生活中&#xff0c;经常会面对这样的问题&#xff1a; “我要怎么整理我的衣柜&#xff1f;” “电脑里照片太多了&#xff0c;怎么归类才方便查找&#xff1f;” 其实&#xff0c;程序员也有类似的烦恼。他们不整理衣柜&#xff0c;而是“整理数据”。而这门关于如何“收…

力扣每日一题--2025.7.15

&#x1f4da; 力扣每日一题–2025.7.15 3135. 有效单词 &#xff08;简单&#xff09; 大家好&#xff01;今天我们要来聊聊一道有趣的编程题——有效单词 &#x1f4dd; 题目描述 题目分析 &#x1f4da; 题目要求我们判断一个字符串是否为有效单词。有效单词需要满足以下…

Mysql数据库——增删改查CRUD

文章目录一、数据库的基础命令二、创建表三、增(create)四、查询&#xff08;retrieve)五、条件查询&#xff08;where&#xff09;六、修改&#xff08;update&#xff09;七、删除&#xff08;delete&#xff09;一、数据库的基础命令 1.使用客户端连接服务器 mysql -u root…

关于pytorch虚拟环境及具体bug问题修改

本篇博客包含对于虚拟环境概念的讲解和代码实现过程中相关bug的解决关于虚拟环境我的pytorch虚拟环境在D盘&#xff0c;相应python解释器也在D盘&#xff08;一起&#xff09;&#xff0c;但是我的pycharm中的项目在C盘&#xff0c;使用的是pytorch的虚拟环境&#xff0c;这是为…

U盘量产工具与性能优化完全指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;U盘量产工具是IT行业中的专业软件&#xff0c;用于批量生产或修复U盘。安国和银灿是两个提供U盘量产工具的主控芯片制造商&#xff0c;提供初始化、格式化、分区管理、性能优化、故障修复、个性化定制、固件升级…

Golang http开发实战:构建RESTful API保姆级教程

目录 章节1:RESTful API的精髓与Go的Web开发哲学 RESTful API的设计原则 Go的http包核心组件 实战:第一个RESTful API端点 章节2:设计优雅的RESTful路由 路由设计的注意事项 使用Gorilla Mux实现动态路由 章节3:请求与响应的艺术:解析与格式化 解析请求数据 统一…

UGUI 性能优化系列:第一篇——基础优化与资源管理

UGUI 性能优化系列&#xff1a;第一篇——基础优化与资源管理 UGUI 性能优化系列&#xff1a;第二篇——Canvas 与 UI 元素管理 在 Unity 游戏中&#xff0c;用户界面&#xff08;UI&#xff09;是玩家与游戏交互的核心。然而&#xff0c;不当的 UGUI 使用常常成为游戏性能的…

多端协同的招聘系统源码开发指南:小程序+APP一体化设计

当下&#xff0c;很多企业选择搭建属于自己的多端协同招聘平台&#xff0c;尤其是中大型人力资源公司、连锁品牌企业&#xff0c;以及同城服务平台&#xff0c;更是将“小程序APP”一体化招聘系统视为提升效率、降低用工成本的利器。 今天&#xff0c;笔者将从源码开发的角度&a…

Maven 配置文件核心配置:本地仓库、镜像与 JDK 版本

Maven 配置文件核心配置&#xff1a;本地仓库、镜像与 JDK 版本 在 Maven 项目开发中&#xff0c;合理配置 settings.xml 文件能显著提升依赖管理效率。本文将聚焦本地仓库、镜像加速和 JDK 版本这三个核心配置&#xff0c;结合 IDEA 环境详细讲解配置方法与作用。 一、Maven 配…

【时时三省】(C语言基础)通过指针引用字符串

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省如在printf函数中输出一个字符串。这些字符串都是以直接形式&#xff08;字面形式&#xff09;给出的&#xff0c;在一对双撇号中包含若干个合法的字符。使用字符串的更加灵活方便的方法——通…

【Linux驱动-快速回顾】一文快速理解GIC内部寄存器对中断的控制

第一部分&#xff1a;GIC的功能和组成 1. GIC要解决的根本问题 在一个复杂的片上系统&#xff08;SoC&#xff09;中&#xff0c;有非常多的硬件模块&#xff08;如定时器、串口、按键、DMA等&#xff09;&#xff0c;它们都需要在完成任务或遇到特定事件时通知CPU。同时&#…