浏览器渲染原理
步骤
- 根据 HTML 构建 HTML 树(DOM)
- 根据 CSS 构建 CSS 树(CSSOM)
- 将两棵树合并成一颗渲染树(render tree)
- Layout 布局(文档流、盒模型、计算大小和位置)
- Paint 绘制(把边框颜色、文字颜色、阴影等画出来)
- Compose 合成(根据层叠关系展示画面)
transform 全解
四个常用功能
- 位移 translate
- 缩放 scale
- 旋转 rotate
- 倾斜 skew
注意:这些功能一般都需要配合 transition 过渡。inline 不支持 transform,需要先变成 block
translate
translateX(<length-percentage>)translateY(<length-percentage>)translate(<length-percentage>, <length-percentage>?)translateZ(<length>) 且父容器 perspactivetranslate3d(X, Y, Z)
translate(-50%, -50%) 可做绝对定位元素的居中
scale
scaleX(<number>)scaleY(<number>)scale(<number>, <number>?)
rotate
rotate([<angle> | <zero>])rotateX([<angle> | <zero>]),以 X 轴旋转rotateY([<angle> | <zero>]),以 Y 轴旋转rotateZ([<angle> | <zero>]),以 Z 轴旋转rotate3d([<angle> | <zero>])
skew
skewX([<angle> | <zero>)skewY([<angle> | <zeor>)skew([<angle> | <zeor>], [<angle> | <zero>]?)
多重效果
通过将以上属性组合使用,实现一些复杂效果
transition 过渡
作用
补充中间帧
语法
- transition: 属性名 时长 过渡方式 延迟
- transition: left 200ms linear
- transition: left 200ms, top 400ms 可以用逗号分隔两个不同的属性
- transition: all 200ms 可以用 all 代表所有属性
- 过渡方式有:linear | ease | ease-in | ease-out | ease-in-out | cubic-bezier | step-start | step-end | steps
注意
并不是所有属性都能过渡
- display: none => block 没法过渡
- 一般改成 visibility: hidden => visible
过渡必须要有起始
比如 hover 和 非 hover 就是两次动画
如果有中间点,可以通过下列两种方法解决
-
使用两次 transform
.a === transform ===> .b
.b === transform ===> .c
-
使用 animation
声明关键帧
添加动画
animation
@keyframes 完整语法
- 一种写法是 from to
@keyframes xxx{
from{
transform: translateX(0%);
}
to{
transform: translateX(100%);
}
}
复制代码
- 另一种写法是百分数
@keyframes xxx{
0%{
transform: none;
}
66.66%{
transform: translateX(200px);
}
100%{
transform: translateX(200px) translateY(100px);
}
}
复制代码
animation 缩写语法
animation: 时长 | 过渡方式 | 延迟 | 次数 | 方向 | 填充模式 | 是否暂停 | 动画名;
- 时长:1s 或 1000ms
- 过渡方式:跟 transition 取值一样
- 次数:3 或者 2.4 或者 infinite
- 方向:reverse | alternate | alternate-reverse
- 填充模式:none | forwards | backwards | both
- 是否暂停:paused | running
- 以上所有属性都有对应的单独属性