CSS 三大特性

338 阅读2分钟

层叠性

相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式,层叠性主要解决样式冲突的问题。 层叠性原则:

  • 样式冲突,遵循的原则是就近原则,哪个样式离结构近,就执行哪个样式
  • 样式不冲突,不会层叠
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        div {
            color: red;
        }

        div {
            color: green;
        }
    </style>
</head>
<body>
   <div>
       324
   </div>
</body>
</html>

继承性

CSS中的继承:字标签会继承父标签的某些样式,如文本颜色和字号。

  • 恰当使用继承可以简化代码,降低CSS样式的复杂性
  • 子元素可以继承父元素的样式(text-,font-,line-这些元素开头的可以继承,以及color属性)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        div {
            color: green;
        }
    </style>
</head>
<body>
   <div>
       <p>324</p>
   </div>
</body>
</html>

在这里插入图片描述 在这里插入图片描述

行高的继承

body {
            font:12px/1.5 Microsoft Yahei;
}
  • 行高可以跟单位也可以不跟单位
  • 如果子元素没有设置行高,则会继承父元素的行高为1.5
  • 此时子元素的行高是:当前子元素的文字大小*1.5
  • body行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        body {
            font:12px/1.5 Microsoft Yahei;
        }
        div {
            /*div 的行高计算:14 * 1.5 = 21px;*/
            font-size: 14px;
        }

        p {
            /*p 的行高计算:20px * 1.5 = 30px;*/
            font-size: 20px;
        }
    </style>
</head>
<body>
   <div>啪啪啪啪</div>
   <p>加油挣多点钱</p>
   <ul>
       <li>li由于没有手动指定文字大小,先会继承父元素的ul的文字大小,ul也没有,继续网上找,直到找到为止,继承文字大小后,再*1.5</li>
   </ul>
</body>
</html>

优先级

当同一个元素指定多个选择器,就会有优先级的产生

  • 选择器相同,则执行层叠性
  • 选择器不同,则根据选择器权重执行

选择器权重如下表所示。

选择器选择器权重
继承 或者 *0,0,0,0
元素选择器0,0,0,1
类选择器,伪类选择器0,0,1,0
ID选择器0,1,0,0
行内样式style=""1,0,0,0
!important∞无穷大

优先级注意点:

  • 1.权重是有4组数字组成,但是不会有进位
  • 2.可以理解为类选择器永远大于元素选择器,id选择器永远大于类选择器,依次类推
  • 3.等级判断从左向右,如果某一位数值相同,则判断下一位数值。
  • 4.可以简单记忆法:通配符和继承权重为0,标签选择器为1,类(伪类)选择器为10,id选择器100,行内样式表为100,!important无穷大
  • 5.继承的权重是0,如果该元素没有直接选中,不管父元素权重多高,子元素得到的权重都是0

权重的叠加

权重叠加:如果是复合选择器,则会有权重叠加,需要计算权重,直接相加计算对比

  • div ul li -----> 0,0,0,3
  • .nav ul li -----> 0,0,1,2
  • a:hover -----> 0,0,1,1
  • .nav a -----> 0,0,1,1
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        li {
            color:red;
        }

        .pig {
            color: green;
        }

    </style>
</head>
<body>
    <ul>
        <li class="pig">大猪蹄子</li>
        <li>大肘子</li>
        <li>猪尾巴</li>
    </ul>
</body>
</html>

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        .nav li {
            color:red;
        }

        /*如果只是.pig是不会变成绿色的,
        因为权重没有.nav li相加的权重大,如果
        加上.nav .pig权重就大于.nav li了*/
        .nav .pig {
            color:green;
        }
    </style>
</head>
<body>
    <ul class="nav">
        <li class="pig">大猪蹄子</li>
        <li>大肘子</li>
        <li>猪尾巴</li>
    </ul>
</body>
</html>

在这里插入图片描述