HTML5基础——12、CSS三大特性

  大家好,我是阿赵。继续学习H5。
  之前学习了很多CSS的写法,可能有人已经注意到一个问题。一个元素可能会被多种选择器选中,如果各个选择器都指定了显示样式,这个元素应该怎样显示呢?
  这里来学习一下CSS的三大特性。

一、 层叠性

   先看例子:

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    div {
      border: 1px solid black;
      text-align: center;
      width: 200px;
      height: 200px;
      background-color: blue;
    }

    div {
      background-color: red;
    }

    div {
      background-color: green;
    }
  </style>
</head>

<body>
  <div></div>
</body>

  显示效果:
在这里插入图片描述

  这个例子里面,在style标签里,定义了3次div的background-color,最终显示出来的效果, 是绿色,所以冲突的时候,以后面的属性为准。第一个div里面指定了边框、对齐方式、宽高,而后面的div并没有指定这些属性,这些属性也生效了。
  所以可以总结一下CSS层叠性的特点:

  1. 如果重复指定了相同的属性,造成了冲突,会以后面指定的属性覆盖前面的
  2. 如果属性没有冲突,则不会产生层叠,会保留属性。
      这个特点可以通过Chrome调试工具看出来:
    在这里插入图片描述

  在调试工具里面,由于指定了多次div的background-color,所以有2次的颜色被划掉了,只保留了最后一次的。然而没有冲突的属性,是一直生效的。

二、 继承性

先看例子:

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    div {
      font-size: 40px;
    }
  </style>
</head>

<body>
  <div>
    Hello World!
    <span>span1</span>
    <span>span2</span>
  </div>
  <span>span3</span>
</body>

  显示效果
在这里插入图片描述

  可以看出,我在style里面指定了div的字体大小,然后在下面的body里面,作为div子级的span的字体大小也跟着div变化了,但没有作为div的子级的span,字体没有发生变化。
  这可以总结出继承特性的特点,就是如果子级没有指定某个样式时,会继承父级的样式。
  这个特性可以方便我们做一些统一的默认设置。比如,对于内容来说,顶级的标签一般都是body,我们可以在body指定一些默认的参数,比如字体、颜色等,这样整个body下面所有的子元素都会生效。

三、 优先级

先看例子:

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    div {
      width: 200px;
      height: 200px;
      background-color: blue;
    }

    .box {
      background-color: yellow;
    }

    #box3 {
      background-color: green;
    }
  </style>
</head>

<body>
  <div>我是元素</div>
  <div class="box">我是类</div>
  <div id="box3" class="box">我是id</div>
  <div style="width: 100px; height: 100px; background-color: red;" id="box3" class="box">我是行内样式</div>
</body>

  显示效果:
在这里插入图片描述

  先看style里面,定义了3种选择器的样式

div {
  width: 200px;
  height: 200px;
  background-color: blue;
}

.box {
  background-color: yellow;
}

#box3 {
  background-color: green;
}

  然后看body里面,第一个

<div>我是元素</div>

  由于它只是指定了元素标签,没有类,也没有id,所以它会显示div的样式,也就是蓝色。
  再看第二个

<div class="box">我是类</div>

  这里指定了类,所以会显示.box的样式,也就是黄色。
  再看第三个

<div id="box3" class="box">我是id</div>

  这里有div标签,有id,有类box,最后显示的效果是绿色,这证明了id的优先级是比类要高的。
  看最后一个

<div style="width: 100px; height: 100px; background-color: red;" id="box3" class="box">我是行内样式</div>

  这里包含了div标签、id和类,但最后却直接使用了行内指定的样式。所以行内样式的优先级是比id还高的。
  还有一个更高优先级的,比如我把刚才的例子改成:

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    div {
      width: 200px;
      height: 200px;
      background-color: blue !important;

    }

    .box {
      background-color: yellow;
    }

    #box3 {
      background-color: green;
    }
  </style>
</head>

<body>
  <div>我是元素</div>
  <div class="box">我是类</div>
  <div id="box3" class="box">我是id</div>
  <div style="width: 100px; height: 100px; background-color: red;" id="box3" class="box">我是行内样式</div>
</body>

  主要的修改是在div样式的background-color后面加了一个!important:

background-color: blue !important;

  现在的显示变成了:
在这里插入图片描述

  所以可以整理一下,CSS选择器的优先级规则:

1、 !important

  只要在某个CSS样式属性后面加上!important,则不论其他怎样设置,都会以这个为优先。

2、 行内样式

  行内样式的优先级比用选择器指定样式高

3、 id选择器

  在使用选择器的情况下,指定id的选择器优先级最高

4、 类、伪类选择器

  类和伪类的优先级比id要低,但比直接指定元素要高

5、 元素选择器

  元素选择指的就是直接div这种,在没有指定更高优先级的情况下才会生效

6、 继承

  继承的优先级是最低的,只有在没有指定其他CSS样式的情况下,才会让继承生效。

  需要注意的是,如果使用的是复合选择器,那么首先是以上面的优先规则来排序,如果复合里面含有的元素最高优先级相同,则把最高优先级的选择器数量相加,数量多的,优先级大。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值