权重
CSS
样式是一种层叠样式表(一个元素上可以有多个样式),如果多个样式之间没有规则冲突,所有设置的样式都可以生效,但是如果存在了样式冲突,我们最后到底要使用那部分的样式,就需要通过权重来进行确定,权重控制样式的优先级
<body>
<span class="fontclass">jlc</span>
</body>
<style>
/*设置span标签的样式字体颜色为红色*/
span {
color: red;
}
/*通过类选择器设置字体颜色为绿色*/
.fontclass {
color: green;
}
</style>
上述例子中,存在多个样式之间的冲突,最后会执行的是class
中的类样式,即字体显示的颜色为绿色,因为在系统默认中,类样式的权重比分组选择器的样式权重要高(在系统中权重位值越大,对应的权重就越高),系统中常见的权重编号有:
id
的权重位是0100class
,类属性值的权重位是0010- 标签,伪元素的权重位是0001
- *的权重位是0000
- 行内样式的权重位是1000(行级选择器的权重是最高的)但是行级选择器这个方法不建议去使用,因为后续可能会出现样式的冲突问题,行级样式的方式不建议去使用
对于权重是一样的样式(如一个标签中使用多个类选择器,多个类中存在样式的冲突)
<body>
<span class="fontclass dateclass">jlc</span>
</body>
<style>
/*设置span标签的样式字体颜色为红色*/
.dateclass {
color: red;
}
/*通过类选择器设置字体颜色为绿色*/
.fontclass {
color: green;
}
</style>
对于这样的情况,在<style>
样式编写区域,哪个样式是后出现的,就使用哪个样式,上述例子中,使用的是fontclass
这样式
权重的叠加
我们可以通过权重的叠加来实现优先级的提高
<body>
<span class="fontclass dateclass">jlc</span>
</body>
<style>
/*权重叠加,权重位是11,实现的是其内部的样式,标签字体显示红色*/
span .dateclass {
color: red;
}
.fontclass {
color: green;
}
</style>
span标签的权重为0001,类选择器的权重为0010,叠加后的权重为0011,大于类选择器
fontclass
的权重,所以,最后字体显示的样式为红色我们可以对
fontclass
属性选择器进行属性权重的叠加,是其权重变成20css.fontclass[class] { color: green; }
强制提升权重优先级
在权重优先级中,行级样式的权重是最高的,一但当前标签设置了行级样式,其他一切选择器的冲突样式都会失效,但是,我们如果想要低优先级的样式进行生效,我们可以使用强制去提示权重的优先级,直接将该样式的优先级提升到最高
.fontclass[class] {
color: green !important;
}
强制提升权重优先级这个方法,我们一般情况下是不推荐使用的,因为他后破坏CSS
的规则,但是有些场景我们必须要进行使用:我们使用外置组件库时(element-plus
),我们有时想要替换到外置组件原来的样式,我们一般会使用强制的优先级替换原本的样式
继承
CSS
样式规则的继承:如果我们的某个元素没有定义样式规则,当该元素的父级元素定义了,那么这个元素的样式就会继承父级元素定义的样式
<body>
<article>
<div>jlc</div>
</article>
</body>
<style>
article {
color: red;
}
</style>
<div>jlc</div>
标签没有设置样式,所以会继承父级的样式,因此字体颜色是红色的
注意:继承没有权重,如果子元素定义了任何的样式规则,都会在子元素上进行生效,断开父元素的继承
一般情况下,我们需要将网页当中大部分元素会应用到的场景,会在父元素中设置统一的样式(如字体大小,颜色等等),但是,有一些的属性是不会被继承的,如:边框,如果子元素需要边框,必须在子元素下进行设置边框样式
通配符与继承
通配符的权重是0000,继承的权重是无,0权重和无权重不是相等的,0权重大于无权重
<body>
<article>
<h2>
jlc
<span>111</span>
</h2>
</article>
</body>
<style>
* {
color: green;
}
h2 {
color: red;
}
</style>
上述例子中:
jlc
是显示红色的,111
是显示绿色的因为
<span>111</span>
标签没有设置自己的样式,所以会去继承h2
标签的样式,但是又存在通配符*
的所有标签的样式,其权重为0,大于继承的权重无,所有其内容会显示绿色