2017-9-11 CSS三大特性

本文详细介绍了CSS的三大特性:继承性、层叠性和优先级。包括这些特性的具体含义、应用场景及特殊情况说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

css三大特性

CSS有三大特性,分别是继承性,层叠性,优先级


1.继承性

继承性是指指被包在内部的标签将拥有外部标签的样式性,即子元素可以继承父元素的属性,例如下面的代码,div中包含2个p标签,1个span标签,当给div设置字体颜色为红色时,他的子标签会继承父元素的属性,因而会显示红色。 在CSS中以text-、font-、line- 开头的属性都是可以继承的。2017-9-11/CSS三大特性 - 宋雪 - Promise-snow

  但是继承也会有其特殊性主要有以下三种:

1> a 标签的字体颜色不能被继承,例如将上面代码的div标签中代码改为如下的代码后,a标签的字体颜色是不会改变的,通过页面的F12可以查看得到,a标签是有一个默认的       color-webkit-link;字体颜色属性,所以给父元素设置颜色是不能改变a标签字体的颜色

2017-9-11/CSS三大特性 - 宋雪 - Promise-snow

 

2> h标签字体的大下也是不能被继承的,如下代码给父元素在设置一个字体属性20px,在div中添加一个h2标签,在浏览器中可以发现h2标签中的字体大小不会改变,因为h2标签中也有一个默认的默认的font-size1.5em;字体大小属性,

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head lang="en">  
  4.     <meta charset="UTF-8">  
  5.     <title></title>  
  6.     <style>  
  7.         div {  
  8.             color: red;  
  9.             font-size: 20px;  
  10.         }  
  11.     </style>  
  12. </head>  
  13. <body>  
  14.     <div>  
  15.         <p>苹果</p>  
  16.         <p>香蕉</p>  
  17.         <span>葡萄</span>  
  18.         <a href="#">这是a标签</a>  
  19.         <h2>这是h2标签</h2>  
  20.     </div>  
  21. </body>  
  22. </html> 

3> div 标签的高度如果不设置由内容来决定(没有内容高度为0),宽度默认由父元素继承过来,下面的代码就很好的演示了div的宽高,在每个div标签后面添加了一个br标签来强制换行,因为如果不使用br标签来强制换行的话,div就会紧紧挨着一起,看不不出来div的高度,第一个div因为没有内容,所以在浏览器上不显示出来,而第二div里面添加了一句话,但是高度是由里面的内容撑出来的,第三个div里面也是一句话,并且在内容当中使用了一个br标签来强制换行,这样就会发现该div的高度会比第二div的高度要高,如果继续向div标签里面添加内容,高度也会随之相应的变高。

3> div 标签的高度如果不设置由内容来决定(没有内容高度为0),宽度默认由父元素继承过来,下面的代码就很好的演示了div的宽高,在每个div标签后面添加了一个br标签来强制换行,因为如果不使用br标签来强制换行的话,div就会紧紧挨着一起,看不不出来div的高度,第一个div因为没有内容,所以在浏览器上不显示出来,而第二div里面添加了一句话,但是高度是由里面的内容撑出来的,第三个div里面也是一句话,并且在内容当中使用了一个br标签来强制换行,这样就会发现该div的高度会比第二div的高度要高,如果继续向div标签里面添加内容,高度也会随之相应的变高。

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head lang="en">  
  4.     <meta charset="UTF-8">  
  5.     <title></title>  
  6.     <style>  
  7.         div {  
  8.             background-color: red;  
  9.         }  
  10.     </style>  
  11. </head>  
  12. <body>  
  13.     <div></div>  
  14.     <br/>  
  15.     <div>这是div标签</div>  
  16.     <br/>  
  17.     <div>这也是<br/>div标签</div>  
  18. </body>  
  19. </html> 

2.层叠性

作用:层叠性就是CSS处理冲突的一种能力

注意点

层叠性只有在多个选择器中选中“同一个标签”,然后又设置了“相同的属性”,才会发生层叠性

3.优先级

CSS 样式的优先级小结

1. 同一元素引用了多个样式时,排在后面的样式属性的优先级高

例如,下面的 div,同时引用了 [.default] 和 [.user] 中的样式,其中 [.user] 样式中的 width 属性会替换 [.default] 样式中的 width 属性。

复制代码
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <style type="text/css">
        .default{
           width: 100px; /* 定义 width 属性 */
           height: 100px; 
           background-color: #B6E0AE; 
           margin: -50px 0 0 -50px; 
           position: absolute;
           top: 50%; 
           left: 50%; 
        }
        .user{
           width: 150px; /* 这里 width 的值替换了前面 width 的值 */           
        }
    </style>
</head>
<body>
    <div class="default user"></div>
</body>
</html>
复制代码

2. 样式选择器的类型不同时,优先级顺序为:id 选择器 > class 选择器 > 标签选择器

例如,下面的 div 即获取 id 选择器对应的样式,又获取 class 选择器对应的样式,其中

id 选择器 [#mydiv] 的样式属性(width),优先于 class 选择器 [.user] 中的样式属性(width);

class 选择器 [.user] 中的样式属性(background-color),优先于标签选择器 [div] 中的样式属性 (background-color)。

复制代码
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <style type="text/css">
        #mydiv{
           width: 100px;     
           height: 100px;
           margin: -50px 0 0 -50px; 
           position: absolute;
           top: 50%;
           left: 50%;  
        }
        .user{
           width: 500px; /* #mydiv 中已定义 width 属性,这里的 width 无效 */
           background-color: #B6E0AE; 
        }
        div{
           background-color: #000000; /* .user中已定义 background-color 属性,这里的 background-color 无效 */
        }
    </style>
