CSS基础笔记-04cascade-specificity-inheritance

CSS基础笔记系列

  • 《CSS基础笔记-01CSS概述》
  • 《CSS基础笔记-02动画》
  • CSS基础笔记-03选择器

前言

Cascading Style Sheets,关键就在于这个cascading,对于这个术语理解,感觉对于我这种CSS新手有点儿不太friendly。本文记录下我对这个术语的理解,同时会以文章标题的三个单词为切入点,综合起来理解可能相对会准确一些吧。

三个术语的“开胃菜”

cascade: 有翻译“层叠”或“级联”的意思。

specificiy:有翻译“优先级”的,我个人觉得这种翻译不太合适,可能会丢失该术语原本想表达的意思,我更倾向于使用“具体性”来表达。

inheritance: 翻译为“继承性”没啥分歧,也是三个术语中最容易理解的。

三个术语的“主菜”

按照由易到难的原则,先解释inheritance,然后specificity,最后结合起来解释cascade。

inheritance

继承。是指属性的可继承性。

通过一个例子来解释什么是继承性。

<ul class="main"><li>Item One</li><li>Item Two<ul><li>2.1</li><li>2.2</li></ul></li><li>Item Three<ul class="special"><li>3.1<ul><li>3.1.1</li><li>3.1.2</li></ul></li><li>3.2</li></ul></li></ul>
.main {color: red;border: 2px solid green;
}.special {color: black;
}

上例定义了三层无序列表ul,最外层ul定义了main class并设置了字体颜色为红色和边框样式。由于color属性是可以继承的,border属性是不可继承的。因此,最外层ul的子节点或后代节点的文字都是红色的。然后,由于中间层的ul定义了special class并设置字体颜色为黑色,它阻断了前面的color样式,采用了自己的special样式,中间层的ul的后代节点则会继承新的color样式。

在这里插入图片描述

所以,继承的有以下几个特点:

  1. 层次性,子代继承父代(或祖先代)的属性样式,这里其实也有点“级联”的那味儿了。
  2. 不可继承的常用属性:width , margin, padding, border;除了查阅css标准的属性详细信息外,一般也可以感性地来判断一个属性是否可继承。如果某些属性可继承的话,直观上会使得渲染的效果变得更糟,那么一般这个属性可能就不能被继承。

specificity

英文词典对该词的英英释义为:“the quality of being specific rather than general”。

如果理解了 “什么是一般”、“什么是具体”,那么这个术语也就基本理解了。

<p class="paragraph">第一个段落</p><p>第二个段落</p><p>第三个段落</p>
p {color: blue;
}.paragraph {color: red;
}

在这里插入图片描述

上例定义了三个p标签,第一个标签定义了一个“paragraph”类并将“paragraph”的字体颜色设置为红色;定义了一个p元素选择器并将字体颜色设置为蓝色。也就是说 所有的p标签的字体颜色都为蓝色;所有的p标签且class为“paragraph”的元素,字体颜色为红色。从这个例子来看,“第二个段落”和“第三个段落”只有一个p选择器来样式化(相对通用一些),“第一个段落”的样式是:p元素且class为paragraph(相对更具体一些);只要是p元素其字体颜色就是蓝色,只要是p元素且class为paragraph其字体颜色就是红色,多了一个更明确、更具体的条件(class为paragraph)。

我们知道CSS 是一门基于规则(rule)的语言,本质上就是定义(或描述)网页中特定元素的样式的一组规则。既然是规则,当规则的条数多了之后,就有可能出现规则冲突的情况。所谓“冲突”,就好比上面这个例子,p标签的文本颜色为蓝色,而paragraph类有定义了文本颜色为红色,那么对于“第一个段落”来说它到底应该选择哪个颜色,这时就需要做决策了,做决策的依据就是specificity,看谁描述的更具体更明确,就决策用哪条规则。因为”p.paragraph”比“p”更具体并明确,类选择器比元素选择器更具体。

当然了直观上是可以这样去判断的,其实specificity有其更专业性的定义和计算方法(计算出specificity的值,我把它称为“具体值”)。但是,我们再实际编程时不可能总是去计算“具体值”,必须有比较直观的方式去判断,因此通过对规则的具体程度的直观感受就能判断出来啦。

具体的计算方法我也列出以下:

  1. id选择器:一个分值(权重)为100;
  2. class选择器:一个分值为10;
  3. element选择器:一个分值为1;

再结合前面的例子,我将“第二个段落”添加一个id属性,设置为id=”second”,文本颜色设置为绿色。

<p class="paragraph">第一个段落</p><p id="second">第二个段落</p><p>第三个段落</p>
p.paragraph {color: red;
}p {color: blue;
}#second{color: green;
}

效果如下:

在这里插入图片描述

可以看到“第二个段落”文字的颜色变成了绿色,说明id选择器的“具体值”更大。

