层叠上下文
层叠上下文是对HTML元素的三维构想,将元素沿着垂真屏幕的虚构的Z轴排开
形成新的层叠上下文的条件(任一即可):
- position :relative或absolute;并且z-index不是auto
- position :fixed sticky
- flex或grid的子元素;并且z-index不是auto
- opacity的值小于1
- transform的值不为none
- will-change的值不为通用值
- ........详见规范*
编写z-index的建议
1.使用css变量或者预处理语言的变量,管理z-index的值 2.将预设间隔设置10或100,方便后续的插入
变形、过度、动画
transform 3D
3D相关属性: transform:translate3d、rotate3d、 scales3d、matrix3d等 transform-origin:right top、50px30px等 表示变形时依据的原点 transform-style:flat或preserve-3d看子元素的3d表现 perspective:观看点距离z=O这个平面的距离, 可以在transform中用perspective()使用作用为当前元素, 也可以直接使用,给后代元素一个统一值 perspective-origin:观看者的位置,如top、bottom等 backface-visibility:元素正面只有朝向观察者的时候可见
transition 过渡
通过指定某些元素属性从一种起始状态,在一段时间内以某种变化节奏,过渡到终止状态
div{
transition:<property><duration><timing-function><delay>;
}
animation动画
- @keyframes关键帧用来定义动画过程中出现的关键样式
- *animation-相关属性用来为元素添加动画 animation-name:定义好的关键帧的名字 animation-duration:动画时长 animation-timing-function:动画节奏 animation-delay:延时开始的时间 animation-iteration-count:执行次数 animation-direction:是否反向或交替 animation-fill-mode:动画执行前后的样式采用 animation-play-state:动画运行状态
@keyframes fadeInDown{
from{
opacity:0;
transform:translate3d(0,-100%,0);
}
to{
opacity:1;
transform:translate3d(0,0,0);
}
}
.fadeInDown {
animation-name:fadeInDown;
animation-duration:1s;
animation-fill-mode:both;
}
- 如何写动画性能更好? 1.尽量不用触发reflow的属性 2.在遇到性能问题时可以触发硬件加速,比如设置wil-change属性、设置transform3d等 3.尽量使用transform和opacity去写动画
响应式设计
原则
- 优先选用流式布局,如百分比、flex、grid等
- 使用响应式图片,匹配尺寸,节省带宽
- 使用媒体查询为不同的设备类型做适配
- 给移动端设备设置简单、统一的视口
- 使用相对长度,em、rem、w做为长度度量
媒体查询
媒体查询允许某些样式只在页面满足特定条件时才生效。我们可以将媒体类型(如screen、pit)以及媒体特性(如视口宽度、屏幕比例、 设备方向:横向或纵向)做为约束条件。
使用媒体查询的一些Tips 1.媒体查询同样遵循cascading层叠覆盖原则,min-和max-选择一个 2.由于设备的多样化逐渐不可枚举,断点的选择尽量根据内容选择 3.由于断点的增加会增加样式处理的复杂度,所以尽量减少断点
设备像素、参考像素和移动设备视口
- 设备像素
设备像素(物理像素):显示器上绘制的最小单位,显示屏通过控制每个像素点的颜色,使屏幕显示出不同的图像。设备像素和设备相关,屏幕从工厂出来那天起,它上面的物理像素点就固定不变了。
dpi:每英寸多少点
ppi:每英寸多小像素数
- css像素
CSS像素(reference pixel)其实是一个视角单位。规范给出的定义是,1css像素是从一臂之遥看解析度为96DPI(即1英寸96点)的设备输出时,1点(即1/96英寸)的视角。 通常认为常人臂长为28英寸,那么视线与水平线的夹角是: (1/96)in/(28in2P1/360deg)=0.0213度
- DPR设备像素比
移动端的viewport
布局视口(viewport)是页面中html元素(根元素)的包含块,默认情况下,window.document..documentElement.clientWidth就是viewport的宽度。 在移动设备中,默认的布局视口由于历史兼容pc屏幕的原因,并不符合需求,我们经常需要用标签对viewport进行设定,来完成移动端设备的适配。