位置: IT常识 - 正文

Vue 移动端、PC 端适配(vue移动端pc端适配方案)

编辑:rootadmin
Vue 移动端、PC 端适配

推荐整理分享Vue 移动端、PC 端适配(vue移动端pc端适配方案),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue移动端pc端适配方案,vue移动端pc端适配方案,Vue 移动端设计,Vue 移动端模板,vue移动端pc端适配方案,vue移动端pc端适配方案,vue移动端pc端适配,vue移动端pc端不同文件如何交换,内容如对您有帮助,希望把文章链接给更多的朋友!

        Vue 移动端、PC 端适配可以使用 lib-flexible、amfe-flexible、postcss-pxtorem、postcss-px2rem 和 postcss-px-to-viewport 这几个插件。

        lib-flexible 是淘宝手机前端开发团队开发出来的一个开源插件,会自动在 html 的 head 中添加一个 <meta name='viewport'> 的标签,同时会自动设置 html 的 font-size 为屏幕宽度除以10。

        amfe-flexible 是 lib-flexible 的升级版本,使用 vw 作为布局单位,从底层根本上解决了不同尺寸屏幕的适配问题,因为每个屏幕的百分比是固定的、可预测、可控制的。

        postcss-pxtorem 和 postcss-px2rem 插件,用于将 px 单位转化为 rem。可以和 lib-flexible 搭配使用。

        postcss-px-to-viewport 插件用于将 px 单位转化为 vw, vh, vmin, vmax 单位。可以和 amfe-flexible 搭配使用。

移动端方案1:lib-flexible & postcss-pxtorem

        1. 安装依赖 lib-flexible:

npm install lib-flexible --save

        2. 在 main.js 中导入依赖:

import 'lib-flexible/flexible'

        3、安装依赖 postcss-pxtorem:

npm install postcss-pxtorem@5.0.0 --save-dev

        4、配置 postcss-pxtorem:

        vue-cli2:在根目录中的 postcss.config.js (没有新建即可),添加如下代码:

