CSS属性的计算过程和层叠规则总结

✨ 专栏介绍

HTML/CSS专栏合集是一个涵盖HTML和CSS两个方面的栏目。HTML是一种标记语言,用于创建网页的结构和内容,而CSS是一种样式表语言,用于控制网页的外观和布局。

在HTML/CSS专栏合集中,我们将深入探讨HTML和CSS的基础知识和高级技术。我们将介绍HTML的标签、元素和属性,以及如何使用它们来构建网页结构。同时,我们还将讨论CSS的选择器、属性和样式规则,以及如何使用它们来美化网页并实现各种布局效果。

通过阅读HTML/CSS专栏合集,您将学习如何创建语义化的HTML结构、优化网页性能、响应式设计、动画效果等。我们还将分享一些实用的技巧和最佳实践,帮助您提高编写高质量HTML/CSS代码的能力。

在这里插入图片描述

文章目录

    • ✨ 专栏介绍
    • CSS属性的计算过程
      • 确定声明值
      • 层叠冲突
      • 使用继承
      • 使用默认值
    • CSS的层叠规则
      • 1. 重要性(Importance)
      • 2. 专用性(Specificity)
      • 3. 源代码次序(Source Order)
    • CSS伪类书写顺序
    • 😶 写在结尾


CSS属性的计算过程

总的来讲,属性值的计算方法有下面 4 种,这也是属性值的计算顺序:

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

确定声明值

在CSS中,可以通过选择器来选择要应用样式的元素,然后通过声明来设置样式。当多个选择器选择同一个元素时,会根据优先级来确定最终的声明值。优先级由高到低分别是:

!important > 行内样式 > ID选择器 > 类选择器/属性选择器/伪类选择器 > 元素选择器/伪元素选择器。

如果优先级相同,则后面的声明会覆盖前面的声明。

举例说明:

<style>p {color: blue;}.highlight {color: red;}
</style>
<p class="highlight">Hello, World!</p>

在上面的例子中,p元素同时被p选择器和.highlight类选择器选中,但是.highlight类选择器具有更高的优先级,所以最终p元素的颜色为红色。

层叠冲突

当多个样式规则具有相同的优先级时,就会发生层叠冲突。层叠冲突可以通过以下几个因素来解决:重要性、特殊性和源代码顺序。

  • 重要性:可以使用!important声明来提高样式规则的优先级。具有!important声明的样式规则将覆盖其他具有相同优先级的样式规则。

  • 特殊性:特殊性是根据选择器的组合来计算的。选择器中包含的ID选择器的数量越多,特殊性越高。特殊性相同的情况下,后面出现的样式规则将覆盖前面出现的样式规则。

  • 源代码顺序:如果两个样式规则具有相同的优先级和特殊性,则后面出现的样式规则将覆盖前面出现的样式规则。

举例说明:

<style>p {color: blue;}p {color: red;}
</style>
<p>Hello, World!</p>

在上面的例子中,两个p选择器具有相同的优先级和特殊性,但是后面出现的样式规则会覆盖前面出现的样式规则,所以最终p元素的颜色为红色。

使用继承

有些属性可以从父元素继承其值。这些属性被称为可继承属性。如果一个元素没有设置某个可继承属性,那么它将从其父元素继承该属性值。

举例说明:

<style>div {font-size: 20px;}
</style>
<div><p>Hello, World!</p>
</div>

在上面的例子中,div元素设置了字体大小为20px,而p元素没有设置字体大小,所以p元素会从其父元素div继承字体大小为20px。

使用默认值

最终,如果没有自定义样式,该属性值也无法继承而来,则会使用浏览器的默认样式。

在这里插入图片描述

CSS的层叠规则

CSS的层叠规则是用来解决当多个样式规则具有相同优先级时的冲突问题。层叠规则包括重要性、专用性和源代码次序。

1. 重要性(Importance)

通过使用!important声明可以提高样式规则的优先级。具有!important声明的样式规则将覆盖其他具有相同优先级的样式规则。

举例说明:

<style>p {color: blue !important;}p {color: red;}
</style>
<p>Hello, World!</p>

在上面的例子中,p元素同时被两个p选择器选中,但是第一个p选择器具有!important声明,所以最终p元素的颜色为蓝色。

2. 专用性(Specificity)

