page contents

为什么css的选择器具有权重

在解决这个问题之前我们先来看一下css选择器都有哪些。

attachments-2021-09-I9IJeFcZ614e76da13450.jpg

在解决这个问题之前我们先来看一下css选择器都有哪些。

一、选择器类型
1、元素选择器 Element Selectors
color: red;
}
div {
color: blue;
}
2、ID选择器 ID Selectors
font-size: 24px;
}
3、类选择器 Class Selectors
<li class="first done">起床</li>
<li class="second done">刷牙</li>
<li class="third">洗脸</li>
</ul>
font-weight: bold;
}
.done {
text-decoration: line-through;
}
4、通用选择器 Universal Selector
box-sizing: border-box;
}
.flex-container * {
flex-basis: 100%;
}
5、属性选择器 Attribute Selectors
cursor: not-allowed;
}
6、伪类 Pseudo-classes
a:visited { ... }
a:hover { ... }
a:active { ... }
li:last-child { ... }
p:not(.warning) { ... }
7、伪元素 Pseudo-elements
::before
::selection
::backdrop
::first-letter
::first-line
::-webkit-input-placeholder
8、组合选择器 Combinators
font-weight: bold;
}
.article a {
color: #384ebf;
}
.warriors > li {
background-image: url(../images/warrior.svg);
}
.cavs .lbj + li {
text-shadow: 1px 1px 5px #ccc;
}
.cavs .lbj ~ li {
text-shadow: 1px 1px 5px #ccc;
}
9、多个选择器 Multiple Selectors
background-image: url(../images/mvp.png);
}
二、权重计算规则

  1. 第一等:代表内联样式,如: style=””,权值为1000。
  1. 第二等:代表ID选择器,如:#content,权值为0100。
  1. 第三等:代表类,伪类和属性选择器,如.content,权值为0010。
  1. 第四等:代表类型选择器和伪元素选择器,如div p,权值为0001。
  1. 通配符、子选择器、相邻选择器等的。如*、>、+,权值为0000。
  1. 继承的样式没有权值。
三、比较规则
  1. 1,0,0,0 > 0,99,99,99。也就是说从左往右逐个等级比较,前一等级相等才往后比。
  1. 无论是行间、内部和外部样式,都是按照这个规则来进行比较。而不是直观的行间>内部>外部样式;ID>class>元素。之所以有这样的错觉,是因为确实行间为第一等的权重,所以它的权重是最高的。而内部样式可能一般写在了外部样式引用了之后,所以覆盖掉了之前的。
  1. 在权重相同的情况下,后面的样式会覆盖掉前面的样式。
  1. 通配符、子选择器、相邻选择器等的。虽然权值为0000,但是也比继承的样式优先。
四、!important
background-color: gray;
border: none !important;
}
如果你遇到了似乎没有起作用的CSS规则,很可能是出现了特殊性冲突。请在你的选择器中添加他的一个父元素的ID,从而提高它的特殊性。如果这能解决问题,就说明样式表中其他地方很可能有更特殊的规则,它覆盖了你的规则。如果是这种情况,你可能需要检查代码,解决特殊性冲突,让代码尽可能简洁。

p {

这样子对某一个元素进行赋予就是元素选择器。

<p id="notification">通知:明天放假</p>

notification {

这个给元素一个ID并对ID进行赋予的就是ID选择器。

<ul>

.first {

一个元素可以应用多个类,一个类也可以赋予给多个元素。

*{

这种使用 * 号来写的就是通用选择器,它是对全局进行赋予的。

[disabled] {

这种针对某一种特殊的属性进行赋予的是属性选择器。所有拥有这种属性的元素都会被赋予。

a:link { ... }

li:first-child { ... }

body :not(p) { ... }

这些特殊的类都是伪类。

::after

.author, .famous {

.players .player.curry, .player.mvp, #lebron-james {

一次性对多个标签进行赋予。

.better {

[!important] 大于任何的规则,所有的权重里面,它排名第一。(覆盖此!important声明的唯一方法是在源顺序中包含相同特异性的另一个!important声明。)

理解选择器的特殊性很重要,特别是在修复bug的时候,因为你需要了解哪些规则优先及其原因。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

程序员编程交流QQ群:805358732

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-BPiGmSWV62b009173f619.jpeg

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章