位置: 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建立合作关系(元宇宙产业链)

  • ibox怎么下载(boox如何安装第三方app)

    ibox怎么下载(boox如何安装第三方app)

  • iqoo8pro支持hifi吗(iqoo8有没有hifi)

    iqoo8pro支持hifi吗(iqoo8有没有hifi)

  • 微信被对方拉黑是什么显示(微信被对方拉黑删除教你一招挽回)

    微信被对方拉黑是什么显示(微信被对方拉黑删除教你一招挽回)

  • 华为手机控制中心怎么调出来(华为手机控制中心怎么设置)

    华为手机控制中心怎么调出来(华为手机控制中心怎么设置)

  • 华为闹钟铃声怎么设置(华为闹钟铃声怎么调)

    华为闹钟铃声怎么设置(华为闹钟铃声怎么调)

  • 好友删了对方还能看到吗(好友删了对方还能查看我回复发的朋友动态码吗)

    好友删了对方还能看到吗(好友删了对方还能查看我回复发的朋友动态码吗)

  • 手机qq夜间模式变白了(手机qq夜间模式怎么关)

    手机qq夜间模式变白了(手机qq夜间模式怎么关)

  • 计算机分类汇总怎么操作(计算机分类汇总怎么做)

    计算机分类汇总怎么操作(计算机分类汇总怎么做)

  • 联想小新air鼠标怎么连接(联想 小新 air 鼠标)

    联想小新air鼠标怎么连接(联想 小新 air 鼠标)

  • 1080p视频帧率多少合适(1920*1080视频帧率多少合适)

    1080p视频帧率多少合适(1920*1080视频帧率多少合适)

  • 小天才如何下载微信(小天才如何下载抖音)

    小天才如何下载微信(小天才如何下载抖音)

  • 苹果7几个扬声器(苹果七的扬声器在哪里)

    苹果7几个扬声器(苹果七的扬声器在哪里)

  • 手机显示温度过高无法充电怎么办(手机显示温度过高请冷却后使用)

    手机显示温度过高无法充电怎么办(手机显示温度过高请冷却后使用)

  • ipad闹钟一天没关会怎么样(ipad闹钟不点稍后提醒多久不响)

    ipad闹钟一天没关会怎么样(ipad闹钟不点稍后提醒多久不响)

  • 畅想10s怎么截屏(畅享10如何截屏)

    畅想10s怎么截屏(畅享10如何截屏)

  • qq空间删过的视频怎么恢复(qq空间删除过的视频在哪里)

    qq空间删过的视频怎么恢复(qq空间删除过的视频在哪里)

  • 科学上网方法(如何“科学”上网)

    科学上网方法(如何“科学”上网)

  • 淘宝客服聊天发不出去(淘宝客服聊天发不过去)

    淘宝客服聊天发不出去(淘宝客服聊天发不过去)

  • 苹果8可以遥控空调吗(苹果8遥控器在哪)

    苹果8可以遥控空调吗(苹果8遥控器在哪)

  • 抖音怎么恢复取消的关注(抖音怎么恢复取消关注的人)

    抖音怎么恢复取消的关注(抖音怎么恢复取消关注的人)

  • 怎么让别人看不到情侣黄钻(怎么让别人看不了我的QQ空间)

    怎么让别人看不到情侣黄钻(怎么让别人看不了我的QQ空间)

  • qq为什么数据更新失败(qq一打开为什么是数据更新)

    qq为什么数据更新失败(qq一打开为什么是数据更新)

  • 探探设备封禁解除教程(探探设备封禁解封不了)

    探探设备封禁解除教程(探探设备封禁解封不了)

  • 快手怎么看同城招聘(快手怎么看同城附近的人)

    快手怎么看同城招聘(快手怎么看同城附近的人)

  • 荣耀20和v20区别(荣耀20和v20有什么区别)

    荣耀20和v20区别(荣耀20和v20有什么区别)

  • 阿里旺旺如何退出登录(阿里旺旺怎么申请退款)

    阿里旺旺如何退出登录(阿里旺旺怎么申请退款)

  • 快手封面怎么变大(快手封面怎么变黑色了)

    快手封面怎么变大(快手封面怎么变黑色了)

  • history命令  显示与管理历史命令记录(windows history命令)

    history命令 显示与管理历史命令记录(windows history命令)

  • 附加税减免税额不能大于本期应纳税额怎么办
  • 建筑公司办公室照片真实
  • 进项抵扣的金额怎么算
  • 小企业外币交易
  • 公司的旅游费怎么处理
  • 准予扣除的职工福利费
  • 工程款预付账款的账务处理
  • 虚开费用发票入账
  • 用银行存款上交上月税金会计分录
  • 印花税购销比例
  • 假设公司为增值税一般纳税人
  • 一般纳税人所得税优惠政策
  • 自然人股东转让股权如何避税
  • 研发废料收入实务中如何冲减研发费用?
  • 加油的普票可以抵扣进项税吗
  • 记账凭证应交税费应交增值税怎么写
  • 集团公司收购子公司
  • 开票税额与申报税额差一分账务怎么处理
  • 个人社保费需要交多少年
  • 待处理财产损益的二级科目
  • 文化事业建设费税收优惠政策2023
  • 交通费进项税抵扣计算
  • 公司发放的车补扣个人所得税吗
  • 房地产行业需要做环评吗
  • PHP:xml_parser_get_option()的用法_XML解析器函数
  • php正则表达式实例
  • 股权转让协议的注意事项
  • 企业所得税汇算清缴调增的项目有哪些
  • 发票认证了但是没收到票怎么处理
  • php定时执行代码
  • 工业企业采购部职责
  • 即征即退增值税账务处理
  • 职工取得全年一次性奖金如何计算缴纳个人所得税?
  • 新办企业工商需要什么手续
  • phpunit
  • 如何进行iframe框架切换
  • 开发票的零税率和免税有什么区别
  • 语谱图生成
  • 【AI大比拼】文心一言 VS ChatGPT-4
  • 基于php判断客户是否存在
  • linuxmd5加密
  • clock set命令
  • 会计制度备案附件要上传什么
  • 国家对建筑垃圾处理企业有补助吗
  • 银行利息增值税发票
  • 销售包装什么意思
  • 公司名下商品房过户给公司需要交过户费
  • dedecms使用教程
  • 运输公司开具的增值税专用发票谁抵扣
  • 个人所得税有哪些项目
  • 个人名义开工程发票税率是多少
  • 寄售商店代销寄售物品的税率
  • 进项税额转出最终应转到哪里
  • 企业当年实现的净利润即为企业当年可供分配的利润
  • 小微企业a201010表怎么填
  • 购入原材料结转成本怎么算
  • 塑料行业税负率是多少
  • 固定资产帐怎么做
  • 什么是权责发生会计处理基础
  • sqlserver代理服务启动失败
  • win8键盘f1到f12取消按fn
  • win10创意者更新易升
  • ubuntu系统管理
  • 如何移植操作系统
  • window怎么操作
  • linux系统中常用的五种文件类型
  • media.codec是什么软件
  • 使用 WinSCP 管理 Linux VPS/服务器上的文件 图文教程
  • Win7系统如何查看隐藏文件
  • 批处理bat
  • shell脚本clear
  • 以下代码的运行结果是哪一项
  • android网络框架okhttp
  • 水利建设基金如何计提
  • 关联企业签订劳动合同的次数可以累计吗
  • 中国税务社保缴费app下载
  • 四川省地方税务局公告2018年第3号
  • 国家税务总局72号文件
  • 国地税联合办公
  • 营业执照增加项目怎么办理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设