今天在看一本书时又看到了”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. shopnc怎么开启伪静态 shopnc开启伪静态的方法

    最近要给一个shopnc网站开启伪静态,用的是shopnc b2b2c,在网上搜索了好多shopnc开启伪静态的方法,但都是针对shaopnc c2c的,没有关于shopnc b2b2c的,最后终于找 ...

  2. python bottle使用多个端口(多个进程)提高并发

    我的程序是用python结合bottle框架写的,但bottle自带wsgi原本只是单进程单线程运行模式(Bottle 默认运行在内置的 wsgiref 服务器上面.这个单线程的 HTTP 服务器在开 ...

  3. AngularJS实现表单手动验证和表单自动验证

    AngularJS的表单验证大致有两种,一种是手动验证,一种是自动验证.一.手动验证 所谓手动验证是通过AngularJS表单的属性来验证.而成为AngularJS表单必须满足两个条件: 1.给for ...

  4. ANSIC程序到KeilC51的移植心得

    摘要:本文讲述了将ANSIC程序移植到KeilC51上应该注意的事项.文章讲述了存储类型.指针类型.重入函数.根据目标系统RAM的分布的段定位和仿真栈设置.函数指针.NULL指针问题.字节顺序.交叉汇 ...

  5. C51变量的存储

    一.全局变量和局部变量 全局变量和局部变量的区别在于作用域的不同.此外还有静态全局变量和静态局部变量. 全局变量作用域为全局,在一个源文件中定义,其他的源文件也可以应用.在其他的源文件中使用exter ...

  6. 简单实用后台任务执行框架(Struts2+Spring+AJAX前端web界面可以获取进度)

    使用场景: 在平常web开发过程中,有时操作员要做一个后台会运行很长时间的任务(如上传一个大文件到后台处理),而此时前台页面仍需要给用户及时的进度信息反馈,同时还要避免前台页面超时. 框架介绍: 本架 ...

  7. bzoj1655 [Usaco2006 Jan] Dollar Dayz 奶牛商店

    Description Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of to ...

  8. Sqrt(x) 解答

    Question Implement int sqrt(int x). Compute and return the square root of x. Solution 1 -- O(log n) ...

  9. Find Median from Data Stream 解答

    Question Median is the middle value in an ordered integer list. If the size of the list is even, the ...

  10. PHP里关于时间日期大小写(Y,y,M,m...)

    y代表年份,取后两位        Y代表年份全部        m代表月份        M代表月份英文简写        d代表天        D代表星期几的简写        h代表小时,12 ...