selectorid选择器class选择器element选择器
p001
.paragraph010
#second100

我这里的给出的示例都非常简单,主要是为了减少复杂度,尽量把自己的理解描述清楚,我相信实际工程中,样式规则会更复杂,那就得结合具体情况分析了。

写到这里可能还有个问题,如果对同一元素,有两条规则对它进行样式化,但是,这两条规则的“具体值”都是一样的,又该怎么决策呢?带着这个问题,我们进入“cascade”。

cascade

当两条规则的“具体值”都是一样的,又该怎么决策呢?不妨写个代码看看样式化的效果。

<div>第一个DIV</div><div>第二个DIV</div><div>第三个DIV</div>
div{color: blue;
}div{color: red;
}

在这里插入图片描述

从运行结果来看,第一个规则(color为blue)似乎并没有生效,第二个规则(color为red)生效了。根据编程语言的“编译”或“解释”的“自上而下”经验来直观判断,当出现相同的规则时,浏览器会采用最后出现的规则来样式化元素。

这里引出一个概念叫“source order”,它的作用就是上面这个例子描述的那样,当相同规则(权重值相同)样式化同一个元素时,后出现的规则将会被采用。也就是由源码 书写的顺序决定。

结合inheritance、specificity,我尝试表述下对cascade的理解:

“cascade”是指当存在多个样式规则时,确定哪种样式应该应用于元素的过程。意味着样式可以从一个规则流(或级联)到另一个规则,不同级别的规则会影响元素的最终表示;级联的目的是提供一种系统的方法来解决冲突,并根据具体性和源顺序等因素对样式进行优先排序;它涉及考虑样式的源顺序、具体性、继承性等因素,以解决冲突并决定元素的最终样式。使用这个术语似乎能捕捉到应用样式规则的顺序、流动的本质,此刻,瞬间我是似乎有点儿get到“倾泻”、“瀑布”状的感觉了。

总结

本文对级联(cascade),具体性(specificity),源顺序(source order),继承性(inheritance)作了系统性的理解和学习。当理解了术语的本质含义后,我再看到这几个单词或翻译,内心就一点儿都不“虚”了,不管它文字上怎么表示,我都知道它在说什么。今后遇到复杂的规则表示,我该怎么去用它、去调试它,剩下的就是熟练使用的问题了。当然,阅读了本文的读者如果其他角度或更深入的理解,也希望能在评论区提出来,大家一起进步,增进对CSS的理解。

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

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

相关文章

互联网分布式应用之SpringCloud

SpringCloud Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. 微服务项目介绍 2. Eure…

kafka-zookeeper集群架构可视化监控,Kafka-Eagle安装部署

1、简介 在 kafka-zookeeper 集群架构下&#xff0c;zookeeper 管理 kafka 的元数据信息&#xff0c;如何监控这些信息&#xff0c;并且能够直观查看和管理 kafka 一些具体 主题、分区等参数信息&#xff0c;是非常便于开发的&#xff0c;因此 Kafka-Eagle 是一个为监控 kafka …

基于机器视觉的车牌检测-边缘检测因子的选择

车牌检测概述 车牌识别在检测报警、汽车出入登记、交通违法违章以及移动电子警察方面应用广泛。车牌识别过程为&#xff1a;首先通过摄像头获取包含车牌的彩色图像&#xff1b;然后进行车牌边缘检测&#xff0c;先粗略定位到车牌位置&#xff0c;再精细定位&#xff1b;最后根…

[AutoSar]基础部分 RTE 05 Port的实例化和初始化

目录 关键词平台说明一、端口类型二、端口的实例化2.1 创建application port2.2 实例化 三、初始化 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、端口类型 如下图所示&am…

MvvmToolkit的使用

背景&#xff1a;MvvmLight不更新了&#xff0c;用Toolkit代替 1、首先下载好社区版本的NuGet包 2、ViewModel中需要继承ObservableObject&#xff0c;查看ObservableObject可以看到里面有实现好InotifyPropertyChanged。 3、对于属性的set&#xff0c;可以简写成一行&#xff…

鸿蒙应用开发 闹钟实现

后台代理提醒简介 随着生活节奏的加快&#xff0c;我们有时会忘记一些重要的事情或日子&#xff0c;所以提醒功能必不可少。应用可能需要在指定的时刻&#xff0c;向用户发送一些业务提醒通知。例如购物类应用&#xff0c;希望在指定时间点提醒用户有优惠活动。为满足此类业务…

PTA——L2-041 插松枝(25分、模拟题)

文章目录 一、题目二、题解1.基本思路&#xff1a; 一、题目 人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上&#xff0c;做成大大小小的松枝。他们的工作流程&#xff08;并不&#xff09;是这样的&#xff1a; 每人手边有一只小盒子&#xff0c;初始状态为空。…

C++与数据库MySQL锁——模拟订票(事务)

