在前端开发的时候,css构建样式规则,这个时候我们会遇到一个问题:当我们对同一个元素做多个样式规则,其中发生了冲突的时候,css是如何选择最终呈现的样式

如下:

            div{
color:red;
}
div.main{
color:blue;
}
div#main2{
color:green
} <body>
<div class="main" id="main2">
      ssss
</div>
</body>

最终这个“sss”会是什么颜色呢?这就却决于css选择器的特殊性:

特殊性的描述可分为四个部分:如:0,0,0,0

什么意思呢?这四个数字,是有优先级的,这就类似于nvidia的显卡

我们先做如下定义:

四个数字,按位比较,从左到右优先级依次降低,每一位数字越大,特殊性越大,特殊性越大,有冲突的选择器规则将被使用到最终效果

用于比较时候:

从左往右比较两个选择器的特殊性,比较按同位比,如果当前位上,选择器1大于选择器2,选择器1特殊性大;如果当前位上,选择器1小于选择器2,选择器2特殊性大;如果相等,跳过当前位,比较下一位,方法与当前位同理

举例:(由大到小的特殊性)

1,0,0,0>

0,2,0,0>

0,1,2,0>

0,0,3,0>

0,0,1,0>

0,0,0,1>0,0,0,0

请先理解上面的例子,后面我们使用这种方式描述特殊性

我们看到特殊性描述一共有4位数,就像数学里的千,百,十,个一样

第一位:内联样式

第二位:ID选择器(#main)

第三位:类选择器,属性选择器或伪类(.main 或 input[name=main] 或 a:hover li:first-child)

第四位:元素或伪元素(p,div,input等常用的元素,伪元素比如p:first-letter p:first-line)

通配符*(0,0,0,0)

空格什么都不算(0,0,0,0都谈不上,最小特殊性)对选择器特殊性没有任何影响

举例:

假设以下的选择器指向同一个元素,并且出现了矛盾

 h1{color:red;}    /**/
p em{color:silver;} /**/
.grape{color:purple;} /**/
*.bright{color:blue;} /**/
p.bright{color:green;} /**/
#id{color:black;} /**/
div#id{color:yellow;} /**/

很显然最后这个这个元素,是黄色(yellow),因为他的特殊性最大!

下一个,重要性!important,重要规则总会胜出

有时候某个声明可能非常重要,超过了所有其他声明,css2.1开始允许在声明“;”符号前使用important

p.light{
color:yellow !important;
font-size:200px !important;
}

必须在分号之前声明最后插入,哪一个规则需要强调,就加上这个!important

标志为!important的声明并没有特殊的特殊性值,不过要与非重要声明分开来考虑

如果一个重要声明和非重要声明起了冲突,重要的必定会胜利

css优先级之特殊性的更多相关文章

  1. css优先级计算规则

    原文:css优先级计算规则 最近面试了一些求职者,我问css优先级计算规则是怎样的?答曰ID优先级>class>元素选择器,外联样式优先级低于内联样式,内联样式优先级低于行间样式,然后就没 ...

  2. CSS优先级的详细解说

    一.什么是CSS优先级? 所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序. 二.CSS优先级规则 既然样式有优先级,那么就会有一个规则来约定这个优先级,而这个“规则”就是本次所需要讲的重 ...

  3. 前端css优先级以及继承

    1.css优先级以及继承 css具有两大特性:继承性和层叠性 继承性 继承:给父级设置一些属性,子级继承了父级的该属性,这就是我们的css中的继承. 有一些属性是可以继承下来 : color . fo ...

  4. 【学习笔记】CSS优先级规则

    CSS的优先级规则很多地方的说法都是错误的,常见错误说法是inline css>内部样式>外部样式,其实并没有这种规定.真正的CSS优先级确定是通过特性值大小确定的,在特性值大小相同的情况 ...

  5. CSS 优先级判断

    在面试中被问到这个问题 来记录下  发现自己之前之所以会忘记还是缺少理解的记忆 参考 CSS权威指南 一个CSS选择器的特殊性值表述为4个部分  0 0 0 0 对于选择器中给定的各个ID的属性值   ...

  6. css选择器及css优先级

    三个css选择器:id选择器#test1{ }.class选择器.test2{ }.标签选择器div{ }对三个div:<div>我是普通div</div>.<div i ...

  7. 关于CSS的优先级,CSS优先级计算

    原则一: 继承不如指定原则二: #id > .class > 标签选择符原则三:越具体越强大原则四:标签#id >#id ; 标签.class > .class CSS优先级权 ...

  8. css 优先级 机制

    多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External style sheet ...

  9. z-index、display、selector选择器优先级css优先级面试用到

    z-index:控制元素叠放顺序,哪个z-index数值越大,那个优先被叠放在上面. relative.absolute.fixed这三种情况可以使用z-index. static不可以使用. dis ...

随机推荐

  1. Python中参数是传值,还是传引用?

    在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...

  2. RecyclerView 设置item间隔的方法

    RecyclerView大家常用,但是如何给加载出来的item增加间隔很多人都不知道,下面是方法,直接上代码了: LinearLayoutManager layoutManager = new Lin ...

  3. mysql新建数据库时的collation选择(转)

    转自别处的文章.末尾附原文链接 mysql的collation大致的意思就是字符序.首先字符本来是不分大小的,那么对字符的>, = , < 操作就需要有个字符序的规则.collation做 ...

  4. 引用类型-----Object

    本文章转载至:https://segmentfault.com/a/1190000003984584 关于引用类型的概念: 引用类型:引用类型的值(对象)是引用类型的一个实例: 对象:是某个特定引用类 ...

  5. linux 根分区扩展

    linux根分区扩容 今天网站上传图片出问题了,一开始还以为是程序问题,后来发现原来是服务器存储空间不够,明明有200G的磁盘空间,没理由这么快就用完,查了一下分区情况,原来有两块磁盘,根分区只挂载在 ...

  6. JQuery和原生JS跨域加载JSON数据或HTML。

    前提:有时候需要在网页上,加载另一个网站上的数据.或者加载另一个网站上的一个页面.Js的Ajax请求不具备跨域功能,可以使用JQuery来实现. 网页端JS代码: $(function () { $. ...

  7. css 层叠式样式表

    内联样式:样式优先级最高的 <div style="width:100px;height:100px;"></div> style=“” 用冒号和分号 wi ...

  8. 【iOS】7.4 定位服务->2.1.4 定位 - 官方框架CoreLocation 案例:指南针效果

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

  9. 用Java实现将多级文件夹下的所有文件统一放到一个文件夹中

    每次下了电影(男生懂得呦),每部电影都放在一个单独的文件夹里,看的时候很是不方便啊,一直重复着进入文件夹.后退,再进.再退的操作,而手动把这些电影全部复制出来又太繁琐.因此为了解决这个问题,用IO写了 ...

  10. pyhton中的Queue(队列)

    什么是队列? 队列就像是水管子,先进先出,与之相对应的是栈,后进先出. 队列是线程安全的,队列自身有机制可以实现:在同一时刻只有一个线程在对队列进行操作. 存数据,取数据 import Queue q ...