Go to comments

HTML+CSS宝典 CSS基础 继承

继承的意思是,子元素会继承父元素的某些CSS属性

一、CSS属性的继承

下面代码中,父元素div下有三个子元素,p元素p、ul>li元素、div元素

想要把页面上文字的颜色全部统一设置为红颜色,字体大小设置为32像素,然后字体行高是2.5

1). 选中div下面的p元素 div p{} 

2). 选中div下面的li元素 div li{} 

3). 选中div下面的div元素 div div{} 

挨个设置每个元素下文字的样式,但是这样做实际是非常麻烦的

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <style>
    div p{
        color: red;
        font-size: 32px;
        line-height: 2.5;
    }
    div li{
        color: red;
        font-size: 32px;
        line-height: 2.5;
    }
    div div{
        color: red;
        font-size: 32px;
        line-height: 2.5;
    }
    </style>
    <title>继承</title>
</head>
<body>

    <div>
        <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit. Ex dignissimos aspernatur harum eligendi. Repellat dolores necessitatibus, ab soluta officia temporibus ipsa obcaecati maiores dolore ipsam nihil, a nemo impedit amet!
        </p>

        <ul>
            <li>Lorem.</li>
            <li>Neque.</li>
            <li>Consequatur!</li>
            <li>Fuga.</li>
            <li>Sequi.</li>
            <li>Dolorem.</li>
            <li>Incidunt!</li>
            <li>Vero.</li>
            <li>Excepturi.</li>
            <li>Asperiores!</li>
        </ul>

        <div>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Rem fuga fugiat nostrum dolore facilis alias. Voluptatum temporibus nihil velit quidem totam perferendis consectetur laudantium in possimus qui, sequi amet dicta.
        </div>
    </div>

</body>
</html>


其实可以做一件事就搞定了

1). 给外面的父元素div一个  .container{  }  类样式(container表示一个容器)

2). 直接把样式写到父元素div上面  .contarner{ color:red;  font-size:2em;  line-height: 2.5; }  

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
    .container{
        color: red;
        font-size: 2em;
        line-height: 2.5;
    }
    body{
        font-family: Arial, Helvetica, sans-serif;
    }
</style>
<title>继承</title>
</head>
<body>

    <div class="container">
        <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit. Ex dignissimos aspernatur harum eligendi. Repellat dolores necessitatibus, ab soluta officia temporibus ipsa obcaecati maiores dolore ipsam nihil, a nemo impedit amet!
        </p>

        <ul>
            <li>Lorem.</li>
            <li>Neque.</li>
            <li>Consequatur!</li>
            <li>Fuga.</li>
            <li>Sequi.</li>
            <li>Dolorem.</li>
            <li>Incidunt!</li>
            <li>Vero.</li>
            <li>Excepturi.</li>
            <li>Asperiores!</li>
        </ul>

        <div>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Rem fuga fugiat nostrum dolore facilis alias. Voluptatum temporibus nihil velit quidem totam perferendis consectetur laudantium in possimus qui, sequi amet dicta.
        </div>
    </div>

</body>
</html>

三个子元素变成了红色,因为有继承( 子元素 会继承 父元素的某些css属性 ),

1).  p 元素是子元素,会继承自 div.container 父元素的样式,

2).  li 后代元素不是子元素 li 继承自 ul ,而 ul 的颜色又继承 div.container ,这样一层一层的传递过来的,因此后代元素也会受到影响,这是关于继承。

二、不是所有的CSS属性都能继承的

并不是所有的css属性都能够继承的,只有某些css属性才能被继承,这里的某些属性到底是指那些呢?


总结一下(不一个一个的说)通常跟文字内容相关的属性都能被继承

 color                         文字颜色可以被继承

 background-color    背景颜色是不能被继承的 

 font-size                   文字子大小可以被继承

 font-weight              文字粗细可以被继承

 font-family               可以被继承

设置字体类型

通常网页里面字体类型是统一的,因此我们往往会直接选中body元素,然后给body设置字体

body{
    font-family: Arial, Helvetica, sans-serif;
}


比如看淘宝网是这样设置的

body, button, input, select, textarea {
    font: 12px/1.5 tahoma,arial,'Hiragino Sans GB','\5b8b\4f53',sans-serif;
}

淘宝设置的是简写属性font

12px/1.5  前面设置的是字体大小12px以及行高1.5

tahoma, arial, 'Hiragino Sans GB', '\5b8b\4f53', sans-serif;  后面是挨个写的字体类型

三、简写属性

说一下“简写属性”的意思是,写一个属性可以同时设置多个CSS属性值,

就是有时候要设置字体大小、字体类型等多个CSS属性,懒得挨写各种css属性了,可以使用一个简写的属性一起设置了


有很多的简写属性,看一下官方文档:

百度搜索关键字 font mdn,点击打开 https://developer.mozilla.org/zh-CN/docs/Web/CSS/font

1、font属性的设置

 font 属性可以用来作为  font-style,   font-variant  font-weight,   font-size,   line-height,   font-family  这些属性的简写


font-variant

上面的font-variant属性没见过,他的意思是可以将网页中的小写字母转换成大写字母,

比如设置为 font-variant: small-caps 转成大写字母,small-caps全称叫小型大写字母( 不是真正的大写字母 )

<p style="color:red; font-size:2em; line-height:2.5; font-variant:small-caps;">

    Lorem ipsum, dolor sit amet consectetur adipisicing elit. Ex dignissimos aspernatur harum eligendi. Repellat dolores necessitatibus, ab soluta officia temporibus ipsa obcaecati maiores dolore ipsam nihil, a nemo impedit amet!

