CSS中class的优先级

在我们为HTML的元素设计样式时,有时会在一个元素中使用到多个class,又或者是这个元素符合多个定义的class,这时候我们就要注意这些class之间的优先级了。

class的定义方式有以下几种:

一、       .a

class的优先级与在元素中的指定顺序无关,和class的定义顺序有关,最后定义的优先级最高。

HTML:

  <div class="a b"> 		
      ab
  </div>
  <div class="b a">
      ba 
  </div>

CSS:

.a{
  color:red;
}

.b{
  color:green;
}

此时页面显示结果为:

可以看到现在都是使用了  .b 的样式,然后把css中 a 和 b 的位置调换

.b{
  color:green;
}

.a{
  color:red;
}

此时页面显示结果为:

 

二.  、       .a.b(没有空格)

这种写法是当 class 中同时出现 a和b时才起作用(class="a b")

HTML:

  <div class="a"> 
      a
  </div>
  <div class="b">
      b 
  </div>
  <div class="c">
      c
  </div>
  <div class="a b">
      ab 
  </div>
  <div class="a b c">
      abc
  </div>

CSS:

.a.b.c{
  color:orange;
}

.a.b{
  color:brown;
}

.a{
  color:red;
}

.b{
  color:green;
}

.c{
  color:blue;
}

此时页面显示结果为:

这种写法的优先级是按class 的个数来决定的,数量越多,优先级越高。

 

三、          .a .b(有空格)

这种写法是选择 a 的所有 b 子节点

HTML:

<div class="a">
  a
  <div class="b">
    a b
    <div class="b">
      a b b
      <div class="b">
        a b b b
      </div>
      <div class="a">
        a b b a
        <div class="b c">
          a b b a bc
        </div>
      </div>
    </div>
  </div>
</div>

CSS:

.a .b{
  color:orange;
}

.a{
  color:red;
}

.b{
  color:green;
}

.c{
  color:blue;
}

页面显示结果为:

a 的所有 b 子节点都显示为绿色。

 

四、          .a>.b

与   .a .b(有空格)类似,不过只对子一代的 b 生效

HTML:同上

CSS:

.a>.b{
  color:orange;
}

.a{
  color:red;
}

.b{
  color:green;
}

.c{
  color:blue;
}

页面的显示结果为:

可以看到只对子一代 a b  和  a b b a bc生效

五、          .a~.b

a~b 是指出现在a后的同一层次的所有的b

HTML:

  <div class="a"> 
      a
  </div>
  <div class="b">
      b 
  </div>
  <div class="a b">
      ab 
  </div>
  <div class="a">
      a
    <div class="b">
      a b
    </div>
  </div>

CSS:

.a~.b{
  color:orange;
}

.a{
  color:red;
}

.b{
  color:green;
}

.c{
  color:blue;
}

页面的显示结果为:

所有出现在 a 后的同一层次的 b 都为橘色

六、          .a+.b

.a+.b  与.a~.b类似,是指刚好出现在a后的同一层次的第一个b

HTML:(同上)

CSS:

.a+.b{
  color:orange;
}

.a{
  color:red;
}

.b{
  color:green;
}

.c{
  color:blue;
}

页面的显示结果为:

出现在 a 后的第二个 ab 没有变成橘色

七、          混合出现

当上述的定义方式同时出现时,先按class的数量排优先级,数量越多,优先级越高。数量相同时,按定义的先后顺序排优先级,最后定义的优先级最高。

HTML:

  <div class="a">
    a
    <div class="a">
      a a
    </div>
    <div class="a b">
      a ab
    </div>
  </div>

CSS:

.a+.b{
  color:yellow;
}

.a~.b{
  color:blue;
}

.a .b{
  color:brown;
}

.a.b{
  color:orange;
} 

.a{
  color:red;
}

.b{
  color:green;
}

页面显示结果为:

a ab 同时满足上面的所有class,最终的颜色为  .a.b 定义的 orange,在变换上面四个class的顺序后,发现总是最后定义的class生效。结果就不一一放出了。

 

八、          !important

class中有 !important 为后缀的样式的优先级无视以上规则。

HTML:(同上)

CSS:(.b{}中加了!important)

.a.b{
  color:orange;
} 

.a+.b{
  color:yellow;
}

.a~.b{
  color:blue;
}

.a .b{
  color:brown;
}

.a{
  color:red;
}

.b{
  color:green !important;
}

 页面的显示结果为:

 

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值