webpack移动端适配具体如何实现
Admin 2022-07-18 群英技术资讯 1368 次浏览
这篇文章主要介绍“webpack移动端适配具体如何实现”,有一些人在webpack移动端适配具体如何实现的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。W3C对rem的定义是 font-size of the root element,它是一个只相对于浏览器的根元素(HTML元素)的font-size的来确定的单位,也就是说对于不同宽度的机型,我们只需要计算出对应的根元素的字体大小,用同样的css代码可以实现等比适配。考虑最简单的情况:
html代码片段
//移动页面中不可少的meta,将设备屏幕的宽度设置成将文档宽度 <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=0">
js代码片段
//根据文档宽度计算根元素的字体大小,以文档宽度的1/10为例,如果屏幕宽度为375,那么根元素font-size就为37.5px var w = document.documentElement.clientWidth; document.documentElement.style.fontSize = w / 10 + 'px';
css代码片段
//此时如果在css中写
.div{
width: 2rem;
}
//那么这个div的宽度就是75px,同理如果屏幕宽度为360,那么div就宽72px。
//日常开发中,比较常见的设计稿是750px,在设计稿中一个区域的高度为30px的话,
//在css中写成 height:0.4rem(30/75),就能完成等比缩放
而实际开发中,我们通常在webpack构建的时候使用插件来实现rem适配:postcss-pxtorem 和 lib-flexible。
安装:npm i postcss-pxtorem --D 和 npm i amfe-flexible --S
在webpack.config.js中配置postcss-loader
module.exports = {
entry: "./src/index.js",
output: {
path: path.join(__dirname,"/dist"),
filename: "bundle.js"
},
module:{
rules:[
{
test: /\.css$/,
use: ['style-loader','css-loader','postcss-loader'] //配置postcss-loader
}
]
},
}
在项目根目录新建.postcssrc.js文件,在其中写入postcss-pxtorem插件配置
module.exports = {
"plugins": {
"postcss-pxtorem": {
rootValue: 75, //750的设计稿
propList: ['*']
}
}
}
在entry指定的入口js文件("./src/index.js")中引入lib-flexible
import 'amfe-flexible'
这样,就可以在css中直接写设计稿中的绝对像素值,比如一个div#test在750设计稿中的宽度为200px,就可以直接这样写,而不用换算了。
#test{
width: 200px
}
另外一种方案是使用vw:1% of viewport's width, 它是相对浏览器可视区域宽度的单位。
//移动页面中不可少的meta,将设备屏幕的宽度设置成将文档宽度 <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=0">
在移动端,如果配置了width = device-width,那么100vw就是屏幕宽度。
使用vw布局,就不需要再像rem那样,用js中去动态设置根元素的font-size,而是直接相对于屏幕宽度。比如750的设计稿中,一个div的宽度是200px,那么就可以写:width: 200 / 750 * 100 vw
而使用webpack,我们可以用 postcss-px-to-viewport 插件来实现:
安装:npm i postcss-px-to-viewport --D
如上rem那样在webpack.config.js配置 postcss-loader。
在项目根目录新建.postcssrc.js文件,在其中写入 postcss-px-to-viewport 插件配置
module.exports = {
"plugins": {
'postcss-px-to-viewport': {
viewportWidth: 750 //750的设计稿
}
}
}
这样也就可以在css中直接写设计稿中的绝对像素值,示例同上rem的示例。
有时候我们在移动端会使用其他组件库,引用像vant、mint-ui这样的第三方UI框架,因为第三方框架用的是px单位,基于375px的设计稿,如果我们的项目是750px的设计稿,就不能用同一个viewportWidth进行适配。
此时可以在.postcssrc.js中如下配置(以vw为例,rem也类似):
const path = require('path')
module.exports = ({file}) => {
//如果使用vant UI框架
const width = file.dirname.includes(path.join('node_modules', 'vant')) ? 375 : 750;
return {
"plugins": {
"postcss-px-to-viewport": {
viewportWidth: width,
}
}
}
}
rem和vw都是常用的移动端适配解决方案。两者的区别,首先是在兼容性上,rem可以兼容更老的浏览器版本,参考caniuse网站 caniuse.com/ ;其次是rem需要通过js计算根元素的字体大小,vm是纯css实现。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Web项目中,登录,注册等等功能都需要表单提交,当把用户的数据提交给后台之前,前端一般要做一些力所能及的校验,比如是否填写,填写的长度,密码是否符合规范等等,前端校验可以避免提交不合规范的表单。
这篇文章主要为大家介绍了JS对象创建与继承的汇总梳理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
本文主要介绍了JavaScript如何用面向对象的方式封装拖拽对象,通过3种方式来实现,帮助读者更好的理解其原理
javascript修改td值的方法:1、利用innerHTML属性,语法“指定td节点.innerHTML = "新内容";”;2、利用innerText属性,语法“指定td节点.innerText = "新内容";”。
本文主要介绍了基于element-ui表格的二次封装实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008