</head>
<body>
    <div id="mydiv" class="user"></div>
</body>
</html>
复制代码

3. 标签之间存在层级包含关系时,后代元素会继承祖先元素的样式。如果后代元素定义了与祖先元素相同的样式,则祖先元素的相同的样式属性会被覆盖。继承的样式的优先级比较低,至少比标签选择器的优先级低

例如,下面 id = "child" 的子 div,部分样式继承自 id = "parent" 的父 div,而其新定义的样式属性又会覆盖父元素的样式属性。

复制代码
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <style type="text/css">
        #parent{
           width: 100px; 
           height: 100px; 
           background-color: #B6E0AE; 
           margin: -50px 0 0 -50px; 
           position: absolute;
           top: 50%;
           left: 50%;
        }
        #child{
            /* 继承了父元素的 width 等属性 */
            height: 60px;  /* 这里的 height 覆盖了父元素的 height 属性 */
            background-color: #A7CCEF; /* 这里的 background-color 属性覆盖了父元素的 background-color 属性 */
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="child" style="font-size:12px;">子元素</div>
    </div>
</body>
</html>
复制代码

4. 带有 !important 标记的样式属性的优先级最高

例如,下面的 div 的样式属性中,带有 !important 标记的样式属性(width)会替换其他的(width)。

复制代码
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <style type="text/css">
        #parent{
           width: 100px; 
           height: 100px; 
           background-color: #B6E0AE; 
           margin: -50px 0 0 -50px; 
           position: absolute;
           top: 50%;
           left: 50%;
        }
        #child{
            /* 继承了父元素的 width 等属性 */
            height: 60px;  /* 这里的 height 覆盖了父元素的 height 属性 */
            background-color: #A7CCEF; /* 这里的 background-color 属性覆盖了父元素的 background-color 属性 */
        }
        div{
            width: 150px !important; /* 此时的 width 属性优先级最高,不会被其他的 width 属性覆盖 */
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="child" style="font-size:12px;">子元素</div>
    </div>
</body>
</html>
复制代码

5. 样式表的来源不同时,优先级顺序为:内联样式 > 内部样式 > 外部样式 > 浏览器用户自定义样式 > 浏览器默认样式

例如,下面的 div 的样式有多个来源,其中内联样式 font-size 的优先级最高,外部样式中的 width 属性,优先级比内部样式中的 width 属性的优先级要低。

/* main.css 文件 */
#parent { width: 300px; }
复制代码
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <link type="text/css" rel="stylesheet" href="main.css" />
    <style type="text/css">
        #parent{
           width: 100px;  /* 这里的 width 属性替换了 main.css 文件中定义的 width 属性 */
           height: 100px; 
           background-color: #B6E0AE; 
           margin: -50px 0 0 -50px; 
           position: absolute;    
           top: 50%;
           left: 50%;
        }
        #child{
            height: 60px; /* 覆盖父元素的 height 属性 */
            background-color: #A7CCEF; 
            font-size: 50px;
        }
    </style>
</head>
<body>
    <div id="parent">
    <!--内联样式 font-size 优先级比 <style></style> 中的 font-size 优先级高 -->
    <!--chrome 浏览器默认的 font-size 至少是 12px,即使这里设置为小于 12px,浏览器还是显示 12px-->
        <div id="child" style="font-size:20px;">子元素</div>
    </div>
</body>
</html>
复制代码

附:如何用 jQuery 选择器来选择 class 中有多个值的元素,如 class="a b c" 的元素?

下面 div 的 class 属性中包含多个值,可以按以下方式来查找这样的 div:

复制代码
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript">
        function myClick() {
            //按属性选择器的方式来选择
            $("[class='ancestor parent child']").css("color", "red");

            //直接列出各个类名来选择(顺序可以互换)
            $(".ancestor.parent.child").css("color", "red");
            //打乱顺序后,也可以找到同样的元素
            $(".child.parent.ancestor").css("color", "red");

            //注意:选择器中间不能随便加空格(空格后面的元素表示后代元素),如:
            $(".ancestor .parent .child").css("color", "red"); //可以找到 div
            $(".child .parent .ancestor").css("color", "red"); //找不到任何元素

            //依次过滤来选择
            $(".ancestor.parent").filter(".child").css("color", "red");
            $(".ancestor").filter(".child").css("color", "red");

            //也可以用 find() 来查找满足条件的 所有的后代元素
            $(".ancestor.parent").find(".child").css("color", "red");
$(".ancestor").find(".child").css("color", "red");
} </script> </head> <body> <form action="http://www.bing.com/search"> <div> <div class="ancestor parent child"> <div class="child">test0</div> <span class="child">test1</span> </div> <div class="ancestor">test2</div> <div class="parent">test3</div> <div class="child">test4</div> <input type="button" onclick="myClick();" value="点击" /> </div> </form> </body> </html>
复制代码

 注:《HTML5程序设计》这本书上有更详细的介绍


2.1  样式的分类

1.行间样式

2.外部样式表创建

<link type="text/css" ref="stylesheet" href="路径" />

3.外部样式导入

<style type="text/css">

@important url(路径)

</style>

4.内部样式

 

CSS 的优先级机制[总结]

样式的优先级

多重样式(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>

 

选择器的优先权

 

jc6_002

 

解释:

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 的渲染。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值