专用性是根据选择器的组合来计算的。选择器中包含的ID选择器的数量越多,专用性越高。如果两个样式规则具有相同优先级和重要性,则根据专用性来决定哪个样式规则应用。

举例说明:

<style>p {color: blue;}#myId {color: red;}
</style>
<p id="myId">Hello, World!</p>

在上面的例子中,p元素同时被p选择器和#myId选择器选中,但是#myId选择器具有更高的专用性,所以最终p元素的颜色为红色。

3. 源代码次序(Source Order)

如果两个样式规则具有相同优先级、重要性和专用性,则后面出现的样式规则将覆盖前面出现的样式规则。

举例说明:

<style>p {color: blue;}p {color: red;}
</style>
<p>Hello, World!</p>

在上面的例子中,两个p选择器具有相同的优先级、重要性和专用性,但是后面出现的样式规则会覆盖前面出现的样式规则,所以最终p元素的颜色为红色。

通过这些层叠规则,可以解决多个样式规则冲突时的优先级问题。

CSS伪类书写顺序

在CSS中,伪类(pseudo-class)和伪元素(pseudo-element)是用来选择元素的特殊关键词。其中,:active:hover等是常见的伪类选择器,用于在特定状态下应用样式。这些伪类选择器的顺序是有意义的,因为它们按照特定的顺序进行匹配和应用样式。

当用户与页面上的链接进行交互时,链接会经历不同的状态。例如,当用户点击链接时,链接处于活动状态(:active),当鼠标悬停在链接上时,链接处于悬停状态(:hover)。这些状态是按照特定顺序发生的::link -> :visited -> :hover -> :active

因此,在书写CSS样式时,按照这个顺序来书写伪类选择器可以确保样式正确地应用到对应的状态下。如果顺序不正确,则可能导致某些样式无法生效或者产生意外效果。

举个例子:

a:link {color: blue;
}a:hover {color: red;
}a:active {color: green;
}

在上面的例子中,首先定义了默认状态下链接的颜色为蓝色(:link),然后定义了鼠标悬停时链接的颜色为红色(:hover),最后定义了点击链接时链接的颜色为绿色(:active)。按照这个顺序书写可以确保链接在不同状态下显示正确的颜色。

从原理角度来讲,需要按照顺序书写伪类选择器是因为伪类选择器的匹配是从左到右的。当浏览器解析CSS样式时,会按照选择器的顺序逐个匹配元素,并应用相应的样式。

考虑以下示例:

a:active {color: green;
}
a:hover {color: red;
}

在这个例子中,如果将:hover放在:active之前,那么在链接处于活动状态时(即被点击时),:hover的样式将会覆盖:active的样式。这是因为浏览器首先匹配到:hover,然后再匹配到:active。由于:hover出现在前面,所以它的样式优先生效。

而如果按照正确的顺序书写:

a:hover {color: red;
}
a:active {color: green;
}

在这个例子中,当链接被点击时,首先匹配到:hover,但是由于此时链接处于活动状态(即被点击),所以:active的样式会覆盖:hover的样式。这样就能确保链接在不同状态下显示正确的颜色。 因此,按照顺序书写伪类选择器可以确保浏览器按照预期方式匹配和应用样式,并避免意外结果。


😶 写在结尾

前端设计模式专栏
在这里插入图片描述
设计模式是软件开发中不可或缺的一部分,它们帮助我们解决了许多常见问题,并提供了一种优雅而可靠的方式来构建应用程序。在本专栏中,我们介绍了所有的前端设计模式,包括观察者模式、单例模式、策略模式等等。通过学习这些设计模式,并将其应用于实际项目中,我们可以提高代码的可维护性、可扩展性和可重用性。希望这个专栏能够帮助你在前端开发中更好地应用设计模式,写出高质量的代码。点击订阅前端设计模式专栏

Vue专栏
在这里插入图片描述
Vue.js是一款流行的JavaScript框架,用于构建用户界面。它采用了MVVM(Model-View-ViewModel)的架构模式,通过数据驱动和组件化的方式,使开发者能够更轻松地构建交互性强、可复用的Web应用程序。在这个专栏中,我们将深入探讨Vue.js的核心概念、组件开发、状态管理、路由和性能优化等方面的知识。我们将学习如何使用Vue.js构建响应式的用户界面,并探索其强大的生态系统,如Vue Router和Vuex、Pinia。通过学习这些内容,你将能够成为一名熟练的Vue.js开发者,并能够应用这些知识来构建复杂而高效的Web应用程序。点击订阅Vue专栏

