css优先级

很经典的文章啊 [转]CSS的优先级特性Specificity

如果同个元素有两个或以上冲突的CSS规则,浏览器有一些基本的规则来决定哪一个非常特殊而胜出。
它可能不像其它那么重要,大部分案例你不需要担心冲突,但大型而且复杂的CSS文件,或有很多CSS文件组成的,可能产生冲突。
选择器一样的情况下后面的会覆盖前面的属性。比如:

p { color: red; }
p { color: blue; }
p元素的元素将是蓝色,因为遵循后面的规则
然而,你不可能经常用相同的选择器冲突达到目的,当你使用嵌套选择器,合理的冲突来了。比如:
div p { color: red; }
p { color: blue; }
也许你看起来p元素在div元素里面的颜色是蓝色,就像后面p元素的规则,但是第一个选择器的特性却是红色。基本上,一个选择器越多特性,样式冲突的时候将显示它的样式。
一组嵌套选择器的实际特性可以计算出来。基本的,使用ID选择器的值是100,使用class选择器的值是10,每个html选择器的值是1。它们加起来就可以计算出特性的值。

 p的特性是1                            (一个html选择器)
 div p的特性是2                          (两个html选择器)
 .tree的特性是10                            (1个class选择器)
 div p.tree的特性是1+1+10=12,             (两个html选择器,一个class选择器)
 #baobab的特性是100                (1个ID选择器)
 body #content .alternative p的特性是112    (两个html选择器,一个ID选择器,一个类选择器)
 按照上面的规则,div p.tree的特性比div p高,body #content .alternative p又比它们两个都高。

css优先级的四大原则:

原则一: 继承不如指定

如果某样式是继承来的永远不如具体指定的优先级高。

例子1:

CODE:

<style type="text/css">

<!--

*{font-size:20px}

.class3{ font-size: 12px; }

-->

</style>

<span class="class3">我是多大字号?</span>

运行结果:.class3{ font-size: 12px; }

例子2:

CODE:

<style type="text/css">

<!--

#id1 #id2{font-size:20px}

.class3{font-size:12px}

-->

</style>

 

<div id="id1" class="class1">

<p id="id2" class="class2"> <span id="id3" class="class3">我是多大字号?</span> </p>

</div>

运行结果:.class3{ font-size: 12px; }

注意:后面的几大原则都是建立在“指定”的基础上的。

原则二: #ID >.class >标签选择符

例子:

CODE:

<style type="text/css">

<!--

#id3 { font-size: 25px; }

.class3{ font-size: 18px; }

span{font-size:12px}

-->

</style>

<span id="id3" class="class3">我是多大字号?</span>

运行结果:#id3 { font-size: 25px; }

原则三:越具体越强大。

解释:当对某个元素的CSS选择符样式定义的越具体,层级越明确,该定义的优先级就越高。

CODE:

<style type="text/css">

<!--

.class1 .class2 .class3{font-size: 25px;}

.class2 .class3{font-size:18px}

.class3 { font-size: 12px; }

-->

</style>

 

<div class="class1">

<p class="class2"> <span class="class3">我是多大字号?</span> </p>

</div>

运行结果:.class1 .class2 .class3{font-size: 25px;}

原则四:标签#id >#id ; 标签.class >.class

上面这条原则大家应该也都知道,看例子

CODE:

<style type="text/css">

<!--

span#id3{font-size:18px}

#id3{font-size:12px}

span.class3{font-size:18px}

.class3{font-size:12px}

-->

</style>

<span id="id3">我是多大字号?</span>

<span class="class3">我是多大字号?</span>

运行结果:span#id3{font-size:18px} | span.class3{font-size:18px}

很多人会有这样的疑问,为什么不把这个原则四归入原则一形成:

【 标签#ID >#ID >标签.class >.class >标签选择符 >通配符 】 呢?或者将 “标签.class” 看作多更为具体的 “.class” 从而归入原则二呢?后面我将解答各位的疑惑,这就涉及到CSS的解析规律---------这四大原则间也是有优先级的,是不是有些糊涂了?别急,继续 看。

*四大原则的权重

相信很多人都知道上面的四大原则,不要以为知道了这四大原则就能分辨css中那条代码是起作用的,不信?那你5秒内能肯定的知道下面这段代码,测试中的文字的字号吗?

