今天在看一本书时又看到了”CSS优 先权“这个问题,感觉这个问题还是比较重要的,也算是样式的特异性吧,尤其是在面对较多、较深层、较复杂的样式属性时,理解CSS的加权计算方法对于重写 样式属性之类的问题都会迎刃而解。那么接下来我就把CSS的执行顺序及其优先权问题做一个小小的总结吧。

1、CSS的执行顺序

在说CSS的执行顺序之前首先让我们看一下CSS的几种使用方式:

·外联样式表

通过语句

<link rel="stylesheet" type="text/css" href="xxx.css"/> 

导入CSS样式文件

·内联样式表

直接在<head></head>里面写入

<style type="text/css">
...
选择器{
...
属性:值;
...
}
...
</style>

内嵌样式表

直接在HTML里面写入CSS样式(虽然不提倡这么做,但在这里为了说明问题还是要提一下),如:

<p class="test" style="width:200px;height:100px;font-size:12px;color:#0066cc;">
BeyondWeb.cn-记录与分享前端开发的点点滴滴
</p>

对于执行顺序很好理解,在html页面载入时元素是从上向下依次加载的,当然在css样式表里css代码也是从上向下、从左到右执行的,对于同样的 选择器,后定义的样式会把先定义的样式覆盖掉(注意:这里说的是同样的选择器,如:先定义.test{color:red;}后定 义.test{color:yellow;},两个选择器都是类选择器”.test“)。

我们来看个小例子:

HTML代码:

<p class="test">
BeyondWeb.cn-记录与分享前端开发的点点滴滴
</p>

CSS代码:

.test{
color:red;
}

这时文字是红色的,那么我们如果在我们的样式表里后面的代码里有对.test进行了颜色控制,如:

... .test{
color:red;
}
... .test{
color:yellow;
}
...

此时文字就变成黄色了,原因就是下面定义的属性把上面的覆盖了。

另外对于外联样式表、内联样式表、内嵌样式表就看它们在html页面中的位置了,对于相同选择器控制的相同属性,哪一个样式表里面的属性最后执行就取哪里面的样式。

2、CSS的优先权

CSS2.1规范中定义了样式规则的计算方式,使用一个4位数字串来表示权重,每个选择器的权重决定了使用哪种样式,使用的规则有如下几种:

·元素的内联样式属性,加1,0,0,0

·每个id选择器,加0,1,0,0

·每个class选择器、属性选择器及伪类,加0,0,1,0

·每个元素及伪元素(如:firstchild),加0,0,0,1

·提高权限,使用!important

然后,逐位数字相加,得到最终的数字串,按照从左到右的顺序逐位比较,一旦对应数字位比较出大小,那么谁大采用谁的规则,如下面几个demo:

Demo1:

规则1

.test h2{
color:red;//规则1
}

一个class选择器(取0010),一个html元素(取0001),相加得0011

规则2

h2{
color:red;//规则2
}

一个class选择器(取0001),最后还是0001通过两个样式的最终数字串比较得出结果:取样式1的规则

Demo2:

样式1

li.currentMenu
{
color:#333;
}

一个html元素(取0001),一个class选择器(取0010),相加得0011

样式2

ul li{
color:#666;
}

两个html元素(两个0001),相加得0002

通过两个样式的最终数字串比较得出结果:取样式1的规则。虽然有2>1,但它在从左到右第四位,在第三位比较时已经有1>0,所以无论后面的位数谁大谁小都视为无效。

对于!important,语法如下:

属性:值1 [值2,..值n] !important;

比如:

<p class="test">
BeyondWeb.cn-记录与分享前端开发的点点滴滴
</p>
...
.test{
color:red !important;//语句1
}
...
.test{
color:yellow;//语句2
}
...

最终字体的样式为红色red,因为!important提高了语句1的权限。

好了,以上就是我对于CSS执行顺序及其优先权的理解,就总结这么多吧。

