CSS
选择器优先级
- !important 最优先
- 内联样式
css 选择器优先级
- 1,1,1,1 从大到小依次:
- id 选择器
- 类选择器/属性选择器/伪类选择器
- 标签/伪元素选择器
- 连接符选择器:相邻元素/后代元素/
- 通配符选择器
- 继承选择器 0,0,0,0
伪类: :last-chid, :hover
伪元素:::after
伪元素与伪类
- 伪元素: 不存在文档中。 例如:::after
- 伪类: 存在文档中。 例如: :last-child
可继承属性
字体属性 font-family font-weight font-size
文本属性 color line-height
可见属性 visibility
display
display:inline 水平方向的 margin,padding 有效,垂直方向无效。
隐藏元素
display: none
不会渲染该元素,不占据页面空间。visibility: hidden
会渲染,仍占据页面空间,不响应绑定的监听事件。opacity: 0
会渲染,占据空间,响应绑定的监听事件。- 绝对定位到视口之外。
display:none 与 visibility:hidden
- 是否渲染
- 修改是否会引发回流与重绘
- 是否被继承。display:none 会使他以及后代在页面都不能出现,而 hidden 对于未设置 visible 的子代继承,设置了则可以显示。
transition 与 animation
- transition 过渡效果。需要事件触发,比如 hover,focus 等,需要设置开始效果和结束效果。
- animation 动画效果。不需要触发,设定好事件后可以自己执行。但可以设置多个关键帧(@keyframe)。
transform 与绝对定位
- transform:不触发浏览器回流和重绘,利用 GPU,效率高。
- 绝对定位: 触发回流和重绘,利用 CPU,效率低。
盒模型
图片格式
- gif 动图,只有 256 色
- jpeg/jpg 有损压缩,色彩丰富,适合存储照片
处理矢量图形和Logo等线条感强、色彩对比强烈的压缩后模糊会相当明显。不支持透明度
- png 无损压缩,支持透明度,适合大块相同颜色区域的图像
- svg 矢量图、文本文件、体积小
- webp 有损压缩,体积小
- bmp 无损,不压缩,体积大,不适合网页
how to detect webp support in project
-
使用canvas,
toDataURL('image/webp').indexOf('data:image/webp') == 0
来检测 -
使用一张webp图片判断onload 和onerror 事件
-
在html5中 使用:
<picture>
<source srcset="/path/to/image.webp" type="image/webp" />
<img src="/path/to/image.jpg" alt="insert alt text here" />
</picture>
CSS Sprites
雪碧图,过时技术。将一个页面涉及到的所有图片都包含到一张大图,利用 background-repeat,background-position 实现图片的重复利用。
特点
- 减少网页 http 请求,提高页面性能。
- 维护麻烦,需要手动更新雪碧图,维护位置。
物理像素 逻辑像素
设备像素(物理像素)device pixels
设 备独立像素 device independent pixels
一个设备独立像素里可能包含 1 个或者多个物理像素点,包含的越多则屏幕看起来越清晰。一般没有缩放的情况下,1 个 CSS 像素 等于 1 个设备独立像素。
像素密度 devicePixelRatio
devicePixelRatio = 物理像素 / 设备独立像素。手机上像素密度(DPR)一般为 3,即一个逻辑像素(CSS 像素)=3 个物理像素
常见单位
- 百分比:相对父元素的百分比。
- em :相对父元素的文本的倍数。如果父元素没有 font-size,则相对浏览器默认字体的倍数。
- rem:相对根元素的倍数。可以实现简单响应式布局。
- vw/vh/vmax/vmin
移动端适配
- 适配不同像素密度 媒体查询图片切换不同精度
- 适配不同屏幕大小 rem/vw 等相对单位或媒体查询
CSS 提升性能
加载
- CSS 文件压缩,减小体积。
- 减少使用 @import,使用 link 效率更高。link 在页面加载时一起加载,import 在页面加载完成后再加载。