CSS优先级

在网页设计中我们经常需要用CSS选择器选中元素并添加样式,但如果两个选择器选中同一个元素,到底哪个样式生效呢?曾经我以为后面的会覆盖前面的,但是事实并非如此简单。

css的优先级是用四个数字表示的(a,b,c,d),数字的大小就代表优先级的大小,a,b,c,d分别对应如下几条规则。

  • style样式,很少在标签内加入style属性,所以一般为0,如果有则为1
  • css选择器中包含id数量的总和
  • 其他css选择器的总和
  • 标签和伪元素和伪类和总和

如果两个css选择器具有相同的优先级,则在样式表中后面的那个起作用。通配符的优先级为0。

例如

#leftbar li:first-child   的优先级为 0,1,0,2

h2.title                       的优先级为0,0,1,1

简单解释,我们可以看如下几个例子:

a>b(1000>0100)(style>id所以红色)

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        #id3{
            color:yellow;
        }

    </style>
</head>
<body>
<div id ="id1" class="class1">
    <div id="id2" class="class2">
        <div id="id3" class="class3" style="color: red">red</div>
    </div>
</div>
</body>
</html>

b>c (0100>0040) [id="id3"]属于属性选择器,不能包含在id选择器中,再加行三个类选择,共计4个。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        #id3{
            color: red;;
        }
        .class1>.class2>.class3[id="id3"]{
            color:yellow;
        }


    </style>
</head>
<body>
<div id ="id1" class="class1">
    <div id="id2" class="class2">
        <div id="id3" class="class3">red</div>
    </div>
</div>
</body>
</html>

 b>b(0030>0010)

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .class1>.class2>.class3{
            color:red;
        }
        .class3{
            color: yellow;
        }

    </style>
</head>
<body>
<div id ="id1" class="class1">
    <div id="id2" class="class2">
        <div id="id3" class="class3">red</div>
    </div>
</div>
</body>
</html>

c>d(0020>0012)

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
       .class2>.class3{
           color:red;
       }
        div .class2:first-child{
            color: yellow;
        }

    </style>
</head>
<body>
<div id ="id1" class="class1">
    <div id="id2" class="class2">
        <div id="id3" class="class3">red</div>
    </div>
</div>
</body>
</html>

现在大家应该对CSS优先级规则有了最直观认识,但是上面并不包括!important,!important是用来强制覆盖样式的,并不关心优先级,被!important覆盖的元素默认有最高优先级,但有一个元素被两个!important覆盖,则还是按照CSS优先级确定规则。

for example:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
       .class2>.class3[id="id3"]{
           color:red ;
       }
        div .class2>.class3{
            color: yellow !important;
        }

    </style>
</head>
<body>
<div id ="id1" class="class1">
    <div id="id2" class="class2">
        <div id="id3" class="class3">yellow</div>
    </div>
</div>
</body>
</html>

值得一提的是使用!important时注意伪类。

研究这个时,顺便看了一下伪类和伪元素的区别:

CSS伪类用于向某些选择器添加特殊效果

CSS伪元素用于将特殊的效果添加到某些选择器

例如:

:hover 当鼠标悬停元素上方时,向元素添加样式

:before 在某元素之前插入某些内容

伪元素和伪类之所以这么容易混淆,是因为他们的效果类似而且写法相仿,但实际上CSS3为了区分两者,已经明确规定了伪类用一个冒号来表示,而伪元素则用两个冒号来表示。:before-->::before

本文参考如下链接,如想更一步了解,自行阅读

CSS伪类和伪元素的区别:https://segmentfault.com/a/1190000000484493

转载于:https://my.oschina.net/abely/blog/686844

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值