CSS样式优先级

影响css样式优先级的因素有如下几个:

  • 资源顺序
  • 优先级
  • 内联样式和!important

资源顺序(层叠)

简单的说,当应用两条同级别的规则到一个元素的时候,写在后面的就是实际使用的规则。

<style>
h1 { 
    color: red; 
}
h1 { 
    color: blue; 
}
</style>

<h1>This is my heading.</h1>

优先级

通常优先级从低到高为:类型选择器、伪元素 < 类选择器、属性选择器、伪类 < id选择器
一个选择器的优先级可以说是由三个不同的值(或分量)相加,可以认为是百(ID)十(类)个(元素)——三位数的三个位数:

  • ID:选择器中包含 ID 选择器则百位得一分。
  • 类:选择器中包含类选择器、属性选择器或者伪类则十位得一分。
  • 元素:选择器中包含元素、伪元素选择器则个位得一分。

我们来看最普通的一种情况

<style>
  /* 优先级:1-0-0 */
  p#title { color: yellow }
  /* 优先级:0-1-0 */
  p.title { color: blue }
  /* 优先级:0-0-1 */
  p { color: red }
</style>
<body>
  <!-- red  -->
  <p>title</p>
  <!--  blue -->
  <p class="title">title</p>
  <!-- yellow -->
  <p class="title" id="title">title</p>
</body>

而当选择器越具体,优先级越高

<style>
/* 优先级:0-2-0 */
.parent .child {
  color: red
}
/* 优先级:0-1-0 */
.child {
  color: blue
}
</style>
<body>
  <div class="parent">
    <!-- red -->
    <div class="child">text</div>
  </div>
</body>

但这里有个需要注意的点

<style>
/* 优先级:0-3-0 */
.child[title].active {
  color: green
}
/* 优先级:0-2-1 */
div.child.active {
  color: purple
}
/* 优先级:0-2-0 */
.child[title] {
  color: yellow
}
/* 优先级:0-2-0 */
.child.active {
  color: blue
}
/* 优先级:0-2-0 */
.parent .child {
  color: red
}
/* 优先级:0-2-0 */
.child:first-child {
  color: pink;
}
/* 优先级:0-2-0 */
.sibling + .child {
  color: black
}
</style>
<body>
  <div class="parent">
    <!-- green -->
    <div class="sibling" >sibling</div>
    <div class="child active" title="text" >text</div>
  </div>
</body>

上面权重最高的是1,其次是2,3~7的选择器的权重是相同的,所以根据层叠的规则,在没有1,2的情况下,生效的会是最后一个。

选择器的优先级跟dom的层级没有关系,不是越接近选择器结构的优先级越高

<style>
/* 优先级:0-3-0 */
.level1 .level2 .level5 {
  color: blue;
}
/* 优先级:0-2-0 */
.level4 .level5 {
  color: red;
}
</style>
<body>
  <div class="level1">
    <div class="level2">
      <div class="level3">
        <div class="level4">
          <!-- blue -->
          <div class="level5">text</div>
        </div>
      </div>
    </div>
  </div>
</body>

在上面的优先级计算规则中,有两个例外:is:not

还有一种情况的需要注意的,[id="foo"]虽然是选择了id属性,但是它还是作为一个属性选择器来计算自身的优先级。

另外,为目标元素直接添加样式,永远比继承样式的优先级高,无视优先级的遗传规则。

<style>
#parent {
  color: green;
}

h1 {
  color: purple;
}
</style>
<body>
<html>
  <body id="parent">
    <!-- purple -->
    <h1>Here is a title!</h1>
  </body>
</html>

</body>
内联样式

优先于所有普通的样式,可以理解为1-0-0-0

例外规则 !important

当在一个样式声明中使用一个 !important 规则时,此声明将覆盖任何其他声明。虽然,从技术上讲,!important 与优先级无关,但它与最终的结果直接相关。使用 !important 是一个坏习惯,应该尽量避免,因为这破坏了样式表中的固有的级联规则 使得调试找 bug 变得更加困难了。当两条相互冲突的带有 !important 规则的声明被应用到相同的元素上时,拥有更大优先级的声明将会被采用。

一些经验法则:

*. 一定要优先考虑使用样式规则的优先级来解决问题而不是 !important
*. 只有在需要覆盖全站或外部 CSS 的特定页面中使用 !important
*. 永远不要在你的插件中使用 !important
*. 永远不要在全站范围的 CSS 代码中使用 !important
*. 与其使用 !important,你可以:

  1. 更好地利用 CSS 级联属性
  2. 使用更具体的规则。在您选择的元素之前,增加一个或多个其他元素,使选择器变得更加具体,并获得更高的优先级。
<div id="test">
  <span>Text</span>
</div>
div#test span { color: green; }
div span { color: blue; }
span { color: red; }

无论 css 语句的顺序是什么样的,文本都会是绿色的(green),因为这一条规则是最有针对性、优先级最高的。(同理,无论语句顺序怎样,蓝色 blue 的规则都会覆盖红色 red 的规则)

  1. 对于(2)的一种特殊情况,当您无其他要指定的内容时,请复制简单的选择器以增加特异性。
#myId#myId span { color: yellow; }
.myClass.myClass span { color: orange; }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容

  • 优先级是浏览器是通过判断哪些属性值与元素最相关以决定并应用到该元素上的。优先级仅由选择器组成的匹配规则决定的。 优...
    枫叶cms阅读 221评论 0 0
  • title: CSS样式优先级icon: fa-css3date: 2017-11-03 15:08:25cate...
    tian田小旺阅读 259评论 0 0
  • 记录第一次面试——广州凡科(一) 2019.7.18完善简历的我去投递之后,过了两天吧,终于迎来了第一次面试。广州...
    haha2333阅读 410评论 0 0
  • 一、css样式的优先规则 1、最近的祖先样式比其他祖先样式优先级高。 2、"直接样式"比"祖先样式"优先级高。 二...
    一只小小小菜鸟阅读 141评论 0 0
  • CSS优先级是根据等级的值相加得出选择器的权重来决定的。 !important > 行内样式 > ID > 类、伪...
    limeilian阅读 1,540评论 0 0