H5C3
flex布局grid布局css作用域css module、scopedcss原子化tailwind css、windi css、unocss- 移动端适配方案
- 分层与合成:为什么
css动画比js高效
常见问题
margin重叠问题inline-block元素空白问题bfc概念- 水平、垂直居中问题
为什么 html 中 css 样式 在前,script 在后
- 浏览器 顺序解析
html,根据dom生成dom树,根据css生成cssom树,然后根据这两个生成render树; - 解析
dom的时候遇到script会暂停dom解析,去下载、解析、运行script文件,耗时过长会导致页面一直空白,所以script一般放在dom的最后; css的link一般不会阻塞dom的解析,但是生成render树前需要先生成cssom,否则也会白屏,所以link一般放在dom前面先。- 实际上,
js的下载、运行 依赖CSSOM,因为js中有可能修改css样式,所以需要等待css的下载解析,间接导致了dom解析的阻塞。

浏览器 回流 和 重绘
- 更新
dom元素的几何属性(如宽、高等)会触发 回流、重绘 - 更新
dom元素的 绘制属性(背景色) 则 不会 触发回流、只会重绘 - 使用
CSS的transform来实现动画效果,这可以避开 回流 和 重绘 阶段,直接在非主线程上执行合成动画操作,能大大提升绘制效率 - 复杂动画元素使用
will-change属性提前告知浏览器该元素将执行复杂动画,让浏览器提前做优化
script 的 defer 和 async
- 默认情况下,脚本的下载和执行会按照文档的先后顺序解析执行。当脚本下载和执行时,文档解析就会被阻塞,在脚本下载和执行完后再继续解析。
defer属性在script标签中表示 异步加载脚本,等文档解析完毕后再执行。async属性表示 异步加载脚本,脚本加载完后会 停止文档解析,转而去执行该脚本。async和defer同时出现,则async优先。
盒模型
布局模型可通过 box-sizing 进行设置,不同值,其计算区域不同:
| 模型 | box-sizing | 计算区域 |
|---|---|---|
| W3C 标准盒模型(默认) | content-box | width/height |
| IE盒模型 | border-box | width/height+padding+border |
| 其他 | padding-box | width/height+padding |
css 兼容方案
- 浏览器
css样式初始化,抹平浏览器间的差异(normalize.css) - 添加
css属性前缀(-webkit-、-moz-、-ms-) - 自动化插件(
Autoprefixer插件)
rgba 和 opacity 的透明效果区别
rgba只作用于 当前元素 颜色和背景色,其 子元素 和 内容 不会继承 透明效果。opacity作用于元素,以及元素内 所有内容 的 透明度。