了解CSS特殊性的含义及其重要性
当一个元素受到影响相同属性的具有不同选择器的多个规则作为目标时,会发生什么?
例如,让我们谈谈这个元素:
<p class="dog-name">Roger</p>
我们可以有
.dog-name {
color: yellow;
}
另一个针对的规则p
,它将颜色设置为另一个值:
p {
color: red;
}
另一个针对的规则p.dog-name
。哪个规则将优先于其他规则,为什么?
输入特异性。更具体的规则将获胜。如果两个或多个规则具有同样的特异性,最后出现的那个胜。
有时,实践中更具体的内容会使初学者有些困惑。我想说的是,那些不经常查看或忽略这些规则的专家也会感到困惑。
如何计算特异性
特异性是使用惯例计算的。
我们有4个插槽,每个插槽都从0开始:0 0 0 0
。左侧的插槽最重要,最右侧的插槽最不重要。
就像它适用于十进制系统中的数字一样:1 0 0 0
高于0 1 0 0
。
Slot 1
第一个插槽,最右边的插槽,最不重要。
当我们有一个类型选择器。类型是标签名称。如果规则中有多个类型选择器,则相应地增加此插槽中存储的值。
例子:
p {
} /* 0 0 0 1 */
span {
} /* 0 0 0 1 */
p span {
} /* 0 0 0 2 */
p > span {
} /* 0 0 0 2 */
div p > span {
} /* 0 0 0 3 */
Slot 2
第二个插槽增加3个位:
- 类选择器
- 伪类选择器
- 属性选择器
每当规则满足其中一个条件时,我们就会从右边开始增加第二列的值。
例子:
.name {
} /* 0 0 1 0 */
.users .name {
} /* 0 0 2 0 */
[href$='.pdf'] {
} /* 0 0 1 0 */
:hover {
} /* 0 0 1 0 */
当然,插槽2选择器可以与插槽1选择器结合使用:
div .name {
} /* 0 0 1 1 */
a[href$='.pdf'] {
} /* 0 0 1 1 */
.pictures img:hover {
} /* 0 0 2 1 */
类的一个不错的窍门是,您可以重复相同的类并提高特异性。例如:
.name {
} /* 0 0 1 0 */
.name.name {
} /* 0 0 2 0 */
.name.name.name {
} /* 0 0 3 0 */
Slot 3
广告位3在CSS文件中包含可能影响CSS特异性的最重要的内容:id
。
每个元素都可以有一个id
属性已分配,我们可以在样式表中使用该属性来定位元素。
例子:
#name {
} /* 0 1 0 0 */
.user #name {
} /* 0 1 1 0 */
#name span {
} /* 0 1 0 1 */
Slot 4
广告位4受内联样式的影响。任何内联样式将优先于外部CSS文件或内部CSS文件中定义的任何规则。style
标签在页面标题中。
例子:
<p style="color: red">Test</p> /* 1 0 0 0 */
即使CSS中的其他任何规则定义了颜色,也将应用此内联样式规则。除了一种情况-如果!important
is used, which fills the slot 5.
重要性
规则的结尾是否具体无所谓!important
:
p {
font-size: 20px !important;
}
该规则将优先于任何更具体的规则
新增中!important
根据特定性规则,CSS规则中的规则将使该规则比其他任何规则都更加重要。另一个规则可以优先的唯一方法是!important
同样,并且在其他不太重要的广告位中具有更高的特异性。
尖端
通常,您应该使用所需的特异性,但不能更多。这样,您可以精心制作其他选择器以覆盖之前的规则设置的规则,而不会发疯。
!important
CSS为我们提供了一个备受争议的工具。许多CSS专家主张不要使用它。我发现自己正在使用它,尤其是在尝试某些样式时,并且CSS规则具有太多的特殊性,因此我需要使用!important
使浏览器应用我的新CSS。
但是一般来说!important
在您的CSS文件中应该没有位置。
使用id
样式CSS的属性也有很多争议,因为它具有很高的特异性。一个好的替代方法是使用类,因为它们的特异性较低,因此更易于使用,并且功能更强大(您可以为一个元素使用多个类,并且一个类可以多次重用)。
计算特异性的工具
您可以使用该网站https://specificity.keegan.st/自动为您执行特异性计算。
这特别有用,特别是在您尝试解决问题时,因为它可能是一个不错的反馈工具。
免费下载我的CSS手册
更多CSS教程:
- Flexbox指南
- CSS网格教程
- CSS变量(自定义属性)
- PostCSS简介
- CSS保证金属性
- 如何使用CSS将元素居中
- CSS系统字体
- 如何使用样式打印HTML
- CSS过渡入门指南
- CSS动画教程
- CSS简介
- CSS指南
- 如何使用PurgeCSS和PostCSS设置Tailwind
- 尾风备忘单
- 如何使用CSS连续旋转图像
- 使用CSS使表响应
- 如何通过二等分来调试CSS
- CSS选择器
- CSS级联
- CSS特异性
- CSS属性选择器
- CSS颜色
- CSS单位
- CSS url()
- CSS排版
- CSS Box模型
- CSS位置属性
- CSS媒体查询和响应式设计
- CSS功能查询
- CSS转换
- 如何使用CSS设置列表样式
- CSS供应商前缀
- CSS继承
- CSS伪类
- CSS伪元素
- 用CSS样式化HTML表
- CSS Display属性
- CSS calc()函数
- CSS边框
- 使用@import导入CSS文件
- CSS错误处理
- CSS过滤器
- CSS Box大小
- CSS背景
- CSS注释
- CSS字体
- CSS填充
- CSS float属性和清除
- CSS规范化
- CSS z-index属性
- 如何使用CSS禁用文本选择
- 如何使用CSS将项目放在其容器的底部
- 如何使用CSS反转颜色
- CSS中的响应式前置标签
- 自适应YouTube视频嵌入
- 响应式设计的良好CSS断点值是多少?
- 如何在Flexbox中对齐中心