前端CSS | 青训营笔记

82 阅读3分钟

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

本课重点

  • CSS简介
  • CSS求值过程
  • CSS布局

CSS简介

层叠样式表(Cascading Style Sheet,简称:CSS)是为网页添加样式的代码。CSS结构由选择器、声明、属性、属性的值四个部分组成。

CSS求值过程

  1. 根据DOM树和样式规则进行筛选,通过选择器是否匹配、属性是否有效、是否符合当前meida来进行筛选。
  2. 得到Declared Values,得到一个元素的可能的0或多个声明值。
  3. 按照样式来源、是否important、选择器的特异性、书写顺序等来选择优先级最高的属性值,此属性值唯一,称为Cascaded Value。
  4. 当Cascaded Value为空时,使用继承或初始值。因此一定会有且只有一个Specified Value。
  5. resolving:对一些相对值和关键字进行转化。某一些计算值的转化会在接下来的formatting步骤中进行。
  6. constraining:小数像素无法渲染,因此将小数像素转化为整数。以及max-width限制时选择什么值。

CSS布局

布局是为了确定内容的大小和位置。可以根据元素、容器、兄弟节点和内容等信息来计算。CSS布局有常规流、浮动和绝对定位三种布局方式。

常规流

常规流中一般有行级、块级、表格布局、FireBox和Gird布局等方式。比如display有block、inline、inline-block、none等属性,对应了块级排版、行级排版等排版格式。行级和块级都有相应的排版规则。

行级、块级布局

CSS的基础为Box模型,Box中有border,padding,margin,width和height等元素。

height和width的计算: 根据选取模型不同分为content-box和border-box,content-box以content部分的长与宽,border-box以border部分的长与宽。一般来说用border-box的比较多。
margin collapse现象: 即外边距折叠,发生在垂直方向上,垂直方向上相邻两元素的margin相遇时不会相加,而是选择margin较大的一方的值作为间隔margin。

行级元素内部出现块级元素时,系统会自动生成块级元素包裹行级元素。如下图所示:

FlexBox布局

FlexBox是一种一维的布局模型,可以控制子级盒子的摆放流向、摆放顺序、盒子的宽度和高度、水平和垂直方向的对齐和是否允许拆行等排版。是进行布局时使用较多的一种方式。display: flex即可使用flexbox布局。

使用flex布局时有主轴和侧轴两个概念,主轴方向即元素延伸的方向,侧轴垂直于主轴。flexibility属性可以设置子项的弹性,当容器有剩余空间时,会伸展;容器空间不足时会收缩。flex-grow的数值表示元素的弹性大小,同理还有flex-shrink和flex-basis。

Grid布局

Grid是一种二维布局模型。display: grid即可使用grid布局。具体使用方法可见MDN文档。


绝对定位

绝对定位利用position属性,包括了static、relative、absolute、fixed四个值。