CODE:

<style type="text/css">

<!--

.class1 p#id2 .class3{font-size:25px}

div .class2 span#id3{font-size:18px}

#id1 .class3{font-size:14px}

.class1 #id2 .class3{font-size:12px}

#id1 #id2{font-size:10px}

-->

</style>

<div id="id1" class="class1">

<p id="id2" class="class2">

<span id="id3" class="class3">我是多大字号?</span>

 </p>

</div>

为了大家方便阅读,我去掉了一些代码。

四大原则的权重就是: 原则一 >原则二 >原则三 >原则四

解释:

首先遵循原则一

有指定开始使用下面的原则,无指定则继承离他最近的定义。

然后开始原则二

1、比较最高优先级的选择符

例子:

CODE:

<style type="text/css">

<!--

#id3{font-size:18px}

.class1 .class2 .class3{font-size:12px} /* 描述的再具体也不起作用 --- 原则二 */

.class3{font-size:18px}

div p span{font-size:12px}

-->

</style>

<div id="id1" class="class1">

<p id="id2" class="class2"> <span id="id3" class="class3">我是多大字号?</span> </p>

</div>

运行结果:#id3{font-size:18px}

删掉上面CSS中的前两行可以得出,如果没有最高级别的#ID会寻找.class 即使后面的CSS按照“原则二” 描述的再具体也无法突破原则一。

2、如果两条CSS的如果最高选择符优先级一样,则比较他们的数量

例子:

CODE:

<style type="text/css">

<!--

.class1 #id3{font-size:12px}

.class1 .class2 #id3{font-size:14px}

-->

</style>

<div id="id1" class="class1">

<p id="id2" class="class2"> <span id="id3" class="class3">我是多大字号?</span> </p>

</div>

运行结果:.class1 .class2 #id3{font-size:14px}

3、如果最高选择符级别和数量都一样,则按照原则二比较他们下一级,以此类推。

例子1:

CODE:

<style type="text/css">

<!--

#id1 .class2 .class3{font-size:14px}

div .class2 #id3{font-size:12px}

-->

</style>

<div id="id1" class="class1">

<p id="id2" class="class2"> <span id="id3" class="class3">我是多大字号?</span> </p>

[color=Orange]

运行结果:#id1 .class2 .class3{font-size:14px}

[/color]

*最高级选择符的位置没有高下之分,论证:

[code]CODE:

<style type="text/css">

<!--

#id1 .class2 .class3{font-size:18px}

.class1 #id2 .class3{font-size:14px}

.class1 .class2 #id3{font-size:12px}

-->

</style>

<div id="id1" class="class1">

<p id="id2" class="class2"> <span id="id3" class="class3">我是多大字号?</span> </p>

</div>

上例中更换3条CSS的先后可以得出,哪条位于最后,哪条起作用。说明他们的级别一样,后面的将覆盖前面的。

*将原则四归入原则二的不合理性,论证:

CODE:

<style type="text/css">

<!--

.class1 span#id3{font-size:14px}

#id1 .class2 .class3{font-size:12px}

-->

</style>

<div id="id1" class="class1">

<p id="id2" class="class2"> <span id="id3" class="class3">我是多大字号?</span> </p>

</div>

#id1 .class2 .class3{font-size:12px}

可以看到span#id3并不比#id1高出一个级别。

无结果开始原则三

如果比较结果,选择符从最高级开始都对应,级别上的数量也相同,则开始比较谁更具体

例子:

CODE:

<style type="text/css">

<!--

#id1 .class2 span{font-size:14px}

.class1 #id3{font-size:12px}

-->

</style>

<div id="id1" class="class1">

<p id="id2" class="class2"> <span id="id3" class="class3">我是多大字号?</span> </p>

</div>

#id1 .class2 span{font-size:14px}

当然也可以理解为在原则二层层比较中“少一个层级的样式”,缺少的那个层级没有“层级较多的样式”多出的那个层级的级别高。(绕口令)

*将原则四归入原则三的不合理性,论证:

CODE:

<style type="text/css">

<!--

.class2 .class3{font-size:14px}

span.class3{font-size:12px}

-->

</style>

<div id="id1" class="class1">

<p id="id2" class="class2"> <span id="id3" class="class3">我是多大字号?</span> </p>

</div>

