深入CSS | 青训营笔记

232 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 2 天

课程重点

  1. 选择器的特异度
  2. CSS 属性的继承
  3. CSS 布局方式
  4. CSS 盒子模型

详细知识点介绍:

1. 选择器的特异度(Specificity)

即 CSS 选择器的优先级,当一个元素能够匹配多个样式时,浏览器会根据优先级为元素赋予正确的样式。

一般情况下,ID选择器优先级最高,其次是类选择器/属性选择器/伪类,优先级最低的是类型选择器和伪元素选择器。不同选择器的叠加也会改变优先级。!important 的样式会覆盖其他样式。

在 VSCode 中,鼠标悬浮在选择器上是,能够实时看到选择器的优先级数值,如下图所示

image.png

2. CSS 属性的继承

关于继承的详细介绍,可以参考MDN的相关文章 developer.mozilla.org/zh-CN/docs/…

不同的 CSS 属性有着不同的继承规则。对于一个能够被继承的样式属性,子元素能够从父元素继承相同的属性值,而不需要额外的设置。当然,对于一个默认不继承的样式,也可以通过将其值设置为inherit来强制从父元素继承。

想要知道一个属性是否是继承属性,可以参考MDN的规范条目,例如font-family是一个可以继承的属性,那么,在MDN developer.mozilla.org/zh-CN/docs/… 相关文档的 #规范 条目中,是否是继承属性 一栏的值是 yes,反之亦然。

3. CSS 布局方式

CSS 存在许多种布局方式。总体上分为三类:常规流/文档流、浮动、绝对定位。其中,在正常的文档流中,又可以细分出很多布局方式,例如行级、块级、表格布局、弹性布局(flex)、网格布局(grid)

4. CSS 盒子模型

将元素理解成一个个盒子

注意:下面的内容会因为 box-sizing 属性值的不同而产生不同的定义,默认 content-box

image.png

width: content box 的宽度

height: content box 的高度

padding: 元素内边距,百分比相对于元素宽度

border: 元素的边框样式、粗细和颜色

margin: 元素外边距,百分比相对于元素宽度

当 box-sizing 取值为 border-box 时,模型会发生相应变化。

image.png

(其实就是宽度和高度将包含边框和内边距)

块级元素

display 属性值为 block 的元素。例如 bodyarticledivmainsectionph1~h6ul/olli

行级元素

display 属性值为 inline 的元素。

实践练习例子:

1. 特异度相关例子

猜猜下面的文字是什么颜色?

<div class="wrapper1">
  <div class="text1">文本1</div>
</div>
<style>
  .wrapper1 .text1 {
    color: red;
  }
  
  .text1 {
    color: black;
  }
</style>

正确答案是红色

image.png

虽然黑色的属性声明在后面,理应覆盖掉前面的红色,但是前面是两个类选择器的叠加,优先级是 0, 2, 0 ,后者只有一个类选择器,优先级是 0, 1, 0,所以最终浏览器应用了红色。

2. 属性的继承

<div class="text1">这是一段<strong>文本</strong></div>
<style>
  .text1 {
    color: red;
    border: 1px solid blue;
  }
</style>

image.png

由于 color 是一个继承属性,所以类名为 text1div 元素设置 color: red; 后,被其内部的子标签 strong 继承了,strong 标签的颜色也是红色的。但 border 不是一个继承属性,所以边框没有继承。

<div class="text1">这是一段<strong>文本</strong></div>
<style>
  .text1 {
    color: red;
    border: 1px solid blue;
  }
  
  strong {
    border: inherit;
  }
</style>

image.png

strong 添加样式 border: inherit; 后,父元素的 border 属性也被继承下来了。