盒子模型
box-sizing
- content-box
- 默认值
- width=content
- border-box
- 旧版IE
- width=content+padding+border
元素类型
inline
- 根据content-area填充
- 不能设置宽高
- 只能设置左右padding、margin
block
- 默认宽度100%,默认占一行
- 可以设置宽高边距
inline-block
BFC
- 内部元素如何布局定位
- 和其他元素的关系
- layout的基本单位
- 块级上下文
- 行内上下文
边距折叠
- 元素自身的margin-bottom和margin-top相邻时也会折叠
- 同一BFC下相邻的块元素
- 创建BFC避免边距折叠
边距折叠的计算
- 参加计算的margin都是正值,取margin中较大的作为计算后的值
- 参与计算的margin都是负值,取其中绝对值较大的,然后从0开始负向位移
- 参与计算的margin有正有负,先取出负 margin 中绝对值中最大的,然后,和正 margin 值中最大的 margin 相加。
创建BFC
- body根元素
- float不为none
- position取值为absolute或者fixed
- display取值为inline-block、table-cell、table-caption、flex、inline-flex
- overflow不为visible
作用
- 包含浮动元素
- 用于清除浮动
- 防止浮动元素被覆盖
定位
static
- 默认
- 文档流位置
- body作为原点
inherit 继承
fixed
- 默认相对于可视窗口固定
- 祖先元素有transform,则相对改祖先元素
absolute
- 距离最近的非static的祖先元素开始定位
- html作为原点
relative
- 相对于文档中的初始位置
- body作为原点
flex布局
container
- flex-grow
- flex-direction
- row
- row-reverse
- column
- colum-reverse
- flex-wrap
- no-wrap
- wrap
- wrap-reverse
- flex-direction
- justify-content
- align-items
- align-content
item
- order
- 排序,小的在前面
- flex 默认flex:0 1 auto;
- flex-grow -决定是否拉伸
- flex-shirnk - 决定是否收缩
- flex-basis - 与width同时出现时,覆盖width
flex的各种取值
赋三个值
.item { flex: 100 200 300px; } // 等价于 .item { flex-grow: 100; flex-shrink: 200; flex-basis: 300px; }
赋值为auto
//等价于 .item { flex-grow: 1; flex-shrink: 1; flex-basis: auto; }
赋值为none
// 等价于 .item { flex-grow: 0; flex-shrink: 0; flex-basis: auto; }
赋值为非负数
// 该数字为 flex-grow 值,而flex-shrink 的值取 1,flex-basis 取 0%: .item { flex: 1; } // 等价于 .item { flex-grow: 1; flex-shrink: 1; flex-basis: 0%; }
赋值为一个长度或百分比
// 将长度或百分比设为 flex-basis 值,而flex-grow 取 1,flex-shrink 取 1 .item1 { flex: 0%; } // 等价于 .item1 { flex-grow: 1; flex-shrink: 1; flex-basis: 0%; }
优先级
权重如下
- !important 最高
- inline:1000
- id:100
- class:10
- tag:1
预处理
增强css
- less、sass
- css loader
原理
- 中间处理优化
- 解析成css
- 处理步骤
- 增强css语法解析
- css AST
- 生成目标css
动画
四种动画
- 合成器动画
- 合成器自身触发,比如惯性滚动,效率非常高
- Blink触发交给Layer Compositor处理运行(transform动画,opacity动画)
- 非合成器动画
- 合成器无法单独运行的transition和animation动画
- 定时器或者requestAnimationFrame驱动的JS动画--性能最差
transition
- 不要直接操作宽高位置属性,会导致大量回流或者重绘
- 可以操作transform属性,transform会在合成层处理
- 或者用opacity、filter
animation
- animation key frame
硬件加速
原理--开启GPU加速
- 每个层都有一个独立的Render线程
- transformZ
- transform3D
优化
- will-change设置单独合成图层
- 尽量用合成层动画
- 减少回流重绘
- 开启硬件加速
- 防止JS阻塞