module.exports = { plugins: { "postcss-pxtorem": { rootValue: 37.5, // lib-flexible 将屏幕分成10份(10rem),这里设置表示设计图宽度为10*37.5=375px unitPrecision: 5, // 保留rem小数点多少位 propList: ['*', '!border'], // 存储将被转换的属性列表,'!font-size' 即不对字体进行rem转换 selectorBlackList: ['.radius'], // 要忽略并保留为px的选择器,例如fs-xl类名,里面有关px的样式将不被转换,支持正则写法。 replace: true, mediaQuery: false, //(布尔值)媒体查询( @media screen 之类的)中不生效 minPixelValue: 4, // 设置要替换的最小像素值,px小于4的不会被转换 exclude: /(node_module)/, //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值 } }}

        vue-cli3:在根目录中 vue.config.js (没有新建即可),添加如下代码:

module.exports = { css: { loaderOptions: { postcss: { plugins: [ require('postcss-pxtorem')({ rootValue: 37.5, // lib-flexible 将屏幕分成10份(10rem),这里设置表示设计图宽度为10*37.5=375px unitPrecision: 5, // 保留rem小数点多少位 propList: ['*', '!border'], // 存储将被转换的属性列表,'!font-size' 即不对字体进行rem转换 selectorBlackList: ['.radius'], // 要忽略并保留为px的选择器,例如fs-xl类名,里面有关px的样式将不被转换,支持正则写法。 replace: true, mediaQuery: false, //(布尔值)媒体查询( @media screen 之类的)中不生效 minPixelValue: 4, // 设置要替换的最小像素值,px小于4的不会被转换 exclude: /(node_module)/, //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值 }) ] } } }}Vue 移动端、PC 端适配(vue移动端pc端适配方案)

        5、注意事项

配置完成后注意删除掉 index.html 里的视窗 meta 标签 <meta name='viewport'> 以便让 lib-flexible 插件帮你生成;如果某些 px 尺寸不想转换成 rem ,将 px大写即可。.box{width:200Px;height:200PX;}方案2:lib-flexible & postcss-px2rem

        1. 安装依赖 lib-flexible:

npm install lib-flexible --save

        2. 在 main.js 中导入依赖:

import 'lib-flexible/flexible'

        3、安装依赖 postcss-px2rem:

npm install postcss-px2rem --save-dev

        4、配置 postcss-px2rem:

        vue-cli2:在根目录中的 postcss.config.js (没有新建即可),添加如下代码:

module.exports = { plugins: { "postcss-px2rem": { remUnit: 37.5 //lib-flexible 将屏幕分成10份(10rem),这里设置表示设计图宽度为10*37.5=375px } }}

        vue-cli3:在根目录中的 vue.config.js (没有新建即可),添加如下代码:

module.exports = { css: { loaderOptions: { postcss: { plugins: [ require('postcss-px2rem')({ remUnit: 37.5 //lib-flexible 将屏幕分成10份(10rem),这里设置表示设计图宽度为10*37.5=375px }) ] } } }}

        5、注意事项

配置完成后注意删除掉 index.html 里的视窗 meta 标签 <meta name='viewport'> 以便让 lib-flexible 插件帮你生成;如果某些 px 尺寸不想转换成 rem ,将 px大写即可。.box{width:200Px;height:200PX;}方案3 (推荐):amfe-flexible & postcss-px-to-viewport

        1、安装依赖 amfe-flexible:

npm install amfe-flexible --save

        2、在 main.js 中导入依赖:

import "amfe-flexible/index"

        3、安装依赖 postcss-px-to-viewport:

npm install postcss-px-to-viewport --save-dev

        4、配置  postcss-px-to-viewport:

         vue-cli2:在根目录中的 postcss.config.js (没有新建即可),添加如下代码:

module.exports = { plugins: { 'postcss-px-to-viewport': { unitToConvert: 'px', // 需要转换的单位 viewportWidth: 750, // 视口宽度,等同于设计稿宽度 unitPrecision: 5, // 精确到小数点后几位 /** * 将会被转换的css属性列表, * 设置为 * 表示全部,如:['*'] * 在属性的前面或后面设置*,如:['*position*'],*position* 表示所有包含 position 的属性,如 background-position-y * 设置为 !xx 表示不匹配xx的那些属性,如:['!letter-spacing'] 表示除了letter-spacing 属性之外的其他属性 * 还可以同时使用 ! 和 * ,如['!font*'] 表示除了font-size、 font-weight ...这些之外属性之外的其他属性名头部是‘font’的属性 * */ propList: ['*'], viewportUnit: 'vw', // 需要转换成为的单位 fontViewportUnit: 'vw',// 需要转换称为的字体单位 /** * 需要忽略的选择器,即这些选择器对应的属性值不做单位转换 * 设置为字符串,转换器在做转换时会忽略那些选择器中包含该字符串的选择器,如:['body']会匹配到 .body-class,也就意味着.body-class对应的样式设置不会被转换 * 设置为正则表达式,在做转换前会先校验选择器是否匹配该正则,如果匹配,则不进行转换,如[/^body$/]会匹配到 body 但是不会匹配到 .body */ selectorBlackList: [], minPixelValue: 1, // 最小的像素单位值 mediaQuery: false, // 是否转换媒体查询中设置的属性值 replace: true, // 替换包含vw的规则,而不是添加回退 /** * 忽略一些文件,如'node_modules' * 设置为正则表达式,将会忽略匹配该正则的所有文件 * 如果设置为数组,那么该数组内的元素都必须是正则表达式 */ exclude: [], landscape: false, // 是否自动加入 @media (orientation: landscape),其中的属性值是通过横屏宽度来转换的 landscapeUnit: 'vw', // 横屏单位 landscapeWidth: 1334 // 横屏宽度 } }}

        vue-cli3:在根目录中的 vue.config.js (没有新建即可),添加如下代码:

module.exports = { css: { loaderOptions: { postcss: { plugins: [ require('postcss-px-to-viewport')({ unitToConvert: 'px', // 需要转换的单位 viewportWidth: 750, // 视口宽度,等同于设计稿宽度 unitPrecision: 5, // 精确到小数点后几位 /** * 将会被转换的css属性列表, * 设置为 * 表示全部,如:['*'] * 在属性的前面或后面设置*,如:['*position*'],*position* 表示所有包含 position 的属性,如 background-position-y * 设置为 !xx 表示不匹配xx的那些属性,如:['!letter-spacing'] 表示除了letter-spacing 属性之外的其他属性 * 还可以同时使用 ! 和 * ,如['!font*'] 表示除了font-size、 font-weight ...这些之外属性之外的其他属性名头部是‘font’的属性 * */ propList: ['*'], viewportUnit: 'vw', // 需要转换成为的单位 fontViewportUnit: 'vw',// 需要转换称为的字体单位 /** * 需要忽略的选择器,即这些选择器对应的属性值不做单位转换 * 设置为字符串,转换器在做转换时会忽略那些选择器中包含该字符串的选择器,如:['body']会匹配到 .body-class,也就意味着.body-class对应的样式设置不会被转换 * 设置为正则表达式,在做转换前会先校验选择器是否匹配该正则,如果匹配,则不进行转换,如[/^body$/]会匹配到 body 但是不会匹配到 .body */ selectorBlackList: [], minPixelValue: 1, // 最小的像素单位值 mediaQuery: false, // 是否转换媒体查询中设置的属性值 replace: true, // 替换包含vw的规则,而不是添加回退 /** * 忽略一些文件,如'node_modules' * 设置为正则表达式,将会忽略匹配该正则的所有文件 * 如果设置为数组,那么该数组内的元素都必须是正则表达式 */ exclude: [], landscape: false, // 是否自动加入 @media (orientation: landscape),其中的属性值是通过横屏宽度来转换的 landscapeUnit: 'vw', // 横屏单位 landscapeWidth: 1334 // 横屏宽度 }) ] } } }} PC 端适配

       适配方法同移动端,但如果使用的是方案1和方案2,需要修改 lib-flexible 包中的 flexible.js 代码,注释掉如下的判断条件代码,让其在宽度大于540像素也适用。

function refreshRem(){ var width = docEl.getBoundingClientRect().width; // if (width / dpr > 540) { // width = 540 * dpr; // } var rem = width / 10; docEl.style.fontSize = rem + 'px'; flexible.rem = win.rem = rem;}

        如果需要在屏幕窗口变动时能无延迟适配窗口,可以修改 lib-flexible 包中的 flexible.js 代码:

win.addEventListener('resize', function() { clearTimeout(tid); tid = setTimeout(refreshRem, 0);}, false);win.addEventListener('pageshow', function(e) { if (e.persisted) { clearTimeout(tid); tid = setTimeout(refreshRem, 0); }}, false);
本文链接地址:https://www.jiuchutong.com/zhishi/293771.html 转载请保留说明!

上一篇:阿罗芒什莱班的桑树港,法国诺曼底 (© agefotostock/Alamy)(艾罗芒阿)

下一篇:元宇宙区块链协议Meta0宣布与Polygon建立合作关系(元宇宙产业链)

  • procreate笔刷怎么分组(procreate笔刷怎么导入ps)

    procreate笔刷怎么分组(procreate笔刷怎么导入ps)

  • 无障碍模式怎么关闭(无障碍模式怎么解除)

    无障碍模式怎么关闭(无障碍模式怎么解除)

  • 网页收藏在哪里(网页收藏在哪里看)

    网页收藏在哪里(网页收藏在哪里看)

  • wps行距22磅是几倍行距(wps28磅行距)

    wps行距22磅是几倍行距(wps28磅行距)

  • 为什么截屏的图片在相册里找不到(为什么截屏的图片显示不出来)

    为什么截屏的图片在相册里找不到(为什么截屏的图片显示不出来)

  • 华为禁止恶意安装未知应用权限在哪里(华为禁止恶意应用安装其他应用解除了还是不行)

    华为禁止恶意安装未知应用权限在哪里(华为禁止恶意应用安装其他应用解除了还是不行)

  • 钉钉重新提交作业之前的还能看到吗(钉钉重新提交作业老师知道吗)

    钉钉重新提交作业之前的还能看到吗(钉钉重新提交作业老师知道吗)

  • vivo闪充什么协议(vivo闪充)

    vivo闪充什么协议(vivo闪充)

  • 闲鱼怎么发布同城闲置(闲鱼怎么发布同城服务)

    闲鱼怎么发布同城闲置(闲鱼怎么发布同城服务)

  • 华为闹钟图标取消不掉(华为闹钟图标取消不掉怎么办)

    华为闹钟图标取消不掉(华为闹钟图标取消不掉怎么办)

  • 苹果11手机声音突然变小是怎么回事(苹果11手机声音小怎么回事)

    苹果11手机声音突然变小是怎么回事(苹果11手机声音小怎么回事)

  • 苹果11比6sp大吗(苹果11与6sp大小对比)

    苹果11比6sp大吗(苹果11与6sp大小对比)

  • 小天才手表电池不耐用怎么办(小天才手表电池不耐用可以换电池吗)

    小天才手表电池不耐用怎么办(小天才手表电池不耐用可以换电池吗)

  • mbime是什么进程(mbime是什么程序)

    mbime是什么进程(mbime是什么程序)

  • 小米手机呼吸灯闪烁开不了机(小米手机呼吸灯一闪一闪的)

    小米手机呼吸灯闪烁开不了机(小米手机呼吸灯一闪一闪的)

  • 淘宝搜索流量是什么(淘宝搜索流量下降的原因)

    淘宝搜索流量是什么(淘宝搜索流量下降的原因)

  • 虎牙每日签到在哪(虎牙tv签到7天奖励)

    虎牙每日签到在哪(虎牙tv签到7天奖励)

  • OPPOA57忘记锁屏密码怎么办(oppoa57忘记锁屏绘图密码)

    OPPOA57忘记锁屏密码怎么办(oppoa57忘记锁屏绘图密码)

  • 华为手表健康三环分别什么意思(华为手表健康三环表盘含义)

    华为手表健康三环分别什么意思(华为手表健康三环表盘含义)

  • 打印机碳粉盒卡纸怎么处理(打印机碳粉盒卡住了怎么取出来)

    打印机碳粉盒卡纸怎么处理(打印机碳粉盒卡住了怎么取出来)

  • 华为nova5pro支持5g网络吗(华为nova5pro支持500mbps网速吗)

    华为nova5pro支持5g网络吗(华为nova5pro支持500mbps网速吗)

  • 日期自动变怎么设置(日期自动变成数字)

    日期自动变怎么设置(日期自动变成数字)

  • 为啥我qq加别人不显示(为什么qq加上好友却不是好友)

    为啥我qq加别人不显示(为什么qq加上好友却不是好友)

  • 开机显示itunes怎么修(开机出现itunes图标)

    开机显示itunes怎么修(开机出现itunes图标)

  • 什么是AI手机摄像头(手机ai相机是什么)

    什么是AI手机摄像头(手机ai相机是什么)

  • ps像素大小怎么调整(ps像素大小怎么调整不了)

    ps像素大小怎么调整(ps像素大小怎么调整不了)

  • 居民个人的综合所得
  • 申报个人所得税在哪里报
  • 增值税出口退税款缴纳企业所得税吗
  • 23年车辆购置税税率
  • 外购商品赠送怎么做账
  • 进项票和销项票是什么意思
  • 测试费明细
  • 公对公转账需要交税吗?
  • 差额发票能不能报销
  • 维保税率和维修税率是多少
  • 纳税申报方式如何更改
  • 汇算清缴中研发费用中其他费用可抵扣的比例是多少
  • 房产企业贷款利率
  • 购进出口商品的会计分录
  • 商品损失 进项税 确定
  • 付汇代扣代缴增值税纳税期限
  • 收回的材料赔偿款怎么处理?
  • 增值税设备抵扣怎么抵扣
  • 买了两个月社保能用多少医药费
  • 营改增后租金收入交什么税
  • 桂林军工企业单位有哪些
  • 所得税汇算清缴时间期限
  • 年底结转损益是什么意思
  • 银行代发工资当月没发下个月发没事儿吧
  • 车辆保险车船税怎么计算
  • 联营企业分配利润
  • 小规模纳税人销售自己使用过的物品
  • 分配利润给股东怎么做分录
  • 小规模纳税人开票限额是多少
  • linux系统中查看磁盘空间情况命令
  • vantUI van-picker中的column使用,picker选择器展示对象数组里面的属性,自定义展示数据
  • Netlib.exe - Netlib是什么进程 有什么用
  • 小企业会计准则适用于哪些企业
  • 餐饮定额发票能报销吗怎么报销
  • 竣工结算审计费用在线计算器
  • php抽奖程序源码
  • 查补的增值税账务处理
  • web自动化selenium实战项目
  • layui 使用
  • unipoint
  • 图像风格迁移网站
  • 代缴社保可以领住房补贴吗
  • 资金结存属于什么会计科目
  • 母子公司之间的租赁房屋
  • 长期借款期末需结转吗
  • 土地出让金抵扣进项税
  • 预缴税款是什么意思
  • 企业年度关联业务往来报告表必须填吗
  • 土地增值税是对转让什么并取得收入的单位和个人
  • 小额收据入账规则最新
  • 哪些属于费用发票类型
  • 工资与社保缴纳不一致
  • 企业预缴增值税附加税率
  • 农业用地租赁是免税的吗
  • 业务招待费的扣除标准60%什么意思
  • 专项应付款支出的账务处理
  • 银行扣款后又退回怎么办
  • 劳务费如何计提
  • 企业财务费用属于
  • 拆迁房视同销售成本可以抵减吗?
  • 处置子公司如何合并
  • 个人收到国外汇款后怎么办
  • 固定资产损失计入什么科目
  • 会计准则应收账款计提坏账
  • 设备的折旧费怎么算
  • 多少金额以上算固定资产
  • sqlserver数据库和mysql区别
  • mysql有哪些数据类型,有哪些运算符
  • 操作系统有哪些
  • win7桌面提示7601
  • win10系统怎么安装qq
  • windows 10预览版
  • win8系统保护已关闭 如何系统还原
  • unity播放声音的方法
  • jquery的实现原理
  • css实现下拉菜单的思路是
  • 批处理重命名文件名
  • 解决js请求服务问题
  • 小微企业税务优惠政策
  • 个人经营所得税怎么做账务处理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设