上例中可以看出,如果将原则四并入原则三,将span.class3看作两层,那么应该和.class2 .class3层级一样多,那么应该显示12px,而事实不是这样。

最终对决原则四

如果还分不出结果,则开始原则四的比较:

例子1:

CODE:

<style type="text/css">

<!--

.class1 p.class2 .class3{font-size:14px}

.class1 .class2 .class3{font-size:12px}

-->

</style>

<div id="id1" class="class1">

<p id="id2" class="class2"> <span id="id3" class="class3">我是多大字号?</span> </p>

</div>

.class1 p.class2 .class3{font-size:14px}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux编译准备,Linux 下编译指南

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼首先&#xff0c;我们需要获取最新的源码。使用如下命令即可&#xff1a;git clone -b master --depth1 https://github.com/CleverRaven/Cataclysm-DDA.git这条命令会只获取 master 分支下最新的代码。对于普通玩家来说这已经足够…

ServletConfig的详解

一、Servlet的作用 servlet是在servlet容器内运行的程序&#xff0c;有时需要访问容器外部或借助容器访问外部资源。所以可以通过web.xml文件中为某个servlet配置的名称和参数等信息传递给servlet。 这样做的好处是&#xff1a;如果将重要的信息、编码方式等配置信息放在web.xm…

You can't specify target table 'tablename' for update in FROM clause的解决方法

在执行下面的sql时报错 DELETE FROM temp WHERE id IN (SELECT a.id FROM t_user t JOIN temp a ON t.email a.email); 这种写法在sqlserver或者oracle中是支持的&#xff0c;但是mysql目前是不支持的&#xff0c;在mysql中不能同时查询一个表的数据再同时进行删除&#xff0…

linux缓存代码,Linux使用的缓存

Linux使用的缓存6.7.1 Linux使用的缓存不管在硬件设计还是软件设计中&#xff0c;高速缓存是获得高性能的常用手段。Linux 使用了多种和内存管理相关的高速缓存。1&#xff0e; 缓冲区高速缓存&#xff1a;缓冲区高速缓存中包含了由块设备使用的数据缓冲区。这些缓冲区中包含了…

Linux查看文件夹大小du

du命令参数详解见&#xff1a; http://baike.baidu.com/view/43913.htm 下面我们只对其做简单介绍&#xff1b; 查看linux文件目录的大小和文件夹包含的文件数 统计总数大小 du -sh filename&#xff08;其实我们经常用du -sh *&#xff0c;显示当前目录下所有的文件及其大小&a…

cursor: mutex S等待事件

cursor: mutex * events等待事件 cursor: mutex * events等待事件用于Cursor Parent 和 Cursor stats类型的操作&#xff1a; ‘Cursor: Mutex S’ &#xff0c; 某个进程以SHRD S mode申请一个Mutex&#xff0c; 而该Mutex要么被其他进程已EXCL X mode所持有&#xff0c;要么其…

flash和linux文件系统,面向大容量Flash的高效Linux文件系统改进和实现

摘要&#xff1a;文件系统是Linux操作系统的重要组成部分.而本文对于面向大容量Flash文件系统高效性的研究则主要侧重于对于嵌入式Linux操作系统文件系统的研究.由于嵌入式设备介质的特殊性,电源系统的不稳定性以及Flash容量的日益增长,大容量Flash设备文件系统高效性方面的问题…

Xshell配置ssh免密码登录-密钥公钥(Public key)

1 简介 ssh登录提供两种认证方式&#xff1a;口令(密码)认证方式和密钥认证方式。其中口令(密码)认证方式是我们最常用的一种&#xff0c;这里介绍密钥认证方式登录到linux/unix的方法。 使用密钥登录分为3步&#xff1a; 1、生成密钥&#xff08;公钥与私钥&#xff09;&#…

Linux面试题集锦,测测你的水平(答案)四

三&#xff0e;简答题&#xff1a;1&#xff0e;简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程。参考答案&#xff1a;Linux通过i节点表将文件的逻辑结构和物理结构进行转换。i节点是一个64字节长的表&#xff0c;表中包含了文件的相关信息&#xff0c;…

linux vim ctags,Linux环境上代码阅读与编写的利器-vim+ctags+cscope