</p>

small-caps不是真正的大写字母,叫小型的大写字母,仔细观察转换的大写字母要比真正的大写字母要小一点,但写法上是大写字母

Lorem ipsum, dolor sit amet consectetur adipisicing elit. Ex dignissimos aspernatur harum eligendi. Repellat dolores necessitatibus, ab soluta officia temporibus ipsa obcaecati maiores dolore ipsam nihil, a nemo impedit amet!

2、font属性的具体语法

font: 1.2em "Fira Sans", sans-serif;

 1.2em 是字体大小

 "Fira Sans", sans-serif  是字体类型


font: italic 1.2em "Fira Sans", serif;

 italic  字体样式是斜体

 1.2em   字体大小

 "Fira Sans", serif;   字体类型


font: italic small-caps bold 16px/2 cursive;

 italic   字体样式是斜体

 small-caps   小型的大写字母

 bold   加粗

 16px/2   字体大小16像素,行高是2倍

 cursive;   字体类型,cursive在英文里面表示的连笔写(需要字体支持)


font: small-caps bold 24px/1 sans-serif;

小型大写字母、加粗、24像素/行高是1、字体类型sans-serif


font: caption;

 caption   字体类型


font属性也是语法糖,最终还是会生成一个一个的属性。


继续说继承

通常跟文字相关的内容都是会被继承的,所以通常把字体设置到body元素里面,

这样所有的子元素都会去继承font属性,然后所有的子元素的子元素又会继承,一层一层传递过去,可以达到把整个网页的字体统一。

四、哪些属性是不能被继承的?

有些属性是不能被继承的,可以通过在mdn里面查询,哪些属性是可以被继承的?

比如查询font-family属性:https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-family

是否是继承属性  yes,是可以被继承的


也可以在浏览器检查里面看,点击p元素看一下

 Inherited from div.container     Inherited from表示继承自div.container的属性,有color属性、font-size属性、line-height属性这些都有被继承。

 Inherited from boy                    表示继承自body元素的font-family属性也继承过来了。

image.png

不能被继承的属性

比如给 .contarner 设置一个背景颜色 background: lightblue; 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
    .container{
        color: red;
        font-size:2em;
        line-height: 2.5;
        background:lightblue;
    }
    body{
        font-family: Arial, Helvetica, sans-serif;
    }
</style>
<title>背景颜色不能被继承</title>
</head>
<body>

    <div class="container">
        <p>
            Lorem ipsum, dolor sit amet consectetur adipisicing elit. Ex dignissimos aspernatur harum eligendi. Repellat dolores necessitatibus, ab soluta officia temporibus ipsa obcaecati maiores dolore ipsam nihil, a nemo impedit amet!
        </p>

        <ul>
            <li>Lorem.</li>
            <li>Neque.</li>
            <li>Consequatur!</li>
            <li>Fuga.</li>
            <li>Sequi.</li>
            <li>Dolorem.</li>
            <li>Incidunt!</li>
            <li>Vero.</li>
            <li>Excepturi.</li>
            <li>Asperiores!</li>
        </ul>

        <div>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Rem fuga fugiat nostrum dolore facilis alias. Voluptatum temporibus nihil velit quidem totam perferendis consectetur laudantium in possimus qui, sequi amet dicta.
        </div>
    </div>

</body>
</html>

整个区域有了背景,但是实际上p元素他自己是没有继承背景颜色的,可是看上去p元素好像也有背景颜色,这是因为默认情况下p元素背景是透明的,所以看到了背后外层容器.container的背景颜色。

image.png

p元素自身是没有背景的,我们来验证一下,检查(f12)点击p元素

 Inherited from div.container  继承的时候 background: lightblue; 属性是灰色的(半透明),这个灰色表示这个属性没有被继承过来,因为背景属性是不能被继承的。


我们再来验证一下,点击选项卡computed(computed意思最终计算结果)

搜索一下p元素的背景 background-color ,搜索结果显示  rgba(0, 0, 0, 0 最后一个数字0叫透明通道,表示的意思是全透明,所以可以穿透的这p元素看到他背后的东西

image.png



p元素背景颜色没有被继承过来,在搜一下别的属性,搜索 font-size 继承过来了32像素

image.png

然后搜一下

 font-weight  显示的是font-weight: 400  继承过来了(值是400,最后都换算从数字)

 line-height   显示的是line-height: 80px  继承过来了

五、总结

不是所有属性都能使用继承,通常是跟文字相关的属性可以继承

1、宽高属性不能被继承

weigth属性   不能被继承(因为不是关于文字的)

height属性    不能被继承(因为不是关于文字的)

2、这些可以被继承

text-decoration   文字修饰,给文本加线  可以被继承

letter-space         文字间歇,可以被继承

text-align             元素内部文字的水平排序方式,可以被继承

3、疑问

继承非常简单,有些属性能继承,有些属性不能继承,能继承的属性他会从父元素一层一层传递过去,

到此有没有什么疑问,既然有继承,那继承 和 层叠会不会有冲突呢?


从父元素继承的颜色,自己又有颜色,继承的颜色 和 层叠的颜色 怎么来解决冲突的过程呢?

下节课学习“属性值的计算过程”的知识就彻底明白了,css到底是怎样工作的,浏览器是怎样渲染页面的。



Leave a comment 0 Comments.

Leave a Reply

换一张