高手总结的CSS执行顺序及其优先权问题汇总的更多相关文章

  1. html/css基础篇——link和@inport详解以及脚本执行顺序探讨

    先说一说两者之间的异同 两者都可以引用外部CSS的方式,现在主流浏览器两者都支持(ps:@import是CSS2.1提出的),但是存在一定的区别: 1.link是XHTML标签,除了加载CSS外,还可 ...

  2. CSS规则的执行顺序(转)

    你对CSS规则的执行顺序是否了解,这里和大家分享一下,若两条规则具有相同的权值.起源及特殊性,那在样式表中最后出现的规则优先. 1.CSS规则之特殊性 首先来看一下这个例子将会发生的情形: <s ...

  3. wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)

    初学wex5,先理理让人容易混淆的三个概念: 一 基本概念: 1 wex5组件,顾名思义,在编辑窗口右侧的组件集合里的,都是wex5基于开源自创的组件,并封装了一套自已的方法.目的是为了方便.相关方法 ...

  4. jquery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较

    想要添加这个效果,先来弄明白页面的加载和事件执行顺序,看这个简单例子: <html xmlns="http://www.w3.org/1999/xhtml"> < ...

  5. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  6. Javascript在页面加载时的执行顺序【转】

    一.在HTML中嵌入Javasript的方法 直接在Javascript代码放在标记对<script>和</script>之间 由<script />标记的src属 ...

  7. javascript的执行顺序

    先看下面两段js程序,先是定义式函数写法: 复制代码 <script type="text/javascript"> function myfunc(){ alert( ...

  8. Javascript加载执行顺序

    本文主要内容 一.不同位置的script标签执行顺序 二.document.ready和window.onload的区别 一.不同位置的script标签执行顺序 整个加载的过程从解析头部开始,比如ht ...

  9. 浏览器环境下JavaScript脚本加载与执行探析之代码执行顺序

    本文主要基于向HTML页面引入JavaScript的几种方式,分析HTML中JavaScript脚本的执行顺序问题 1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析 ...

随机推荐

  1. 使apache解析域名到目录的方法

    apache如何将一个域名自动定位到目录 有两种解决办法 首先,你的拥有一个有泛域名解析的顶级域名,例如: domain.com其次,在 httpd.conf 中打开 mod_rewrite之后,在 ...

  2. [TYVJ] P1015 公路乘车

    公路乘车 描述 Description 一个特别的单行街道在每公里处有一个汽车站.顾客根据他们乘坐汽车的公里使来付费.例如样例的第一行就是一个费用的单子. 没有一辆车子行驶超过10公里,一个顾客打算行 ...

  3. angular中设置$http的post请求的数据传递格式

    ArgularJS的$http方法支持全局设置: $http.defaults.headers.post["Content-Type"] = "application/x ...

  4. Keil C51中函数指针的使用

    函数指针在C语言中应用较为灵活.在单片机系统中,嵌入式操作系统.文件系统和网络协议栈等一些较为复杂的应用都大量地使用了函数指针.Keil公司推出的C51编译器是事实上80C51 C编程的工业标准,它针 ...

  5. 自定义JsonResult处理JSON序列化DateTime类型数据(Ext4.2+ASP.NET MVC 4)

    最近项目中前台页面使用Extjs4.2 ,在后台ASP.NET MVC4返回的DateTime类型的数据错返回的DateTime类型的JsonResult的结果中的值是“\/Date(13784461 ...

  6. Js,alert出现乱码问题,赶紧记下来,额~~~

    原文 http://www.cnblogs.com/still-windows7/archive/2011/08/28/2156010.html 前些天还可以正常使用的js文件,在添加了一些东西后,其 ...

  7. MySQL流程控制函数

    官方文档:Control Flow Functions Name Description CASE Case operator IF() If/else construct IFNULL() Null ...

  8. linux会话命令screen详解

    Screen会话命令 我其实是把文件下载到 /home/zhang/temp/ 里面,当我N久以后再联上服务器,想看看文件下载情况怎样,那又要 cd 老半天,这时候 screen 就是好帮手了. 顾名 ...

  9. 实用的VIM配置文件

    VIM配置文件名为.vimrc,默认在用户根目录下,或者在命令模式下输入:version可以获取配置文件路径. 在VIM命令行下输入options,然后回车,可以查看VIM所有的参数选项. 双引号&q ...

  10. Increasing/ Decreasing Stack

    对于此类问题: 对于元素nums[i],找出往左/右走第一个比它小/大的数字 我们常常用递增栈/递减栈实现. 递增栈实现第一个比它小 递减栈实现第一个比它大 Example: 2 1 5 6 2 3 ...