通过阅读此篇文章, 你将有如下收获
1. 什么是vw
适配
2. vw
适配的兼容性
3. 如何在移动端H5项目webpack
构建中引入vw
适配
4. 大漠老师vw
适配方案中依赖安装的注(pa)意(keng)事(zi)项(shi)
5. 我为小伙伴们准备的一波福利: 开箱📦即用的vw
配置webpack
构建
6. 实际开发中vw
适配的应用
7. vw
适配的坑以及爬坑姿势
8. 文章末尾有彩蛋哟😍颠覆你的开(ban)发(zhuan)体验
一. 什么是vw
适配
¶1.1 vw 相对于视窗的宽度:视窗宽度是100vw, 即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小
¶1.2 <<CSS世界>>作者张鑫旭老师的视区相关单位vw, vh…简介以及可实际应用场景
二. vw
适配的兼容性
¶2.1 可使用viewport
的polyfill方案来完美解决:postcss-viewport-units与它的好基友viewport-units-buggyfill
¶2.1.1 原理
postcss-viewport-units
自动添加content, viewport-units-buggyfill
再把根据content里的数据把vw单位转为px单位, 如下图
¶2.1.2 如何使用
1 | $ npm i -S viewport-units-buggyfill |
1 | const vub = require('viewport-units-buggyfill') |
1 | /* 对图片的特殊处理 */ |
¶2.2 兼容的范围
¶2.3 测试用例
三. 如何在移动端H5项目webpack
构建中引入vw
适配
¶3.1 大漠老师的原文链接
¶3.2 大漠老师所用postcss plugins
和配置的说明
¶3.2.1 插一嘴, 什么是postcss
postcss
是一个平台,其本身不对 CSS
进行处理,但是通过在该平台上集成插件,可以实现对CSS
的操作。
¶3.2.2 核心postcss plugins
: postcss-px-to-viewport
把px
单位转换为vw
、vh
、vmin
或者vmax
这样的视窗单位
1 | // your-project/.postcssrc.js |
¶3.2.2 postcss-import
解决@import
引入路径问题, 配合postcss-url
让你引入文件变得更轻松
¶3.2.3 postcss-url
处理文件,比如图片文件、字体文件等引用路径
¶3.2.4 autoprefixer
让你在编码时不再需要考虑任何浏览器前缀的问题,可以专心撸码
¶3.2.5 postcss-cssnext
该插件可以让我们使用CSS
未来的特性,其会对这些特性做相关的兼容性处理
¶3.2.6 cssnano
压缩和清理CSS
代码。在webpack
中,cssnano
和css-loader
捆绑在一起,所以不需要自己加载它. 记得将postcss-zindex
设置为false
, 否则z-index
的值就会重置为1
¶3.2.7 postcss-aspect-ratio-mini
处理元素容器宽高比
¶3.2.8 postcss-write-svg
处理移动端1px的解决方案,该插件主要使用的是border-image和background来做1px的相关处理
¶3.2.9 postcss-viewport-units
给CSS的属性添加content的属性,配合viewport-units-buggyfill库给vw、vh、vmin和vmax做适配的操作, 这是一个前面提到的解决兼容性的核心插件
四. 大漠老师vw适配方案中依赖安装的注(pa)意(keng)事(zi)项(shi)
1 | npm i -D postcss-aspect-ratio-mini postcss-px-to-viewport postcss-write-svg postcss-cssnext postcss-viewport-units cssnano |
1 | // your-project/.postcssrc.js |
如果你跟着大漠老师一顿猛操作, 安装依赖时你会发现可能会出现以下问题:
¶4.1 postcss-cssnext
插件被废弃, 推荐用postcss-preset-env
问题:
解决:
1 | $ npm un -D postcss-cssnext |
1 | // your-project/.postcssrc.js |
¶4.2 如果你用vue cli3
会缺少部分依赖
问题:
解决:
1 | $ npm i -D postcss-import postcss-url |
¶4.3 cssnano
的preset
使用了advanced
, 需要安装对应依赖
问题:
解决:
1 | $ npm i -D cssnano-preset-advanced |
五. 我为小伙伴们准备的一波福利: 开箱📦即用的vw
配置webpack
构建
¶5.1 采用最新npm
依赖版本的豪华配置, 可npm-check-update
1 | // ... |
¶5.2 采用vue-cli2
的配置
1 | // ... |
¶5.3 采用vue-cli3
的配置
1 | // ... |
六. 实际开发中vw
适配的应用
¶6.1 在css
中写样式
在实际撸码过程,不需要进行任何的计算,直接在代码中根据UI稿写px, 如
1 | .test { |
编译出来的CSS:
1 | .test { |
¶6.2 在js
和template
中写样式, 我们定义一个转换数字为vw的工具类
1 | // your project/src/shared/utils.js |
七. vw
适配的坑以及爬坑姿势(欢迎补充atbulbs@gmail.com)
¶7.1 注意viewport
的变化
如果你在样式中使用了vh单位, 请注意某些webView里键盘弹出时, 100vh对应的实际高度会变小
¶7.2 html2canvas
如果你有在前端截屏的需求, 刚好你用到了html2canvas插件, 而且刚好要适配ios低版本机型, 请使用0.5.0-beta4版本, 并且把加了css-content的标签的内容置空
1 | .target-el { |
八. 说好的彩🍭蛋🥚
¶8.1 彩蛋a: stylus
让你用更优雅 姿势的撸业务代码
¶8.2 彩蛋b: user snippets
和 emmet
/zen coding
让你成为风一般的爱(ban)码(zhuan)仕(de)😂
happy hacking~!