理解CSS | 青训营笔记

112 阅读5分钟

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

重点内容

1. CSS 代码构成

2. CSS 使用方法

3. CSS 流程之选择器组、文本渲染

4. 调试 CSS

5. CSS 选择器的特异度

6. CSS 继承

7. CSS 求值过程解析

8. CSS 布局方式及相关技术

9. CSS 盒模型 - 行级

10. CSS 盒模型 - 块级

详细知识点介绍

1.CSS是什么

Cascading Style Sheets 层叠样式表

是一种用来表现HTML或XML等文件样式的计算机语言。

用来定义页面元素的样式

  • 设置字体和颜色
  • 设置位置和大小
  • 添加动画效果

2.在页面中使用CSS

CSS的使用方式分为三种,分别为:外链、嵌入、内联。

  1. 外链——在html文件中,使用link标签引入CSS文件

<link rel="stylesheet" href="xxx.css">

  1. 嵌入——在html文件中,使用style标签直接包裹CSS代码
<style>
    body {
        width: 100px;
        height: 100px;
    }
</style>
  1. 内联——在html文件中,通过标签的style属性使用CSS代码

<p style="margin:1em 0">Example Content</p>

3.CSS是如何工作的

image.png

  • 浏览器载入HTML文件。

  • 将HTML文件转化成一个DOM,DOM是文件在计算机内存中的表现形式。

  • 接下来,浏览器会拉取该HTML相关的大部分资源,比如嵌入到页面的图片、视频和CSS样式。

  • 浏览器拉取到CSS之后会进行解析,根据选择器的不同类型(比如element、class、id等等)把他们分到不同的“桶”中。 浏览器基于它找到的不同的选择器,将不同的规则(基于选择器的规则,如元素选择器、类选择器、id选择器等)应用在对应的DOM的节点中,并添加节点依赖的样式(这个中间步骤称为渲染树)。

  • 上述的规则应用于渲染树之后,渲染树会依照应该出现的结构进行布局。

  • 网页展示在屏幕上。

4.选择器

选择器用于找出页面中的元素

以便给他们设置样式

1.按照标签名、类名或 id; 
2.按照属性;
3.按照DOM树中的位置
  • 统配选择器

image.png

选中文件中所有元素

  • 标签选择器

image.png

选中文件中所有该标签的元素

  • id选择器

image.png

选中文件中id属性为该id名的所有元素

  • 类选择器

image.png

选中文件中class属性为该类名的所有元素

  • 属性选择器

选择属性值、标签名相符的所有元素

  • 伪类选择器

状态类伪类:元素在特定的状态下被选中

链接:link、visited、hover、active;
输入框:checked、disabled、enabled、focus、invalid;

结构类伪类:元素在DOM树中的位置相关

如:first-child、last-child等。
  • 组合

image.png

4.颜色

在CSS中颜色使用三种方式:RGB模型、HSL模型、关键字。

image.png

image.png

image.png

5.字体

font-family: "Gill Sans Extrabold", sans-serif;

字体族为了兼容性问题一般需要设置多个,匹配规则按照从前往后的方式进行匹配。

1.  字体列表最后写上通用字体族;
2.  英文字体放在中文字体前面;

image.png

使用web font,需要使用@font-face,但是会增加系统的开销

image.png

字体大小:font-size,其取值有三种方式,分别为关键字、长度单位(px、em)、百分比。

当字体使用百分比时是相对父元素字体大小的。

字体粗细:font-weight,可以取数字值(100-900),也可以使用关键字 normal(400)、bold(700)。

行高:line-height,表示两行文字之间baseline的距离。

对齐方式:text-align

文本装饰:text-decoration

空白:white-space,取值

  • normal

  • 连续的空白符会被合并,换行符会被当作空白符来处理。换行在填充「行框盒子」时是必要。

  • nowrap

  • 和 normal 一样,连续的空白符会被合并。但文本内的换行无效。

  • pre

  • 连续的空白符会被保留。在遇到换行符时才会换行。

  • pre-wrap

  • 连续的空白符会被保留。在遇到换行符,或者需要为了填充「行框盒子」时才会换行。

  • pre-line

  • 连续的空白符会被合并。在遇到换行符,或者需要为了填充「行框盒子」时会换行。

6.CSS的调试

image.png

7.选择器特异度

image.png

第一个特异度:122;第二个特异度:22

8.继承

某些属性会自动继承其父元素的计算值,除非显式指定一个值

  • 一般和文字相关的属性会被继承
  • 一般和盒模型相关的属性不会被继承 使用关键字inherit可以继承

9.CSS求值过程

image.png

10.布局是什么

1.确定内容的大小和位置的算法 2.依据元素、容器、兄弟节点和内容等信息来计算

布局相关技术

布局常用的相关技术有三种,常规流、浮动、绝对定位。

image.png

11.盒模型

box-sizing: content-box

image.png

image.png

12.行级排版上下文 - IFC

Inline Formatting Context (IFC)

只包含行级盒子的容器会创建一个IFC

IFC 内的排版规则

  • 盒子在一行内水平摆放
  • 一行放不下时,换行显示
  • text-align 决定一行内盒子的水平对齐
  • vertical-align 决定一个盒子在行内的垂直对齐
  • 避开浮动(float)元素*

13.块级排版上下文 - BFC

Block Formatting Context (BFC)

某些容器会创建一个BFC

  • 根元素
  • 浮动、绝对定位、inline-block
  • Flex子项和Grid子项
  • overflow 值不是 visible 的块盒
  • display: flow-root;

BFC 内的排版规则

  • 盒子从上到下摆放
  • 垂直 margin 合并(塌陷现象)
  • BFC 内盒子的 margin 不会与外面的合并
  • BFC 不会和浮动元素重叠

14.Flex 布局

它可以控制子级盒子的:

  • 摆放的流向 ( → ← ↑ ↓ )
  • 摆放顺序
  • 盒子宽度和高度
  • 水平和垂直方向的对齐
  • 是否允许折行

15.Grid 布局

image.png

image.png

16.position属性

image.png

image.png

image.png