CSS继承与层叠优先级秒懂

265 阅读2分钟

引言

css继承与层叠性是十分重要的基础知识,掌握其原理与规律可以写出更优雅的css代码。

抛出问题

css代码

.box1 .box2{
    color:red;
}
.box2{
    color:gold;
}

html代码

<div class="box1">
    <div class="box2">我是什么颜色?</div>
</div>

页面效果

image.png

各位大爷们,上面这个是我踏马遇到的类似代码,老大在全局定义了类似.box1 .box2的样式,我直接使用.box2修改样式却发现无效(服)。兄弟们,这就是css经典的层叠性问题。

CSS继承

css继承性顾明四姨就是:后代的标签可以继承祖先标签的部分属性

css可以继承的属性:以font,color,text,line开头的通常99%都可以继承

例子

可以发现标签box1设置的属性color,font,text,line的属性都被后代标签继承了。

<div class="box1">

    <div class="box2">

        我是什么颜色?

        <p>我是p</p>

    </div>

</div>


.box1{

    width: 500px;

    height: 500px;

    color:red;

    font-size: 50px;

    line-height: 25px;

    text-align: center;

    border: 1px solid gold;

}
image.png

CSS的层叠性

css选择器优先级

从高到低顺序是

!important>id选择器>类选择器>标签>其它

层叠性规律

1.直接选择器优先级>间接选择器优先级(狗都会)

看代码.box1是间接设置,而.box1 .box2是直接选择,因此是gold颜色

//html
<div class="box1">
    <div class="box2">
        我是什么颜色?
    </div>
</div>


//css
.box1 .box2{
    color:gold;
}
.box1{
    color:red;
}

2.多个直接选择器时(重重重重点)

1. 统计id,谁id多优先级高
2. id相同,统计类,谁类多优先级高
3. id与类都相同,谁标签多谁优先级高
4. id,类,标签个数都相同,则后面的样式覆盖前面的样式。

例子1

结果:金色。按照规律二者都是直接控制,先统计id个数都是0,再统计类,第一个类的个数大于第二个类的个数,因此优先级更高。

 //html
<div class="box1">
    <div class="box2">
        我是什么颜色?
    </div>
</div>


//css
.box1 .box2{
    color:gold;
}
.box2{
    color:red;
}

例子2

结果:金色。按照规律二者都是直接控制,先统计id个数都是0,再统计类,第一个类的个数大于第二个类的个数,因此优先级更高。

 //html
<div class="box1">
    <div class="box2">
        我是什么颜色?
    </div>
</div>


//css
.box1 .box2{
    color:gold;
}
.box1 div{
    color:red;
}

例子3

结果:红色。按照规律二者都是直接控制,先统计id个数都是1,再统计类,都是1,再统计标签也是1。所以后面的样式覆盖前面的样式了。

 //html
<div id="box1" class="div1">
    <div id="box2" class="div2">
        <div>我是什么颜色?</div>
    </div>
</div>


//css
#box1 .box2 div{
    color:gold;
}
.div1 #box2 div{
    color:red;
}

总结

学会的小伙伴们666走一波。