JavaScript(ES6)专栏在这里插入图片描述
JavaScript是一种广泛应用于网页开发和后端开发的脚本语言。它具有动态性、灵活性和易学性的特点,是构建现代Web应用程序的重要工具之一。在这个专栏中,我们将深入探讨JavaScript语言的基本语法、DOM操作、事件处理、异步编程以及常见算法和数据结构等内容。此外,我们还将介绍ES6(ECMAScript 2015)及其后续版本中引入的新特性,如箭头函数、模块化、解构赋值等。通过学习这些内容,你将能够成为一名熟练的JavaScript开发者,并能够应用这些知识来构建出高质量和可维护的Web应用程序。点击订阅JavaScript(ES6)专栏

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

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

相关文章

汽车架构解析:python cantools库快速解析arxml

文章目录 前言一、安装cantools二、官方说明文档三、cantools方法1、解析message的属性2、解析pdu中的signals3、根据message查找signals4、报文组成bytes 总结 前言 曾经有拿cantools来解析过dbc&#xff0c;用得比较浅&#xff0c;不知道可以用来解析arxml。最近有个需求需要…

【纯java代码实现字符串运算符或公式计算,支持函数,不借助第三方依赖、工具】

纯java代码实现字符串运算符或公式计算&#xff0c;支持函数&#xff0c;不借助第三方依赖和工具 效果图代码 效果图 代码 import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import…

在 Oracle 数据库表中加载多个数据文件

在本文中&#xff0c;我将展示 SQL 加载器 Unix 脚本实用程序的强大功能&#xff0c;其中 SQL 加载器可以使用自动 shell 脚本加载多个数据文件。这在处理大量数据以及需要将数据从一个系统移动到另一个系统时非常有用。 它适合涉及大量历史数据的迁移项目。那么就不可能为每…

Elasticsearch:带有自查询检索器的聊天机器人示例

本工作簿演示了 Elasticsearch 的自查询检索器 (self-query retriever) 将问题转换为结构化查询并将结构化查询应用于 Elasticsearch 索引的示例。 在开始之前&#xff0c;我们首先使用 langchain 将文档分割成块&#xff0c;然后使用 ElasticsearchStore.from_documents 创建…

企业微信开发:自建应用:接收消息(企业内部服务器)/回调配置

概述 在企业微信的自建应用中&#xff0c;用户触发了某些行为&#xff08;发送消息、进行菜单操作或者外部联系人变更等&#xff09;&#xff0c;要发送相关信息给企业内部服务器。 备注&#xff1a;接收消息 和 回调&#xff0c;在本文中指代相同的行为&#xff0c;即企业微信…

Jenkins部署项目

一.安装jenkins 1.1进入jenkins官网下载jenkins war包&#xff0c;上传到服务器/usr/local目录。 1.2执行启动jenkins命令&#xff0c;&#xff08;注意jenkins版本需要的jdk版本&#xff09; /usr/local/java11/bin/java -Djava.awt.headlesstrue -jar /usr/local/jenkins.wa…

使用sdf文件+urdf文件模拟机器人示例(不用把urdf转sdf)

gazebo版本&#xff1a;harmonic&#xff1b; <launch> <group> <let name"robot_description" value"$(command xacro $(find-pkg-share gazebo_pkg)/urdf/total.xacro)"/> <node pkg"rviz2" exec"rviz2" name…

[讲座] - 闲聊工业设计

1&#xff0c;工业设计相关的学科分类 2&#xff0c;工业设计的职业发展路线 3&#xff0c;工业设计师的成名人物 4&#xff0c;设计了可口可乐的Loewy 可口可乐的瓶子&#xff0c;无论白天晚上还是瓶子被打碎&#xff0c;都能认出这个是可口可乐的瓶子。 草图参照了可可豆&am…

深度生成模型之GAN优化目标设计与改进 ->(个人学习记录笔记)

