写了这么久的代码,你知道CSS中的继承与层叠吗?

349 阅读3分钟

这是我参与8月更文挑战的第30天,活动详情查看:8月更文挑战

Hello 大家好,我是一碗周,不是你想的那个“一碗粥”,是一个不想被喝掉的前端👨🏻‍💻,如果我写的文章有幸可以得到你的青睐,万分有幸~

这是【从头学前端】系列文章的第二十八篇-《CSS中的继承与层叠》

本系列文章在掘金首发,编写不易转载请获得允许

写在前面

本篇文章将来学习CSS中的层叠与继承的内容,本篇文章中包含了CSS中继承的概念,可以继承的属性,以及关于继承的关键字等内容。

层叠

CSS的中文翻译为层叠样式表 ,所谓的层叠样式就是同样的属性出现在一个元素上,为了解决这种“冲突”的优先级规则,也就是层叠 ,具体的规则如下:

  1. 具有important的样式的优先级是最高的。

  2. 选择器的优先级,具体如下:

    1. 行内样式

    2. id选择器

    3. class选择器

    4. 元素选择器

    上述可以概述为“越具体重要”

  3. 源代码的顺序,如果上面一致的话,则最终的样式取决于谁在后面

继承

CSS中的继承指的是当某个属性的值省略 时,其默认的值有可能来源与祖先元素一致,如果是这样的话这个特性就称为继承。

可以继承的属性

CSS中并不是所有的属性都可以继承,如何查看一个属性是否可以继承可以通过MDN查看,如下图展示了color属性是否可以继承。

01_color属性是否可以继承.png

CSS中的可继承属性数量庞大,具体如下表所示:

属性作用
font组合字体
font-family规定元素的字体系列
font-weight设置字体的粗细
font-size设置字体的尺寸
font-style定义字体的风格
text-indent文本缩进
text-align文本水平对齐
line-height行高
word-spacing增加或减少单词间的空白
letter-spacing增加或减少字符间的空白
text-transform控制文本大小写
direction规定文本的书写方向
color文本颜色
visibility元素可见性
一些关于表格的属性
一些关于列表的属性
cursor设置光标样式的属性

上面的表格中展示了一些常用的可以继承的属性。

不可继承属性

不可继承的属性中最典型的就是heightwidth,如果宽度和高度继承父级就回导致CSS非常的难用。

控制继承的值

CSS中控制继承的值有三个,分别是

  • inherit:该值会继承父级的值。

  • initial:该值如果存在默认样式,则恢复为默认样式,否则与inherit相同。

  • unset:如果属性为继承属性效果与inherit相同,否则与initial相同。

如下代码展示了控制属性的值的用法:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>控制继承的值</title>
    <style>
        li {
            color: lightskyblue;
        }

        .my-class-1 a {
            color: inherit;
        }

        .my-class-2 a {
            color: initial;
        }

        .my-class-3 a {
            color: unset;
        }
    </style>
</head>

<body>
    <ul>
        <li>默认 <a href="#">链接</a> 颜色</li>
        <li class="my-class-1">值为 inherit <a href="#">链接</a> 颜色</li>
        <li class="my-class-2">值为 initial <a href="#">链接</a> 颜色</li>
        <li class="my-class-3">值为 unset <a href="#">链接</a> 颜色</li>
    </ul>
</body>

</html>

运行代码如下所示:

02_控制属性的值.png

{完}