-
选择器的优先级
- 越特殊的选择器优先级越高
-
继承
- 某些属性会自动继承其父元素的计算值,除非显式指定一个值
-
显示继承
- 有些元素不能自动继承父级元素的样式,可以使用inherit显示的继承父级样式
-
初始值
- CSS中每个属性都有一个初始值
- background-color的初始值为transparent
- margin-left的初始值为0
- 可以使用initial关键字显式重置为初始值
- background-color:initial
- CSS中每个属性都有一个初始值
-
CSS的求值过程
- 浏览器拿到html代码后会把其解析为一颗DOM树
- 遍历所有的元素以及它的属性和样式值
- 一个元素的某属性可能有0到多个声明值
- cascading按照来源,!important,选择器特异性,书写顺序等选出优先级最高的一个属性值
- 选出层叠值以后作为其属性值
- 当层叠值为空时,使用继承或者初始值
- 经过前面的cascading和defaulting之后,保证指定值一定不为空
- 将一些绝对值,比如em转为px,相对路径转为绝对路径(也有的相对值不转换)
- 获得计算值
- 将计算值进一步转换,比如关键字,百分比等都转为绝对值
- 获得使用值(进行实际布局时使用的值,不会再有相对值或关键字)
- 将小数像素转为整数
- 渲染时实际生效的值
-
布局相关技术
- 常规流
- 行级
- 块级
- 表格布局
- FlexBox
- Grid布局
- 浮动
- 绝对定位
- 常规流
-
盒模型
-
当我们把元素的长度宽度都设置为0时,只剩下边框,我们可以画出各种形状的三角形
-
margin:auto水平居中
-
在垂直方向上,margin只会取比较大那个边距
一个下外边距为100px一个上外边距为100px,最后边距为100px
-
box-sizing:content-box是content的宽和高,是默认
-
box-sizing:border-box是包含border,padding在内的宽和高,常用
-
overflow控制溢出的部分如何处理
overflow:visible // 默认,超出了但还是展示出来 overflow:hidden // 超出部分隐藏 overflow:scroll // 滚动 -
盒模型中两种常见的布局规则
- 块级
- 块级的盒子不和其他盒子并列摆放
- 适用于所有盒模型属性
- 行级
- 和其它行级盒子一起放在一行或拆成多行
- 盒模型中的width,height不适用
- 块级
-
块级元素和行级元素
-
块级元素
-
生成块级盒子
body, article, div, main, section, h1-6, p, ul, li等
display:block
-
-
行级元素
-
生成行级盒子
-
内容分散在多个行盒中
span, em, strong, cite, code等
display:inline
-
-
-
display属性
- block:块级盒子
- inline:行级盒子
- inline-block 本身是行级,可以放在行盒中;可以设置宽高;作为一个整体不会被拆散成多行
- none 排版时完全被忽略
-
-
行级排版上下文IFC
-
只包含行级盒子就会创建一个IFC
-
IFC内排版规则
- 盒子在一行内水平摆放
- 一行放不下时,换行显示
- text-align 决定一行内盒子的水平对齐
- vertical-align 决定一个盒子在行内的垂直对齐
- 避开浮动元素
-
当单词比较长时,不会被拆成两行,如果想换行可使用
overflow:wrap:break-word; // 这样以后单词也能换行
-
-
块级排版上下文BFC
- 某些容器会创建一个BFC
- 根元素 // html
- 浮动, 绝对定位, inline-block
- Flex子项和Grid子项
- overflow值不是visible的块盒
- display:flow-root
- BFC排版规则
- 盒子从上到下摆放
- 垂直margin合并
- BFC内盒子的margin不会与外面的合并
- BFC不会和浮动元素重叠
- 某些容器会创建一个BFC
-
Flex Box
-
一种新的排版方式
-
它可以控制子级盒子的:
-
摆放的流向
-
摆放的顺序
-
盒子宽度和高度
-
水平和垂直方向的对齐
-
是否允许拆行
dispaly:flex; // 这样它的排版规则不再是IFC或BFC,而是flex
-
-
主轴与侧轴
-
主轴布局设置
-
侧轴布局设置
默认是stretch
baseline:基线对齐
-
-
Flexibility
-
flex-grow(弹性能力)
最开始的时候大家都是100px,但是这一行还剩有空间,设置a,b元素的弹性为a为2,b为1,剩下的空间按比例分给a,b, a分到2/3, b分到1/3
-
flex-shrink(压缩能力)
当空间不够时,该元素能被压缩的能力. 如果设置a: flex-shrink:0 就说明压不动
-
flex(各种缩写)
flex-basis设置元素不被压缩也不被拉伸时的宽度`
-
-
-
Grid布局
flex-box是单一方向的, Grid是二维的
display:grid; // 使元素生成一个块级的Grid容器-
使用grid-template 相关属性将容器划分为网格
1fr,一份的概念,指除去指定的后, 剩余的划分为份,这个例子中就是b占一份.c占一份
-
设置每一个子项占哪些行/列
给每条网格线从1开始标号, 使用grid line标出开始的横线,开始的竖线,结束的横线,结束的竖线
例子:
-
-
除去常规流以后的Float
-
可实现文字环绕图片
-
-
除去常规流以后的绝对定位position
-
position属性
-
static 默认值,非定位元素,参与常规流里面的布局
-
relative 相对自身原本位置偏移,但不脱离文档流,相对于自己原本占用的空间又偏移一定的值
-
absolute 绝对定位,相对于非static祖先元素定位, 完全脱离常规的文档流
其它元素的布局相当于该元素不存在一样
例子:
-
fixed 相对于视口绝对定位,脱离了常规的文档流
-
-