美文网首页饥人谷技术博客
CSS选择器的权重是如何抉择的?

CSS选择器的权重是如何抉择的?

作者: 寿木 | 来源:发表于2017-07-30 15:50 被阅读38次

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

一、选择器类型

1、元素选择器 Element Selectors

p {
color: red;
}
div {
color: blue;
}

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

2、ID选择器 ID Selectors

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

notification {
font-size: 24px;
}

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

3、类选择器 Class Selectors

<ul>
<li class="first done">起床</li>
<li class="second done">刷牙</li>
<li class="third">洗脸</li>
</ul>

.first {
font-weight: bold;
}
.done {
text-decoration: line-through;
}

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

4、通用选择器 Universal Selector

*{
box-sizing: border-box;
}
.flex-container * {
flex-basis: 100%;
}

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

5、属性选择器 Attribute Selectors

[disabled] {
cursor: not-allowed;
}

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

6、伪类 Pseudo-classes

a:link { ... }
a:visited { ... }
a:hover { ... }
a:active { ... }

li:first-child { ... }
li:last-child { ... }

body :not(p) { ... }
p:not(.warning) { ... }

这些特殊的类都是伪类。

7、伪元素 Pseudo-elements

::after
::before
::selection
::backdrop
::first-letter
::first-line
::-webkit-input-placeholder

8、组合选择器 Combinators

.author, .famous {
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

.players .player.curry, .player.mvp, #lebron-james {
background-image: url(../images/mvp.png);
}

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

二、权重计算规则

  1. 第一等:代表内联样式,如: style=””,权值为1000。
  2. 第二等:代表ID选择器,如:#content,权值为0100。
  3. 第三等:代表类,伪类和属性选择器,如.content,权值为0010。
  4. 第四等:代表类型选择器和伪元素选择器,如div p,权值为0001。
  5. 通配符、子选择器、相邻选择器等的。如*、>、+,权值为0000。
  6. 继承的样式没有权值。

三、比较规则

  1. 1,0,0,0 > 0,99,99,99。也就是说从左往右逐个等级比较,前一等级相等才往后比。
  2. 无论是行间、内部和外部样式,都是按照这个规则来进行比较。而不是直观的行间>内部>外部样式;ID>class>元素。之所以有这样的错觉,是因为确实行间为第一等的权重,所以它的权重是最高的。而内部样式可能一般写在了外部样式引用了之后,所以覆盖掉了之前的。
  3. 在权重相同的情况下,后面的样式会覆盖掉前面的样式。
  4. 通配符、子选择器、相邻选择器等的。虽然权值为0000,但是也比继承的样式优先。

四、!important

.better {
background-color: gray;
border: none !important;
}

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

理解选择器的特殊性很重要,特别是在修复bug的时候,因为你需要了解哪些规则优先及其原因。
如果你遇到了似乎没有起作用的CSS规则,很可能是出现了特殊性冲突。请在你的选择器中添加他的一个父元素的ID,从而提高它的特殊性。如果这能解决问题,就说明样式表中其他地方很可能有更特殊的规则,它覆盖了你的规则。如果是这种情况,你可能需要检查代码,解决特殊性冲突,让代码尽可能简洁。

相关文章

  • 归零——CSS-第四天

    CSS学习 CSS权重 选择器 权重...

  • CSS选择器的权重是如何抉择的?

    在解决这个问题之前我们先来看一下css选择器都有哪些。 一、选择器类型 1、元素选择器 Element Sele...

  • CSS权重

    这篇是基于CSS选择器的,如果对选择器不太了解可以先看另一篇CSS选择器 (一)什么是CSS权重? 权重决定了你C...

  • day31-总结(css布局)

    css中的布局 css选择器的权重 选择器的权重类型选择器(元素选择器):0001class选择器:0010id选...

  • css选择器权重

    css选择器权重示例: .html .css

  • CSS样式选择器权重 计算

    CSS样式选择器权重 计算

  • CSS选择器优先级及!important属性

    CSS的选择器是有权重的,当不同选择器的样式设置有冲突时,会采用权重高的选择器设置样式。权重(即优先级)的规则如下...

  • CSS选择器

    权重 根据不同的样式选择器,有不同的权重,而最终呈现的效果是根据选择器的权重和排列顺序确定的。css采用覆盖式渲染...

  • css问题整理(持续更新中...)

    1. css权重、优先级 权重 内联样式id选择器class、属性选择器(eg:[title]{ color:bl...

  • web前端重点内容

    布局、选择器、权重、盒模型、Hack、CSS预处理器,页面加载如何优化 Flexbox、Document flow...

网友评论

    本文标题:CSS选择器的权重是如何抉择的?

    本文链接:https://www.haomeiwen.com/subject/jryukxtx.html