1.由来
- 宏观角度:大屏看板要刚好占满屏幕,不能留有空白区域,也不能出现内容溢出,或者出现滚动条的情形
- 微观角度:内容必须跟着屏幕分辨率的变化而变化,分辨率大的内容跟着大,分辨率小的内容跟着小
2.CSS自适应单位
- CSS中的自适应单位有2种:vw/wh 和 rem
- vw/wh:100vw当前视口宽度,优点是无需依赖js即可自适应屏幕大小,缺点是无法直接用其书写具体的样式大小(字体大小,边框大小,边距大小等)
- rem:1rem为当前html元素的字体大小,优点相对于vw方便书写样式大小(字体大小,边框大小,边距大小等),缺点是每次屏幕发生变化都依赖js进行初始化
3.自适应时机
- 页面初始化时:必须做自适应(重要)
- 页面开启全屏,切换全屏时:全屏切换一般只会影响页面高度,因为非全屏时,浏览器菜单栏,工具栏有占据一部分屏幕高度。这种高度的差异变化,会导致影响一些表格分页,或者echarts图表的展示,会有影响,但不会很大,做不做自适应看项目要求
- 页面窗口化时:生产环境使用时,不会出现这种窗口化的情形,这种场景可以不考虑
4.px转vw
- 鉴于vw的特性,可以在开发中使用px进行大小设置,在代码编译的过程使用工具自动将样式中的px转换为vw,只需要设定好转换规则即可
- 安装 postcss-px-to-viewport
npm i postcss-px-to-viewport -D
- 配置:在项目根目录创建文件 postcss.config.js ,写入以下内容
module.exports = {
plugins: {
"postcss-px-to-viewport": {
viewportWidth: 3840, //视口的宽度,对应的时设计稿的宽度/2,一般为750
viewportHeight: 2160, //视口的高度,对应的是设计稿的高度(也可以不配置)
unitPrecision: 5, //指定‘px’转换为视口单位值的小数位数(很多时候无法整除)
viewportUnit: 'vw', //指定需要转换成的视口单位,建议使用vw
selectorBlankList: ['ignore', 'tab-bar'], //指定不需要转换的类
minPixelValue: 1, //小于或等于‘1px’不转换为视口单位
mediaQuery: false,//允许在媒体查询中转换为‘px’
exclude:[/Tabbar/,/node_modules/] //不需要转化的组件文件名正则,必须是正则表达式
}
}
}
- 效果:符合转换规则的px将自动转换为vw,可以在生产环境中自动随着视口的大小变化而变化,从而做到自适应