前几天做百度的笔试题,第一题就是关于css优先级的,虽然知道一些规则,但碰上把各条规则相互组合就懵逼了,所以还是得来好好总结一下的。

首要原则

就两条:

优先级高的样式覆盖优先级低的样式

同一优先级的样式,后定义的覆盖先定义的,即后来居上

而至于样式的优先级如何确定,就是接下来要讨论的问题:

多重样式间的优先级

w3school给出的优先级顺序从低到高是:

浏览器缺省设置

外部样式表

内部样式表(位于

标签内部)

内联样式(在 HTML 元素内部)

但其实外部样式表若放在内部样式表后面其实是会覆盖内部样式表的,举个例子:

多重样式优先级

#box {

width: 100px;

height: 100px;

background-color: #000;

}

@import url(higher.css);

---highter.css

#box {

height: 200px;

}

---wider.css

#box {

width: 200px;

}

最终得到的是一个宽高都为200px的红色元素,很明显,内部样式被放在后面的外部样式覆盖了。所以我更倾向于认为外部样式表和内部样式表具有相同的优先级,结论如下:

浏览器缺省设置 < 外部样式表 = 内部样式表 < 内联样式

同一样式表内部的优先级

同一样式表内,样式的优先级主要是由选择器的权重和权重的累加决定的。

首先,参考这篇文章可知选择器的权重排序为:

1.通用选择器* 0-0-0

2.标签选择器,伪元素 0-0-1

3.类选择器,属性选择器,伪类 0-1-0

4.ID 选择器 1-0-0

而对于组合上面几种情况的选择器式而言,就需要将所有出现的权重进行相加,取相加后的结果作为权重,注意相加时:

不进位。因为每位权重间相差的数量级是很大的,在正常使用时不会出现低级选择器靠数量的累加提升为高级权重(虽然在某些情况下确实会发生,比如256个class选择器可以干掉1个id选择器。。。)

无视+,>,~等组合选择器的符号

not伪类不作为伪类计算权重,而是直接计算其参数的权重。比如下面的代码中not伪类的权重要高于类选择器:

not伪类的优先级

div:not(#box) {

width: 100px;

height: 100px;

background-color: #0f0;

}

div.box {

width: 100px;

height: 100px;

background-color: #f00;

}

除了选择器,样式自身还可以继承和提升优先级,规则如下:

从祖先元素继承来的样式优先级低于通用选择器;甚至低于浏览器的缺省设置,比如最常见的,重置链接的默认样式时必须写在链接元素上,放在祖先元素中是没有卵用滴

使用大杀器!important可将样式提升到最高等级,不管这个样式在哪个样式表或选择器中;如果在同一样式中出现了多个!important,就得看上面的权重规则进行pk了

是不是看起来有点晕,附上参考文章里的大鱼吃小鱼的图来辅助理解吧:

最终结论

结合上面的讨论,我们可以得出元素的最终样式是由什么决定的:

多重样式间遵循:继承来的样式 < 浏览器缺省设置 < 外部样式表 = 内部样式表 < 内联样式

而在同一样式表中存在:通用选择器* 0-0-0 < 标签选择器,伪元素 0-0-1 < 类选择器,属性选择器,伪类 0-1-0 < ID 选择器 1-0-0 << !important,其中对于组合选择器还要用上面提到的方法进行权重累加后才能判断

首要原则:高优先级覆盖低优先级,同一优先级则后来居上

最后,要知道了解样式的优先级,最重要的不是为了用来酷炫和装逼,而是能让我们写出更简洁高效的代码,保证在写代码时就知道一定会出来什么样式,而不是等到堆上一堆选择器后样式还出不来时,再一脸懵逼地去排查。