假设订票的时候&#xff0c;好几个人同时进入&#xff0c;查看这张票是否售出&#xff0c;假如同时购买了这张票&#xff0c;那对于售票行业来说&#xff0c;可能就会发生低级错误。那么如何避免这类事情发生呢&#xff1f; 解决办法&#xff1a; 在一个人访问的时候&#xf…

HCIA-Datacom题库(自己整理分类的)_11_其他网络协议单选【9道题】

1.DNS协议的主要作用是&#xff1f; 文件传输 远程接入 域名解析 邮件传输 2.下列属于链路状态协议的是? Direct static FTP OSPF 解析&#xff1a; FTP&#xff1a;文件传输协议 OSPF&#xff1a;链路状态路由协议 3.如下图所示的网络主机A通过Telnet登录到路由…

Hystrix熔断/断路器

简介 Hystrix是一个用于处理分布式系统的延迟和容错的开源库&#xff0c;在分布式系统里&#xff0c;许多依赖不可避免的会调用失败&#xff0c;比如超时、异常等&#xff0c;Hystrix能够保证在一个依赖出问题的情况下&#xff0c;不会导致整体服务失败&#xff0c;避免级联故…

MyBatisPlus学习一:快速入门

前言 前面快速学习了Mybatis&#xff0c;现在开始快速学习MyBatisPlus 学习教程&#xff1a; 黑马mybatis教程全套视频教程&#xff0c;2天Mybatis框架从入门到精通 黑马程序员最新MybatisPlus全套视频教程&#xff0c;4小时快速精通mybatis-plus框架 简介 MyBatisPlus 是…

提升软件质量与效率:UI自动化测试的重要性

在软件开发领域&#xff0c;UI自动化测试工具被广泛应用&#xff0c;其意义不仅仅体现在节省时间和资源上&#xff0c;更关系到软件质量的提升、团队效率的增加&#xff0c;以及用户体验的改善。本文将探讨使用UI自动化测试工具的重要性&#xff0c;以及它在软件开发生命周期中…

【基础工具篇使用】VScode 远程 Ubuntu 系统 进行使用

文章目录 准备条件使用步骤step1&#xff1a; 打开远程窗口step2&#xff1a;选择中的红色框“Connect to Host”功能Step3: 根据图中的红色框提示信息输入远程电脑的用户名和 IP 地址&#xff0c;输入如下命令即可连接&#xff1a; 显示效果 准备条件 我们可以使用 vscode 的…

【idea】解决sprintboot项目创建遇到的问题2

本篇是继【idea】解决sprintboot项目创建遇到的问题_java.lang.illegalargumentexception: unable to inst-CSDN博客 目录 一、Dependency com.mysql:mysql-connector-j: not found 二、Could not find artifact org.springframework.boot:spring-boot-maven-plugin:pom:4.0…

LCD—液晶显示

本节主要介绍以下内容 显示器简介 液晶控制原理 秉火3.2寸液晶屏简介 使用FSMC模拟8080时序 NOR FLASH时序结构体 FSMC初始化结构体 一、显示器简介 显示器属于计算机的I/O设备&#xff0c;即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。…

linux创建pyspark虚拟环境

一、创建虚拟环境 conda create -n test python3.6.6 二、注意添加镜像 vi /root/.condarc channels:- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/- http://mirrors.ustc.edu.cn/anaconda/pkgs/ma…

【AI视野·今日NLP 自然语言处理论文速览 第六十九期】Wed, 3 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Wed, 3 Jan 2024 Totally 24 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers An Autoregressive Text-to-Graph Framework for Joint Entity and Relation Extraction Authors Zaratiana Ur…

STM32_HAL Freertos按键控制LED

设置GPIO引脚 根据电路图&#xff0c;K0为用户按键&#xff0c;连接在PA0引脚&#xff0c;当K0按下时接地&#xff0c;引脚电平低电平。在CubeMX中设置PA0&#xff0c;将IO设置为输入&#xff0c;上拉&#xff08;上拉外部悬空时&#xff0c;引脚为高电平&#xff09;。 添…

大学物理实验重点——交直流电桥

直流电桥 惠斯通电桥 平衡条件&#xff1a; 非平衡电桥 为了测量的准确性&#xff0c;在测量的起始点&#xff0c;电桥必须调至平衡&#xff08;&#xff09;&#xff0c;称为预调平衡。这样可使输出只与某一臂电阻变化有关。 平衡时 若 R1、 R2 、 R3 固定&#xff0c; R4 为…

美食管理与推荐系统Python+Django网站系统+协同过滤推荐算法【计算机课设】

一、介绍 美食管理与推荐系统。本系统使用Python作为主要开发语言开发的一个美食管理推荐网站平台。 网站前端界面采用HTML、CSS、BootStrap等技术搭建界面。后端采用Django框架处理用户的逻辑请求&#xff0c;并将用户的相关行为数据保存在数据库中。通过Ajax技术实现前后端的…