CSS2中从优先权重的计算方式来辨别下CSS

CSS2 中,样式的优先权重是由选择器的特殊性(specificity)和源代码顺序(order)两者共同决定的。通过这个规则,我们可以区分不同优先级的 CSS 规则,并决定哪个样式优先应用。

选择器特殊性

每个选择器都有它自己的特殊性值,表示它的权重。特殊性值靠谱如下:

  • 选择器中每个 ID 值为一个数,即 0, 1, 0, 0
  • 选择器中每个 class 值或者属性选择器、伪类选择器都为十进制计数器加 1,即 0, 0, 2, 1
  • 选择器中每个元素和伪元素都为十进制计数器加 1,即 0, 0, 1, 0

越具体的选择器,它的特殊性就越高。例如,一个 ID 选择器的特殊性值要比一个类选择器的特殊性值高,因为 ID 选择器更加具体。

源代码顺序

如果两个样式规则具有相同的特殊性值,则先出现在 CSS 源代码中的样式表的规则优先。

例如,如果你在同一个 CSS 文件中写了以下 CSS 规则:

body {
  background-color: blue;
}

body {
  background-color: red;
}

则最终的背景颜色将是红色,因为红色的 background-color 规则出现在了后面。

优先级的计算方式

知道了选择器特殊性和源代码顺序的规则,我们就可以计算出样式的优先级了。假设我们需要决定以下三个样式的优先级:

body {
  background-color: yellow;
}

#container {
  background-color: green;
}

#container .inner {
  background-color: blue;
}

首先计算选择器的特殊性值。根据上面的规则,body 选择器的特殊性是 0, 0, 0, 1,#container 选择器的特殊性是 0, 1, 0, 0,#container .inner 选择器的特殊性是 0, 1, 0, 1。由此,我们可以得出以下优先级:

  • container .inner:0, 1, 0, 1

  • container:0, 1, 0, 0

  • body:0, 0, 0, 1

接下来,我们来比较源代码顺序。由于样式规则都在同一个文件中,因此我们只需要看样式规则的出现顺序。根据我们的例子,body 规则最先出现,因此它的优先级最低。而 #container 和 #container .inner 规则都在后面出现,因此它们的优先级要高于 body。最终的优先级如下:

  1. container .inner:0, 1, 0, 1

  2. container:0, 1, 0, 0

  3. body:0, 0, 0, 1

因此,在这个例子中,最终应用的背景色是蓝色,因为 #container .inner 的规则具有最高的优先级。

下面是另一个例子:

#container .red {
  color: red;
}

.blue {
  color: blue;
}

首先计算特殊性:

  • container .red:0, 1, 0, 1

  • .blue:0, 0, 1, 0

然后比较源代码顺序,因此 .blue 规则优先于 #container .red 规则,最终应用的文字颜色是蓝色。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CSS2中从优先权重的计算方式来辨别下CSS - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 使用Go module和GoLand初始化一个Go项目的方法

    当我们开始一个新的Go项目时,使用Go Module来管理依赖关系是一个很好的选择。Go Module帮助我们自动化地下载和管理项目中所需的包。 在GoLand中使用Go Module来初始化一个新项目有以下几个步骤: 步骤1:创建一个新的空白项目 在GoLand中,打开“File”菜单,选择“New Project”选项。在弹出的窗口中,选择“Empty …

    other 2023年6月20日
    00
  • proptypes使用

    当然,我很乐意为您提供有关“PropTypes使用”的完整攻略。以下是详细的步骤和两个示例: 1. 什么是PropTypes? PropTypes是React中的一个库,用于检查组件的属性是否符合预期。它可以帮助开发人员在开发过程中捕获错误,并提高代码的可维护性。 2. PropTypes使用 以下是使用PropTypes的步骤: 2.1 引入PropTyp…

    other 2023年5月6日
    00
  • vue中如何动态设置css样式的hover

    设置动态CSS样式的hover 在Vue中,我们可以使用计算属性和绑定样式对象的方式来动态设置CSS样式的hover效果。 步骤一:创建Vue实例 首先,我们需要创建一个Vue实例,并在data中定义一个布尔类型的变量,用于判断是否应用hover样式。示例代码如下: <template> <div :class="{ ‘hover…

    other 2023年6月28日
    00
  • Android studio实现app登录界面

    下面我来详细讲解”Android studio实现app登录界面”的完整攻略。主要分以下几个步骤。 1. 创建一个新项目 我们可以选择在Android Studio中创建一个新的项目,让它自动生成一个基本的项目模板,包括空的MainActivity类、样式文件等。当然,也可以选择导入一些现成的项目模板,以便更快速地开始我们的实现工作。 2. 设计登录界面UI…

    other 2023年6月27日
    00
  • MySQL 客户端不输入用户名和密码直接连接数据库的2个方法

    当我们使用 MySQL 客户端连接数据库时,一般需要输入数据库的用户名和密码。但是,有时候我们也可以通过其他方式连接数据库,不需要输入用户名和密码。以下是两种方法。 方法一:使用 MySQL 配置文件 MySQL 的配置文件位于 /etc/mysql/my.cnf 或者 /etc/mysql/mysql.conf.d/mysqld.cnf(不同操作系统可能会…

    other 2023年6月27日
    00
  • padstart方法

    padStart方法 padStart() 方法是 JavaScript 中用于在字符串前添加特定字符以达到指定长度的函数。 语法如下: str.padStart(targetLength [, padString]) 其中,targetLength 参数表示目标字符串的长度,padString 参数表示需要添加的字符,默认值为一个空格。 下面举个例子: c…

    其他 2023年3月28日
    00
  • 深入讲解iOS开发中的UIViewController

    当我们开始学习iOS开发时,UIViewController是必须掌握的基本概念之一。UIViewController被称为MVC(Model-View-Controller)架构模式的视图控制器部分,负责管理视图的展示和行为。 下面是深入讲解UIViewController的完整攻略和两个示例说明。 什么是UIViewController? UIViewC…

    other 2023年6月27日
    00
  • java开发读取嵌套jar包中的文件

    Java开发读取嵌套Jar包中的文件攻略 在Java开发中,有时候我们需要读取嵌套在Jar包中的文件。这些文件可能是配置文件、资源文件或者其他需要在运行时读取的文件。下面是一个详细的攻略,介绍如何在Java中读取嵌套Jar包中的文件。 步骤一:获取嵌套Jar包的输入流 首先,我们需要获取嵌套Jar包的输入流。可以使用ClassLoader类的getResou…

    other 2023年7月28日
    00
合作推广
合作推广
分享本页
返回顶部