`

CSS 的优先级机制[总结]

 
阅读更多
http://www.cnblogs.com/xugang/archive/2010/09/24/1833760.html
样式的优先级

多重样式(Multiple Styles):如果外部样式、内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况。

一般情况下,优先级如下:
(外部样式)External style sheet <(内部样式)Internal style sheet <(内联样式)Inline style
有个例外的情况,就是如果外部样式放在内部样式的后面,则外部样式将覆盖内部样式。
示例如下:
<head>
    <style type="text/css">
      /* 内部样式 */
      h3{color:green;}
    </style>
 
    <!-- 外部样式 style.css -->
    <link rel="stylesheet" type="text/css" href="style.css"/>
    <!-- 设置:h3{color:blue;} -->
</head>
<body>
    <h3>测试!</h3>
</body>



选择器的优先权
[img]http://images.cnblogs.com/cnblogs_com/xugang/WindowsLiveWriter/CSS_148B3/jc6_002_thumb.png
[/img]
解释:
1.  内联样式表的权值最高 1000;
2.  ID 选择器的权值为 100
3.  Class 类选择器的权值为 10
4.  HTML 标签选择器的权值为 1

利用选择器的权值进行计算比较,示例如下:
<html>
  <head>
    <style type="text/css">
        #redP p {
             /* 权值 = 100+1=101 */
             color:#F00;  /* 红色 */
        }
 
        #redP .red em {
             /* 权值 = 100+10+1=111 */
             color:#00F; /* 蓝色 */
 
        }
 
        #redP p span em {
             /* 权值 = 100+1+1+1=103 */
             color:#FF0;/*黄色*/
        }
    </style>
  </head>
  <body>
     <div id="redP">
        <p class="red">red
           <span><em>em red</em></span>
        </p>
        <p>red</p>
     </div>
  </body>
</html>

结果:<em> 标签内的数据显示为蓝色。

CSS 优先级法则:
A  选择器都有一个权值,权值越大越优先;
B  当权值相等时,后出现的样式表设置要优于先出现的样式表设置;
C  创作者的规则高于浏览者:即网页编写者设置的CSS 样式的优先权高于浏览器所设置的样式;
D  继承的CSS 样式不如后来指定的CSS 样式;
E  在同一组属性设置中标有“!important”规则的优先级最大;示例如下:

<html>
  <head>
    <style type="text/css">
     #redP p{
        /*两个color属性在同一组*/
        color:#00f !important; /* 优先级最大 */
        color:#f00;
     }
    </style>
  </head>
  <body>
     <div id="redP">
       <p>color</p>
       <p>color</p>
     </div>
  </body>
</html>

结果:在Firefox 下显示为蓝色;在IE  6 下显示为红色;



使用脚本添加样式
当在连接外部样式后,再在其后面使用JavaScript 脚本插入内部样式时(即内部样式使用脚本创建),IE 浏览器就表现出它的另类了。代码如下:
<html>
<head>
  <title> demo </title>
  <meta name="Author" content="xugang" />
 
  <!-- 添加外部CSS 样式 -->
  <link rel="stylesheet" href="styles.css" type="text/css" />
  <!-- 在外部的styles.css文件中,代码如下:
       h3 {color:blue;}
  -->
 
  <!-- 使用javascript 创建内部CSS 样式 -->
  <script type="text/javascript">
  <!--
    (function(){
        var agent = window.navigator.userAgent.toLowerCase();
        var is_op = (agent.indexOf("opera") != -1);
        var is_ie = (agent.indexOf("msie") != -1) && document.all && !is_op;
        var is_ch = (agent.indexOf("chrome") != -1);
 
        var cssStr="h3 {color:green;}";
        var s=document.createElement("style");
        var head=document.getElementsByTagName("head").item(0);
        var link=document.getElementsByTagName("link");
        link=link.item(0);
 
        if(is_ie)
        {
            if(link)
                head.insertBefore(s,link);
            else
                head.appendChild(s);
            document.styleSheets.item(document.styleSheets.length-1).cssText=cssStr;
        }
        else if(is_ch)
        {
            var t=document.createTextNode();
            t.nodeValue=cssStr;
            s.appendChild(t);
            head.insertBefore(s,link);
        }
        else
        {
            s.innerHTML=cssStr;
            head.insertBefore(s,link);
        }
    })();
  //-->
  </script>
</head>
<body>
  <h3>在IE中我是绿色,非IE浏览器下我是蓝色!</h3>
</body>
</html>

结果:在Firefox / Chrome / Safari / Opera 中,文字都是蓝色的。而在IE 浏览器中,文字却是绿色的。

附加
在IE 中添加样式内容的JavaScript 代码:
var s=document.createElement("style");
var head=document.getElementsByTagName("head").item(0);
var link=document.getElementsByTagName("link").item(0);
 
head.insertBefore(s,link);
/* 注意:在IE 中,
   虽然代码是将<style>插入在<link>之前,
   但实际内存中,<style>却在<link>之后。
   这也是“IE中奇怪的应用CSS的BUG”之所在!
*/
 
var oStyleSheet = document.styleSheets[0];
//这实际是在<link>的外部样式中追加
oStyleSheet.addRule("h3","color:green;");
alert(oStyleSheet.rules[0].style.cssText);
alert(document.styleSheets[0].rules[0].style.cssText);
 
//方式2
var cssStr="h3 {color:green;}";
document.styleSheets.item(document.styleSheets.length-1).cssText=cssStr;



IE 浏览器下载或者渲染的顺序可能如下:
●   IE 下载的顺序是从上到下;
●   JavaScript 函数的执行会阻塞IE 的下载;
●   IE 渲染的顺序也是从上到下;
●   IE 的下载和渲染是同时进行的;
●   在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(但并不是说所有相关联的元素都已经下载完。)
●   在下载过程中,如果遇到某一标签是嵌入文件,并且文件是具有语义解释性的(例如:JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载。并且在下载后进行解析,如果JS、CSS中如有重定义,后面定义的函数将覆盖前面定义的函数。
●   解析过程中,停止页面所有往下元素的下载。样式表文件比较特殊,在其下载完成后,将和以前下载的所有样式表一起进行解析,解析完成后,将对此前所有元素(含以前已经渲染的)重新进行样式渲染。并以此方式一直渲染下去,直到整个页面渲染完成。
●   Firefox 处理下载和渲染的顺序大体相同,只是在细微之处有些差别,例如:iframe 的渲染。
分享到:
评论

相关推荐

    CSS优先级总结.pdf

    CSS优先级总结 CSS优先级总结是一个非常重要的知识点,它决定了CSS样式的应用顺序和优先级。...CSS优先级总结是一个非常重要的知识点,它可以帮助开发者更好地理解CSS的工作机制,并编写高效、可维护的CSS代码。

    HTML5&CSS3网页制作:CSS优先级.pptx

    CSS,即层叠样式表,用于...总结来说,CSS优先级是决定网页元素样式效果的关键因素,包括继承、行内样式、选择器权重以及`!important`指令。通过深入理解和熟练运用这些概念,开发者能够更加高效地控制网页的视觉呈现。

    CSS优先级冲突:终极解决指南

    CSS优先级是指在多个样式规则同时应用于同一元素时,决定哪一个规则会被执行的机制。这个机制基于以下几点来确定优先级: 1. **内联样式**:直接写在HTML元素上的`style`属性具有最高的优先级。 2. **ID选择器**:...

    CSS中选择器优先级顺序实战讲解.pdf

    总结一下,CSS选择器的优先级顺序是:行内样式 &gt; ID选择器 &gt; 类选择器 &gt; 标记选择器。在编写CSS时,必须考虑到这个优先级顺序,以便正确地控制元素的样式。如果想要一个样式生效,确保它的选择器具有足够高的优先级...

    同级情况下CSS的优先级探讨

    总结来说,同级情况下的CSS优先级顺序为: 1. 行内样式 2. 内嵌式 = link链接式(按顺序,后定义的优先级高) 3. @import导入式 了解这一优先级规则,对于解决样式冲突和控制页面样式显示至关重要。在编写CSS时,...

    解析CSS编写中的属性优先级问题

    总结起来,解决CSS优先级问题的关键在于理解样式距离、选择器权重计算和继承机制。在编写CSS时,应合理运用这些知识,以确保样式按照预期工作。对于复杂的样式覆盖情况,可以利用开发者工具查看计算后的优先级,以...

    html+css笔记总结

    3. **层叠原则**: 当多个样式冲突时,CSS根据优先级(权重)决定应用哪个样式,权重包括元素选择器、类选择器、ID选择器等。 4. **盒模型**: CSS的盒模型包括内容(content)、内边距(padding)、边框(border)和外边距...

    css总结文件(重要)

    8. **CSS性能优化**:避免使用通配符选择器`*`,减少重绘和回流,使用CSS Sprite技术合并图像,以及利用CSS缓存机制,都可以提高页面加载速度。 9. **CSS规范与最佳实践**:遵循语义化HTML,保持CSS代码整洁有序,...

    css样式的优先级究竟庞杂到什么程度

    这里,我们将深入探讨CSS样式的优先级,试图用“一载二位三重要四特殊”这个顺口溜来总结。 首先,我们来解释“一载”。这里的“载”指的是样式表的来源,主要有三种: 1. 用户端样式表:这是浏览器自带的默认样式...

    前端大厂最新面试题-CSS 面试知识点总结.docx

    6. **CSS优先级算法**:计算元素的`!important`、ID选择符、类选择符、属性选择符、元素选择符的数量,数字越大优先级越高。 7. **LVHA**:链接伪类顺序,`:link`、`:visited`、`:hover`、`:active`,用于定义链接...

    CSS2中文手册

    - **层叠机制**:CSS2的核心在于层叠,它决定了不同来源和优先级的样式如何组合在一起。通过理解层叠权重,可以有效地控制样式生效顺序。 - **盒模型**:CSS2中的盒模型包括元素的content(内容)、padding(内边距...

    css.rar_css

    总结,这个“css.rar”的压缩包提供了丰富的CSS菜单实例,涵盖了从基础到进阶的各种菜单设计技巧,对于想要提升CSS技能的开发者来说,是一份不可多得的学习资料。通过学习和实践这些实例,可以加深对CSS的理解,提高...

    html+css pdf

    HTML+CSS基础知识点总结 在 HTML 和 CSS 结合使用中,CSS 是一种标记语言,用于给 HTML 结构设置样式,例如文字大小、颜色、元素宽高等。简单理解:CSS 可以美化 HTML,让 HTML 更漂亮。核心思想:HTML 搭建结构,...

    深入学习CSS

    - **CSS1.0**:1996年发布,提供了基本的样式控制机制。 - **CSS2.0**:1998年推出,扩展并改进了许多功能,增加了对多媒体的支持。 - **CSS3.0**:2001年开始发展,采用了模块化的设计理念,将CSS功能分解为多个...

    Qt Qss/Css 使用

    5. 级联样式表层叠(CSS cascading):处理多个样式表的优先级。 五、案例分析 在"Qt Qss/Css 使用"的示例中,可能包含一个名为"MyCssTest"的项目,该项目展示了一个使用QSS自定义样式的简单应用。开发者可以通过...

    CSS.Pocket.Reference.3rd.Edition

    该书详细介绍了CSS的核心概念和技术细节,对于希望快速掌握CSS或深入理解其内部机制的专业人士来说,是一本不可或缺的手册。 #### 二、核心内容概览 ##### 1. 添加样式到HTML和XHTML - **概念简介**:介绍如何将...

    css基础代码

    ### CSS基础代码详解 #### CSS入门精要:掌握核心概念与...掌握CSS的基本语法、选择器以及层叠和继承机制,是每个前端开发者的基础技能。随着响应式设计和移动互联网的发展,CSS的灵活性和强大功能将更加凸显其价值。

    css开发手册

    总结来说,CSS2.0手册是理解并掌握CSS样式设计不可或缺的工具,它为网页设计师提供了丰富的样式控制手段,促进了网页设计的多样化和用户体验的提升。无论是新手还是资深开发者,都应该熟悉并熟练运用CSS2.0的各种...

    css1.zip_css_zip

    总结,"CSS学习简明教程"将引导你了解并掌握CSS的基本语法、选择器、属性和值,以及如何组织和应用样式。通过实践和理解这个压缩包中的文件,你可以提升网页设计能力,创造出美观且功能强大的网页。

Global site tag (gtag.js) - Google Analytics