Linux环境下代码阅读与编写的利器----vimctagscscope所谓工欲善其事&#xff0c;必先利其器。从事Linux程序开发&#xff0c;特别是Linux驱动程序的开发&#xff0c;不管是通过windows下虚拟一个Linux,还是通过samba访问Linux都是很郁闷的事情。原因就是程序本身需要Linux的编译…

oracle vm中的xp添加共享文件夹

接着就可以在虚拟的电脑系统里面打开我们的共享文件夹&#xff0c;在桌面找到”网络邻居“&#xff0c;双击打开 我们需要通过”添加一个网络邻居“来加载我们刚才添加的”共享文件夹“&#xff0c;根据向导一步步执行 然后点击”浏览“ 展开前面的 ”“ visualBox shared fold…

MSBuild + MSILInect实现编译时AOP-改变前后对比

实现静态AOP&#xff0c;就需要我们在预编译时期&#xff0c;修改IL实现对代码逻辑的修改。Mono.Cecil就是一个很好的IL解析和注入框架&#xff0c;参见编译时MSIL注入--实践Mono Cecil(1)。 我的思路为&#xff1a;在编译时将加有继承制MethodInterceptBaseAttribute标签的原方…

工作队列 order linux,linux 工作队列(workqueue)

在处理内核相关工作中, 我们经常看到工作队列(workqueue)的身影. 本文描述何为 linux workqueue.本文基于 2.6.32 的内核, 此时的工作队列还不是 cmwq.为什么使用 workqueue在内核代码中, 经常希望延缓部分工作到将来某个时间执行, 这样做的原因很多, 比如在持有锁时做大量(或者…

mysql增加修改字段

1添加表字段 alter table table1 add transactor varchar(10) not Null; alter table table1 add id int unsigned not Null auto_increment primary key 2.修改某个表的字段类型及指定为空或非空alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空];alter…

惊人体积,无码改造,黑月V1.7.4增强版[20110810]

使用方法:替换 易语言 LIB目录下的黑月支持库 记得备份 去掉代码长度过少不能编译的限制.(比如空代码) 优化编译出来的文件体积大小.(exe貌似没问题,dll貌似也没问题,就是dll对体积的优化不会太多) 体积减少了N倍...不解释,不解释,高手懂得... 转载于:https://blog.51cto.com…

linux stm32 ide,一文教你如何在ubuntu上快速搭建STM32 CubeIDE环境(图文超详细+文末有附件)...

在快速ubuntu上安装cubeide你值得拥有&#xff1b;适合对linux系统还不是很熟悉的同学&#xff1b;1 下载 cubeide登陆官网&#xff0c;下载链接不知道是否有效&#xff0c;如果无效&#xff0c;需要提交自己的邮箱地址&#xff0c;ST官方会将下载链接发送至你的邮箱&#xff0…

ajax如何处理服务器返回的三种数据类型

其原理很简单&#xff0c;结构上基本不变&#xff0c;只是改变处理返回数据的方式. 1.Text/HTML格式 这种返回类型处理很简单&#xff0c;直接就当作字符串用就行了.为了方便使用&#xff0c;封装成如下函数: /*** function 利用ajax动态交换数据(Text/HTML格式)* param url …

malloc/free与new/delete的区别

malloc/free是c/C语言的标准库函数&#xff1b;new/delete是c的运算符&#xff0c;都可以用申请动态内存和释放内存。 对于非内部数据类型的对象而言&#xff0c;光用malloc/free无法满足动态对象的要求。对象在创建是要自动执行Constructor函数&#xff0c;对象在消亡之前要自…

程序猜价格c语言,C语言大作业:编写菜单控制猜商品价格程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼改写猜价格游戏的程序(见下)&#xff0c;实现对这个游戏的一些管理功能&#xff0c;可以根据菜单对商品进行添加、删除、查找、浏览等操作&#xff0c;根据模块间数据传递的方式分析各个模块的函数原型及调用关系&#xff0c;并完成…

20165301 预备作业二:学习基础和C语言基础调查

《做中学》读后感及C语言学习调查 读《做中学》有感 娄老师在文章中多次提到「做中学(Learning By Doing)」的概念&#xff0c;并通过娄老师自己的减肥经历、五笔练习经历、乒乓球练习经历和背英文单词的经历为读者更加详细地阐明了「做中学(Learning By Doing)」的重要性。 在…