HTML样式表优先级最低的是,css的样式优先级相关推荐

  1. 外联样式表添加到html中,CSS联样式表之内联式、外联式和嵌入式

    CSS 全称级联样式表 (Cascading Style Sheets),在实际应用中,一般有以下三种级联方式. 1. 外联式 外联式样式表中,CSS 代码作为文件单独存放,如以 style.css ...

  2. CSS样式表引入的三种方式,及优先级顺序

    CSS样式表引入的三种方式,及优先级顺序 CSS可以通过三种方式引入样式表,三种方式分别是行内样式表,内部样式表和外部样式表. 行内样式表 通过给标签设定style属性 <body>< ...

  3. css网站样式表是什么,什么是css样式表

    css样式表指的是层叠样式表(Cascading Style Sheets),简称CSS,是一种用来表现HTML或XML等文件样式的计算机语言,是用来表示html样式的一种编程语言,是可以做到网页和内 ...

  4. 可构造样式表 - 通过javascript来生成css的新方式

    可构造样式表是一种使用Shadow DOM进行创建和分发可重用样式的新方法. 使用Javascript来创建样式表是可能的.然而,这个过程在历史上一直是使用document.createElement ...

  5. html中样式表的三种形式,CSS样式表有几种存在方式

    外部样式:将网页链接到外部样式表. 内页样式:在网页上创建嵌入的样式表. 行内标签样式:应用内嵌样式到各个网页元素标签内. 每一种方法均有其优缺点: 当要在站点上所有或部份的网页上一致地应用相同样式时 ...

  6. 在html中样式表的三种类型,css样式有哪几种类型?

    CSS样式可以写在哪些地方呢?从CSS 样式代码插入的形式来看基本可以分为以下3种:内联式.嵌入式和外部式三种.下面本篇文章就来给大家介绍一下CSS样式的类型,希望对大家有所帮助. 内联式样式 内联式 ...

  7. html中引入css样式表的三种方式,css引用的几种方式是什么?

    HTML怎么引用CSS样式?css引用的几种方式是什么?下面本篇文章就来给大家介绍一下在HTML中引用CSS样式的几种方法,希望对大家有所帮助. 1.行内式 在HTML标签中,使用style属性设置C ...

  8. html样式表三种类型包括,css样式有哪几种类型

    CSS样式有三种类型:1.行内样式(内嵌样式),使用style属性直接把CSS代码添加到HTML的标记中:2.内部样式(内联样式),把css样式写在style标签中:3.外部样式(外联样式),将css ...

  9. 样式表贴图定位(CSS Sprites):图像切片的死亡之吻

    <CSS Sprites: Image Slicing's Kiss of Death>是一篇旧文,于2004年3月5日发表于alistapart的第173期,作者是大名鼎鼎的CSS禅意花 ...

最新文章

  1. pytorch旧版安装
  2. 根据两点间的经纬度计算距离
  3. opencv 图像雾检测_OpenCV图像处理-基于OpenPose的关键点检测
  4. 关于计算机图形标准化的论述 哪个是正确的,地大《计算机图形学(新)》在线作业 参考资料...
  5. react native中一次错误排查 Error:Error: Duplicate resources
  6. jQuery弹出框示例
  7. 巧用Dictionary实现日志数据批量插入
  8. 关于dev无法更新、调试的问题
  9. LCFinder 0.3.0 Beta 发布,图像标注与目标检测工具
  10. 交换机接口用了那几根线_【网工必知】图集:交换机接口知识大全
  11. 数据清洗(根据元素匹配选取数据)
  12. 问号匹配,带元组规则的位置匹配不到
  13. HTML仿网易云音乐首页静态,用 Vue.js 模仿一个简单的网易云音乐
  14. 关于Demo3D中的Random
  15. 本草纲目pdf彩图版下载_本草纲目彩色图谱下载|本草纲目彩色图集(精编珍藏版) PDF电子版 - 天天游戏吧...
  16. MATLAB图形句柄
  17. 140套高清、超优秀的PPT模板----毕业设计、毕业答辩主题
  18. winedit使用教程_BCDEdit命令怎么使用?Win10下BCDEdit使用教程(包含常用参数命令)...
  19. 小米为什么不怕iPhone降价?
  20. TURN协议(RFC5766详解)

热门文章

  1. Neutron原理详解
  2. 忘记密码 (通过邮箱来进行重新设置密码)
  3. 图文并茂~ 详解交换机中的半双工与全双工网络知识
  4. 买白酒时,看清瓶身“这行字”,轻松分辨勾兑酒和纯粮酒
  5. 吃鸡用什么蓝牙耳机好?超低延迟专业游戏蓝牙耳机推荐
  6. 02 Hadoop概述
  7. 爬虫入门(一)——静态网页爬取:批量获取高清壁纸
  8. led屏背后线路安装图解_文登推荐led透明屏安装成本低_文笔峰装饰
  9. 怎样提高公司产品的知名度?
  10. 联想修复服务器系统还原,如何使用Windows恢复环境(Re)修复Windows 10系统