当前位置:网站首页>[Mobile Web] Mobile terminal adaptation
[Mobile Web] Mobile terminal adaptation
2022-08-01 21:47:00 【DomCode】
1、什么是viewport
viewport翻译成中文的意思大致是视图、视窗.在移动端设备中,整块显示屏就相当于视图、视窗.但这种说法也并不完全正确.因为在移动端设备中,浏览器视图并不是整个屏幕.因此viewport又被分为了3种 layout viewport、visual viewport、ideal viewport
为了能够适配到pc端开发页面中,大部分浏览器把viewport的宽度设为了980px 这个浏览器默认设置的视图被称为 layout viewport.我们可以使document.documentElement.clientWidth 来获取.
由于layout viewport的宽度是远大于浏览器宽度的,因此我们需要一个新的viewport来代表浏览器的可视区域宽度,This view is calledvisual viewport我们可以使用window.innerWidth来获取.
现在我们已经有两个viewport了,layout viewport 和 visual viewport.但浏览器觉得还不够,因为现在越来越多的网站都会为移动设备进行单独的设计,所以必须还要有一个能完美适配移动设备的ideal viewport.
ideal viewport 并没有一个固定的尺寸,Different devices have different ones ideal viewport.比如iphone5的 ideal viewport是 320px 而 iphone6s的 ideal viewport却是 375px
2、viewport的单位vw、vh
vw、vh将ideal viewport分成了一百份.vw即 viewport width vh即viewport height
- 1vw等于视图单位的1%的宽度
- 1vh等于视图单位的1%的高度
如果设计稿的视图为375px 那么1vw 等于 3.75px
在配置开始之前 我们依然需要一个vue-cli项目 在项目的index.html 我们需要在head标签中添加如下代码:
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
3、viewport适配解决方案
要使用viewport适配 我们必须安装postcss-px-to-viewport这个包.postcss-px-to-viewport则是将px单位转换为vw、vh.
//引入 postcss-px-to-viewport
npm install postcss-px-to-viewport --save-dev
安装完成后 我们需要进行postcss插件相关的配置 在根目录新建一个名为postcss.config.js的文件,如果项目中已包含该文件则无需新建.在文件中写入如下代码:
//postcss.config.js
module.exports = {
plugins: {
'postcss-px-to-viewport': {
unitToConvert: "px", // 要转化的单位
viewportWidth: 375, // UI设计稿的宽度
unitPrecision: 6, // 转换后的精度,即小数点位数
propList: ["*"], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换
viewportUnit: "vw", // 指定需要转换成的视窗单位,默认vw
fontViewportUnit: "vw", // 指定字体需要转换成的视窗单位,默认vw selectorBlackList: ["wrap"], // 指定不转换为视窗单位的类名,
minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换
mediaQuery: true, // 是否在媒体查询的css代码中也进行转换,默认false
replace: true, // 是否转换后直接更换属性值
exclude: [/node_modules/], // 设置忽略文件,用正则做目录名匹配
}
}
}
postcss-px-to-viewportThere is a third-party component library compatibility issue.比如在设计稿为750px时使用vant组件库会将vant组件的样式缩小.
4、解决第三方组件库兼容问题
vant组件库的设计稿是按照375px来开发的.因此在viewportWidth为750px时会出现转换问题.
// postcss.config.js
const path = require('path');
module.exports = ({
webpack }) => {
const viewWidth = webpack.resourcePath.includes(path.join('node_modules', 'vant')) ? 375 : 750;
return {
plugins: {
autoprefixer: {
},
"postcss-px-to-viewport": {
unitToConvert: "px",
viewportWidth: viewWidth,
unitPrecision: 6,
propList: ["*"],
viewportUnit: "vw",
fontViewportUnit: "vw",
selectorBlackList: [],
minPixelValue: 1,
mediaQuery: true,
exclude: [],
landscape: false
}
}
}
}
如果读取的node_modules中的文件是vant,那么就将设计稿变为375px.如果读取的文件不是vant的文件,那么就将设计稿变为750px.这样就可以避免vant组件在750px下出现样式缩小的问题了.同理 这对于其他的移动端UI组件库同样有效果.我们只需要改动这行代码即可
const viewWidth = webpack.resourcePath.includes(path.join('node_modules', 'vant')) ? 375 : 750;
至此,我们的viewport的适配就做好了,只需要按照设计稿的比例进行开发就可以了.
边栏推荐
- The difference between groupByKey and reduceBykey
- C Pitfalls and Defects Chapter 7 Portability Defects 7.6 Memory Location 0
- shell specification and variables
- 你居然不懂Bitmap和Drawable? 相关知识大扫盲
- 第3讲:MySQL数据库中常见的几种表字段数据类型
- Spark集群搭建
- Chapter 12, target recognition of digital image processing
- Port protocol for WEB penetration
- Based on php online learning platform management system acquisition (php graduation design)
- MySQL related knowledge
猜你喜欢
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.4 K&R C
不卷了!入职字节跳动一周就果断跑了。
恒星的正方形问题
Upload markdown documents to blog garden
还在纠结报表工具的选型么?来看看这个
一个关于操作数据库的建议—用户密码
Based on php Xiangxi tourism website management system acquisition (php graduation design)
Based on php online learning platform management system acquisition (php graduation design)
Kubernetes Scheduler全解析
shell规范与变量
随机推荐
第一讲 测试知多少
”sed“ shell脚本三剑客
shell规范与变量
JVM内存结构详解
shell specification and variables
C pitfalls and pitfalls Chapter 8 Suggestions and answers 8.2 Answers
AIDL通信
网络水军第一课:手写自动弹幕
The Microsoft campus ambassador to shout you to autumn recruit!
ModuleNotFoundError: No module named 'yaml'
Based on php tourism website management system acquisition (php graduation design)
越长大越孤单
WEB渗透之SQL 注入
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.5 ANSI C Today
C expert programming
[@synthesize in Objective-C]
方舟生存进化是什么游戏?好不好玩
第3讲:MySQL数据库中常见的几种表字段数据类型
Uses of Anacoda
Shell编程条件语句