文章目录 深度生成模型之GAN优化目标设计与改进原始GAN优化目标的问题1. JS散度度量问题2. 梯度问题 优化目标的设计与改进1. 最小二乘损失GAN2. Energy-based GAN(EBGAN)3. Wasserstein GAN4. WGAN-GP5. Boundary Equilibrium GAN(BEGAN)6. Loss Sensitive GAN7. Relativeisti…

Cuk、Zeta和Sepic开关电源拓扑结构

Cuk、Zeta和Sepic变换器,三种拓扑结构大致类似。不同点在于电感和二极管&#xff0c;MOS管的位置关系的变化。 Cuk电源是一种非隔离的直流电源转换器&#xff0c;其基本结构包括输入滤波电容、开关管、输入电感、输出电感和输出电容等元件。Cuk电路可以看作是Boost和Buck电路的…

基于双闭环PI和SVPWM的PMSM控制器simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 双闭环PI控制器设计 4.2 SVPWM技术 4.3 控制系统实现 5.完整工程文件 1.课题概述 基于双闭环PI和SVPWM的PMSM控制器simulink建模与仿真。系统包括逆变桥、PMSM、park变换、clark变换、SVPWM、PI控…

解决电脑访问共享文件问题:“无法访问。你可能没有权限使用网络资源。请与这台服务器的......”

文章目录 1. 问题2. 解决方法 1. 问题 2. 解决方法 Win R 键入 gpedit.msc在弹出的窗口,展开左侧目录树至安全选项,如图。( 计算机配置-Windows设置:安全设置-本地策略-安全选项)

2023我的编程之路

你的编程学习经历和成长过程&#xff1a; 在我探索编程世界的旅程中&#xff0c;我深刻地认识到&#xff0c;编程不仅仅是一种技术&#xff0c; 是一种思维方式&#xff0c; 一种解决问题的方法。希望通过分享我的编程学习体验&#xff0c;能够启发更多的人看到编程的魅力和价值…

克隆clone github上某个项目的子目录

有时会遇到只需要克隆github某个项目的子目录&#xff0c;此时可以使用以下方法实现&#xff1a; 需求示例&#xff1a; 现需要克隆&#xff1a;https://github.com/SingleZombie/DL-Demos项目中的ddim项目 注&#xff1a;ddim项目的地址为&#xff1a;https://github.com/Sing…

lenovo联想小新Pro-13 2020 Intel IML版笔记本电脑(82DN)原装出厂Win10系统镜像

链接&#xff1a;https://pan.baidu.com/s/1bJpfXudYEC7MJ7qfjDYPdg?pwdjipj 提取码&#xff1a;jipj 原装出厂Windows10系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&a…

【ps】如何给人偶添加衣服

使用PS工具扣出人物 使用编辑-变形-操控变型 、

java spring boot 获取resource目录下的文档

主要代码 String filePath"templates/test.xls" ClassPathResource classPathResource new ClassPathResource(filePath); InputStream inputStream classPathResource.getInputStream();目录 主要目录存放再这 代码案例 public void downloadTemplate( HttpS…

数据库云平台新数科技完成B轮融资,打造全链路智能化数据库云平台

数据库云平台软件厂商「北京新数科技有限公司」&#xff08;以下简称「新数科技」&#xff09;已于2023年完成B1轮和B2轮融资&#xff0c;分别由渤海创富和彬复资本投资&#xff1b;义柏资本担任本轮融资独家财务顾问。 新数科技成立于2014年&#xff0c;当前产品矩阵包括数据库…

一起玩儿物联网人工智能小车(ESP32)——23. 变量与函数(一)

摘要&#xff1a;本文介绍变量和函数的基本知识 经过一个阶段的学习&#xff0c;大家对程序开发也有了一个初步的了解。这只能说是刚刚开始&#xff0c;所能实现的功能还非常的有限。接下来就是拓展一下大家的基本开发技能。 在前面的开发中&#xff0c;大家如果认真的练习并且…

模拟控制方式(PWM)

引言 PWM&#xff08;脉冲宽度调制&#xff09;是一种常见的模拟控制方式&#xff0c;通过调节脉冲宽度来控制功率输出的占空比&#xff0c;从而实现模拟信号的传输和控制。在许多领域中&#xff0c;PWM都得到了广泛的应用&#xff0c;如电机控制、LED调光、音频控制等。本文将…