8.CSS层叠继承规则总结

news2024/11/15 13:54:47

CSS 层叠继承规则总结

经典真题

  • 请简述一下 CSS 中的层叠规则

CSS 中的层叠继承规则

在前面《CSS属性的计算过程》中,我们介绍了每一个元素都有都有所有的属性,每一个属性都会通过一系列的计算过程得到最终的值。

这里来回顾一下计算过程,大致有以下几个步骤:

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

其中的第二步和第三步层叠和继承会有一些需要注意的知识点,这里我们一起来看一下。

层叠规则

CSSCascading Style Sheets 的缩写,这暗示层叠(cascade)的概念是很重要的。

在最基本的层面上,它表明 CSS 规则的顺序很重要,但它比那更复杂。

什么选择器在层叠中胜出取决于三个因素(这些都是按重量级顺序排列的,前面的的一种会否决后一种):

  • 重要性(Importance
  • 专用性(Specificity
  • 源代码次序(Source order

重要性

CSS 中,有一个特别的语法可以让一条规则总是优先于其他规则: !important

知道 !important 存在是很有用的,这样当你在别人的代码中遇到它时,你就知道它是什么了。

但是!建议你千万不要使用它,除非你绝对必须使用它。您可能不得不使用它的一种情况是,当您在修改某个组件样式时,你不能编辑该组件核心的 CSS 模块,又或者你确实想要重写一种不能以其他方式覆盖的样式。

但是,如果你能避免的话,不要使用它。由于 !important 改变了层叠正常工作的方式,因此调试 CSS 问题,尤其是在大型样式表中,会变得非常困难。

专用性

专用性基本上是衡量选择器的具体程度的一种方法,主要是指它能匹配多少元素。

元素选择器具有很低的专用性。类选择器具有更高的专用性,所以将战胜元素选择器。ID 选择器有甚至更高的专用性, 所以将战胜类选择器,战胜 ID 选择器的方法则是 style 中的样式或者 !important

一个选择器具有的专用性的量可以用四种不同的值(或组件)来衡量的,它们可以被认为是千位,百位,十位和个位,在四个列中的四个简单数字:

  • 千位:如果声明是在 style 属性中该列加 1 分(这样的声明没有选择器,所以它们的专用性总是 1000)否则为 0
  • 百位:在整个选择器中每包含一个 ID 选择器就在该列中加 1 分。
  • 十位:在整个选择器中每包含一个类选择器、属性选择器、或者伪类就在该列中加 1 分。
  • 个位:在整个选择器中每包含一个元素选择器或伪元素就在该列中加 1 分。

注:通用选择器(*), 复合选择器(+、>、~、空格)和否定伪类(:not)在专用性中无影响。

举个例子:

选择器千位百位十位个位合计值
h100010001
#indentifier01000100
h1 + p::first-letter00030003
li > a[href*=” zh-CN”] > .inline-warning00220022
没有选择器, 规则在一个元素的 style 属性里10001000

源代码次序

如果多个相互竞争的选择器具有相同的重要性和专用性,那么第三个因素将帮助决定哪一个规则获胜,也就是说,选择哪一个选择器取决于源码顺序。

例如:

p {
    color: red;
}


p {
    color: blue;
}

不过有一点大家需要注意的是,当多个 CSS 规则匹配相同的元素时,它们都被应用到该元素中。只不过后面因为层叠规则被层叠掉了而已。打开 Elements > Styles 我们就能看到:

image-20240222090719106

继承规则

所谓继承,就是应用于某个元素的一些属性值将由该元素的子元素继承,而有些则不会。

究竟哪些属性能够被子元素继承,可以参阅:https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference

CSS 为处理继承提供了四种特殊的通用属性值:

  • inherit:该值将应用到选定元素的属性值设置为与其父元素一样。
  • initial:该值将应用到选定元素的属性值设置为与浏览器默认样式表中该元素设置的值一样。如果浏览器默认样式表中没有设置值,并且该属性是自然继承的,那么该属性值就被设置为 inherit
  • unset:该值将属性重置为其自然值,即如果属性是自然继承的,那么它就表现得像 inherit,否则就是表现得像 initial
  • revert:如果当前的节点没有应用任何样式,则将该属性恢复到它所拥有的值。换句话说,属性值被设置成自定义样式所定义的属性(如果被设置), 否则属性值被设置成用户代理的默认样式。

注: initialunset 不被 IE 支持。

继承的就近原则

由于属性值是由继承而来,所以属性值会继承离自己近的那个元素的属性。例如:

<div class="one">
  <div class="two">
    <p>Lorem ipsum dolor sit amet.</p>
  </div>
</div>
.two {
  color: blue;
}

.one {
  color: red;
}

在上面的示例中,twoone 更加接近 p,所以最终采用的是 twocolor 值。段落呈现蓝色。

真题解答

  • 请简述一下 CSS 中的层叠规则

参考答案:

CSS 中当属性值发生冲突时,通过层叠规则来计算出最终的属性值,层叠规则可以分为 3 块:

  • 重要性(Importance):!important 设置该条属性值最重要,但是一般不推荐使用。
  • 专用性(Specificity):专用性主要是指它能匹配多少元素,匹配得越少专用性越高。
  • 源代码次序(Source order):在重要性和专用性都一致的情况下,属性值取决于源代码的先后顺序。

-EOF-

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

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

相关文章

K8S—Pod详解

目录 一 Pod基础概念 1.1 Pod是什么 1.2 为什么要使用Pod&#xff1f;Pod在K8S集群中的使用方式&#xff1f; 1.3 基础容器pause 二 Pod的分类 2.1 自主式Pod和控制器管理的Pod 2.2 容器的分类 2.2.1 基础容器&#xff08;infrastructure container&#xff09; 2.2.2…

【Linux】Vagrant搭建Linux环境

Vagrant Vagrant是一个基于Ruby的工具&#xff0c;用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统&#xff0c;使用 Chef创建自动化虚拟环境。 安装Vagrant 从Vagrant官网下载安装包&#xff0c;执行安装。 安装VirtualBox 从官网下载VirtualBo…

企业品牌软文发布在媒体上,有啥用呢

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 通常企业都会建立自己的媒体矩阵&#xff0c;在公众号&#xff0c;视频号&#xff0c;抖音&#xff0c;网易号&#xff0c;搜狐号等企业品牌矩阵中发布软文&#xff0c;公司动态&#xf…

智慧城市|SHARE 孪影F2 PRO 在数字化城市平台中的应用。

在数字化时代背景下&#xff0c;乌审旗政府积极响应实景三维中国建设工作&#xff0c;以数字乌审作为全旗智慧城市总框架、总平台&#xff0c;致力提升城市治理现代化水平&#xff0c;结合互联网、云计算、人工智能等信息技术建设新型智慧城市&#xff0c;推进城市发展新理念。…

现货黄金怎么交易

现货黄金是投资者广泛关注的一种黄金交易方式。与期货黄金相比&#xff0c;现货黄金交易更加简单、灵活&#xff0c;同时也更容易掌握。本文将介绍现货黄金交易的基本知识&#xff0c;以及投资者应该如何进行现货黄金交易。 一、现货黄金交易基础知识 什么是现货黄金&#xf…

ES6内置对象 - Set

Set&#xff08;es6提供的一种数据结构&#xff0c;类似数组&#xff0c;是一个集合&#xff0c;可以存储任何类型的元素且唯一、不重复&#xff0c;so,多用于元素去重&#xff09; 如上图&#xff0c;Set数据结构自带一些方法 1.Set对象创建 let a new Set([1,2,3,3,1,2,4,…

4个为数据程序员量身打造的PyCharm插件

SonarLint 插件可以帮助开发人员在编码过程中发现潜在的代码问题&#xff0c;提高代码质量。可在实时编码过程中发现并修复代码问题&#xff0c;类似于拼写检查器。它不仅仅是一个代码检查工具&#xff0c;更像是代码质量助手。 PyCharm 是一款由 JetBrains 公司推出的强大的 …

Ubuntu系统本地部署Inis博客结合内网穿透实现远程访问本地站点

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总…

超级实用的python代码片段汇总和详细解析(16个)

目录 1. 生成随机文本 2. 计算文本文件中的字数 3. 替换文件文件中的字串 4. 多文件名的批量替换 5. 从网站提取数据 6. 批量下载图片 7.批量删除空文件夹 8.Excel表格读写 9.合并Excel表格工作簿 10.数据库SQL查询 11. 系统进程查杀 12.图像尺寸调整和裁剪 13.图…

蓝桥杯STM32G431RBT6实现按键的单击、双击、长按的识别

阅读引言&#xff1a; 是这样&#xff0c; 我也参加了这个第十五届的蓝桥杯&#xff0c;查看竞赛提纲的时候发现有按键的双击识别&#xff0c; 接着我就自己实现了一个按键双击的识别&#xff0c;但是识别效果不是特别理想&#xff0c;偶尔会出现识别不准确的情况&#xff0c;接…

测试环境搭建整套大数据系统(六:搭建sqoop)

一&#xff1a;下载安装包 https://archive.apache.org/dist/sqoop/ 二&#xff1a;解压修改配置。 tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt cd /opt mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7修改环境变量 vi /etc/profile#SQOOP_HOME export SQOOP_…

outlook邮箱后缀怎么设置?邮箱后缀问题?

outlook邮箱后缀如何修改&#xff1f;微软有哪些后缀的邮箱&#xff1f; Outlook不仅提供了稳定的邮件收发服务&#xff0c;还允许用户根据个人喜好和需求自定义邮箱后缀。那么&#xff0c;Outlook邮箱后缀究竟该如何设置呢&#xff1f;下面&#xff0c;蜂邮EDM将一步步指导您…

【FPGA】VHDL:小型出勤系统设计

附源代码&#xff0c;一定能实现&#xff01; 目录 EDA设计练习题&#xff1a; 实验要求如下&#xff1a; 思路分析&#xff1a; 代码 99进制计数器 码转换 顶层文件 特别注意 测试 编译通过 结果展示 RTL视图 技术映射视图 软件&#xff1a;Quartus II 13.0 (64…

软件测试需要学习什么?好就业吗?

目前来说的话&#xff0c;整个it 都不太好&#xff01;但是既然你问了&#xff0c;我也就告诉你吧&#xff01; 1功能测试 &#xff1a;前端和后端&#xff0c;前端就是简单的页面&#xff0c;你需要考虑的是&#xff1a;必填项&#xff0c;边界值&#xff0c;组合&#xff0c…

深度学习介绍与环境搭建

深度学习介绍与环境搭建 慕课大学人工智能学习笔记&#xff0c;自己学习记录用的。&#xff08;赋上连接&#xff09; https://www.icourse163.org/learn/ZUCC-1206146808?tid1471365447#/learn/content?typedetail&id1256424053&cid1289366515人工智能、机器学习与…

XG5032HAN (SAW)振荡器)(piezoman压电侠)

XG5032HAN晶体振荡器通过其卓越的低抖动特性&#xff0c;为需要高频率精度和稳定性的电子设备提供了理想的解决方案。无论是在高性能的数据通信、精密测量XG5032HAN都能提供高质量、可靠的性能。同时&#xff0c;宽广的频率范围其25 MHz到250 MHz&#xff0c;小巧的封装5.0 3.…

问题1-spring-boot版本和org.springframework的spring-web兼容的版本

报错问题如下&#xff1a; Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.createHandlerMethod(AbstractHandlerMeth…

IOT-Reaserch安装ghidra以及IDEA和ghidra的配置

Linux research 5.4.0-91-generic #102~18.04.1-Ubuntu SMP Thu Nov 11 14:46:36 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux java --version IOT自带的java是符合要求的&#xff0c;不需要额外下载 iotresearch:~/install-file$ java --version openjdk 11.0.13 2021-10-19 …

前后端分离vscode保险业务管理系统vue+Nodejs

本设计主要应用于完成对保险业务进行计算机化的管理。系统前台展示各种种类的保险&#xff0c;顾客可以选择登陆后买入。公司员工为管理员&#xff0c;由公司统一分配账号&#xff0c;员工用工号密码登陆。可以修改密码&#xff0c;查看、修改自己的信息。员工可处理顾客信息。…

java+selenium自动化测试

编写自动化测试代码的时候有时候会遇到修改代码但是仍然不起作用的情况 &#xff0c;例如 我将测试账号换成只有一个时&#xff0c;代码仍然会执行上面的7个测试账号 解决方法&#xff1a; File->setting->Build->Maven&#xff1a;选择idea自带的maven即可解决 之后…