使用amfe-flexible以及px2rem-loader解决VUE移动端适配

pc端不同分辨率适配 1、以1920* 1080的设计稿为例,实现PC端不同分辨率适配 2、安装依赖 npm install --save lib-flexible 或者 yarn addlib-flexible -save npm installpx2rem-loader -D或者 yarn addpx2rem-loader npm 安装不上时可以用cnpm 3、在utils文件下新建 一个 js 文件 如viewport.js 代码如下 (function() { va... 阅读详情

1.安装

cnpm  install -S amfe-flexible

cnpm install postcss-pxtorem@5.1.1 -D

2.在main.js

import 'amfe-flexible'

3.在vue.config.js 添加

module.exports = {

  lintOnSave: false,

    css: {
      loaderOptions: {
        postcss: {
          plugins: [
            require('postcss-pxtorem')({ // 把px单位换算成rem单位
              rootValue: 37.5, // vant官方使用的是37.5
              selectorBlackList: ['vant', 'mu'], // 忽略转换正则匹配项
              propList: ['*']
            })
          ]
        }
      }
    }
}

3.1或者在package.json里添加

 "postcss": {
    "plugins": {
      "autoprefixer": {},
      "postcss-pxtorem": {
        "rootValue": 37.5,
        "propList": [
          "*"
        ]
      }
    }
  }

4.重启

5.完成

前言

前段时间我的移动端适配解决方案[2]一文在评论区引发了激烈的讨论。其中讨论最多的就是,移动端rem的适配已经淘汰了,目前大家使用的都是viewport。lib-flexible作者也在github明确的表示lib-flexible这个解决方案可以放弃使用了。

由于viewport单位得到众多浏览器的兼容,lib-flexible这个过渡方案已经可以放弃使用,不管是现在的版本还是以前的版本,都存有一定的问题。建议大家开始使用viewport来替代此方案。
看到大家的讨论,我受益匪浅。在这里也向那些阅读过我之前那篇移动端适配解决方案[3]文章的同行们说一声对不起。rem适配方案确实是已经淘汰了。

本文带大家一起来看看评论区所说的viewport适配解决方案。

什么是viewport

viewport翻译成中文的意思大致是视图、视窗。在移动端设备中,整块显示屏就相当于视图、视窗。但这种说法也并不完全正确。因为在移动端设备中,浏览器视图并不是整个屏幕。因此viewport又被分为了3种 layout viewport、visual viewport、ideal viewport

为了能够适配到pc端开发页面中,大部分浏览器把viewport的宽度设为了980px 这个浏览器默认设置的视图被称为 layout viewport。我们可以使用document.documentElement.clientWidth 来获取。

由于 layout viewport的宽度是远大于浏览器宽度的,因此我们需要一个新的viewport来代表浏览器的可视区域宽度,这个视图则被成为visual viewport我们可以使用window.innerWidth来获取。

现在我们已经有两个viewport了,layout viewport 和 visual viewport。但浏览器觉得还不够,因为现在越来越多的网站都会为移动设备进行单独的设计,所以必须还要有一个能完美适配移动设备的ideal viewport。

ideal viewport 并没有一个固定的尺寸,不同的设备拥有有不同的 ideal viewport。比如iphone5的 ideal viewport是 320px 而 iphone6s的 ideal viewport却是 375px

viewport的单位vw、vh

vw、vh将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">

viewport适配解决方案

之前的文章,我们用到了阿里巴巴手淘团队出品的amfe-flexible这个库。目的是为了获取到不同移动端设备下的像素比。对于rem的适配该库是至关重要的。本篇文章使用viewport适配则不再需要。

要使用viewport适配 我们必须安装postcss-px-to-viewport这个包。这包名是不是有一种似曾相识的感觉。

没错,上篇文章中我们使用过postcss-pxtorem。这两个包不仅名字相似,功能也有相似的地方。postcss-pxtorem是将 px单位转换为rem单位。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-viewport作者的github[4]

值得注意的是:postcss-px-to-viewport 同样存在第三方组件库兼容性的问题。比如在设计稿为750px时使用vant组件库会将vant组件的样式缩小。

解决第三方组件库兼容问题

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的适配就做好了,只需要按照设计稿的比例进行开发就可以了。



作者:抽疯的稻草绳
链接:https://www.jianshu.com/p/2c1e13cc0802
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

十一种室内定位传感器方案汇总介绍与对比(机器人、物联网领域) 室内定位传感器方案汇总 目录 室内定位传感器方案汇总 1、定位方案概述 1.1、内定位系统有最基本的5种算法: 1.2、常用的室内定位技术主要包括以下几种: 1.3、定位理论 1.4、不同的定位方案对比 2、各种定位方案详细介绍 2.1、单线激光定位 2.2、多线激光定位: 2.3、视觉定位: 2.4、基于射频识别(RFID)技术室内定位 2.4.1、RFID标签(不涉及... 阅读详情

相关推荐

RK3588与银河麒麟V10 SP1 2403深度适配:国产化硬件与操作系统的完美融合

本文深入探讨了RK3588处理器与银河麒麟V10 SP1 2403操作系统的深度适配,展示了国产化硬件与操作系统的完美融合。通过性能验证和实际应用测试,证明了这套组合在多媒体处理、AI推理和日常办公中的卓越表现,实现了完全自主可控的计算平台。

weixin_29194255的博客 249

CSS自适应分辨率 amfe-flexible 和 postcss-pxtorem(适用于 Webpack)

项目对应的webpack以谷歌为例,F12 打开“开发者工具”,页面会出现如上分辨率选择最下一行的 “修改…”打开“修改…”对话框,添加自定义设备… ,注意选择Desktop,最后保存就能切换了。

前端技术 1万+

雷达信号处理DDC数字下变频

由于接收到的雷达信号频率较高,不能对其进行直接采样并数据处理,所以需要对雷达信号进行预处理,在降低其采样率的同时,将其由中频降低到低频,然后对输出的基带信号进行后续的解析,以便于获取雷达信号的特征参数。 本文采用数字正交下变频,将单通道信号转化为正交双通道信号,数字下变频(DDC)的原型为模拟下变频,通过对窄带雷达信号或单频信号进行数字混频,然后对信号进行正交采样,提取 I、Q 两路正交分量,最后通过滤波去除信号中的高频分量,将信号由中高频搬移至低频。 模拟下变频的系统框图如下: 其数学推导.

qq_44033461的博客 5229

vue实现移动端适配方案 (amfe-flexible和postcss-pxtorem结合)建议收藏

1.amfe-flexible amfe-flexible是配置可伸缩布局方案,主要是将1rem设为viewWidth/10。 2.postcss-pxtorem postcss-pxtorem是postcss的插件,用于将像素单元生成rem单位。 3.移动端适配方案 vue实现移动端适配步骤如下: 先安装amfe-flexible和postcss-pxtorem npm install amfe-flexible --save npm install postcss-pxtorem --sa

been_ss的博客 2万+

达梦数据库集群部署(主备)

达梦数据库集群部署(主备)

m0_71845127的博客 1461

关于影响力最大化问题中贪心算法的一些理解

在影响力最大化问题中(Influence Maximization,以下简称IM),贪心算法是最早提出的一种解决方法,并且一直沿用至今。它基于IM问题所具有的单调性(Monotonicity)和子模性(Submodularity)使用一种Hill Climbing策略,不断使用Monte Carlo模拟来寻找在当前情况下的具有最大传播范围的节点,添加至种子集合,得到最终结果,算法伪代码如下所示: 这里算法1其实并没有使用MonteCarlo模拟,而只是使用了贪心的策略...

nianjuan1990的专栏 2852

amfe-flexible同时适应pc端和移动端方法

使用背景 同一个框架下面需要开发PC端和移动端,框架目录如下: 调用amfe-flexible实现了移动端自适应,但是在PC端想实现因为vue.config.js的rootValue只能设置一个,所以PC端自适应会因为移动端的rootValue页面组件变的巨大无比。 require('postcss-pxtorem')({ // 把px单位换算成rem单位 rootValue: 37.5, // 换算的基数(设计图750的根字体为75) // selectorBlackList

weixin_43825693的博客 1万+

ESP32S3接入讯飞在线语音识别教程及配套源代码

本文介绍了如何使用ESP32-S3开发板实现讯飞在线语音识别功能。首先,需要准备硬件设备,包括ESP32-S3开发板、麦克风模块、MicroSD卡模块和扬声器模块。接着,安装Arduino IDE并配置ESP32-S3开发环境,注册讯飞开放平台账号并获取API凭证。然后,通过I2S接口连接麦克风模块,并编写代码实现语音录制、Base64编码、API请求和识别结果处理。代码包括初始化WiFi、麦克风、系统时间,以及录制语音、发送请求、解析响应等功能。最后,通过按键触发录音,并将识别结果输出到串口。

2401_88800025的博客 746

vue中使用amfe-flexible和postcss-pxtorem结合实现移动端适配方案

1.介绍amfe-flexible amfe-flexible是配置可伸缩布局方案,主要是将1rem设为viewWidth/10。 2.介绍postcss-pxtorem postcss-pxtorem是postcss的插件,用于将像素(px)单元生成rem单位。 具体步骤: 1. 安装两个插件 npm install amfe-flexible --save npm install postcss-pxtorem --save 2. 在main.js导入amfe-flexible import 'a.

铁锤妹妹的博客 8335

【城市数据集】世界城市数据库和访问门户工具WUDAPT

简介世界城市数据库和访问门户工具WUDAPT

WW、forever的博客 1286

3、全面掌握QGIS开发:从调试到应用的全方位指南

本文全面介绍了QGIS开发的各个环节,涵盖插件调试、PyQGIS API导航、插件创建与分发、独立地理空间应用开发,以及全局和项目级首选项的管理。通过详细的步骤说明、代码示例和流程图,帮助开发者系统掌握QGIS扩展与集成的核心技能,并展望了未来在功能拓展、跨平台兼容性和技术融合方面的可能性。

hill8的博客 89

阿里手淘可伸缩布局方案amfe-flexible解决vue移动端适配问题

前言: 由于viewport单位得到众多浏览器的兼容,lib-flexible这个过渡方案已经可以放弃使用,不管是现在的版本还是以前的版本,都存有一定的问题。建议大家开始使用viewport来替代此方案。vw的兼容方案可以参阅《如何在Vue项目中使用vw实现移动端适配》一文。 1.首先把安装amfe-flexible,这里使用npm install npm install -S amfe...

唐立彤的博客 1万+

C#使用OpenCvSharp+微信模型识别多个二维码

本文介绍了一个基于OpenCvSharp和微信开源二维码检测器的多二维码识别项目。该项目通过C# WinForm实现,主要功能包括:加载图片、识别图片中的多个二维码并显示识别结果。核心代码使用了OpenCvSharp.WeChatQRCode类,通过预训练的caffe模型(detect.prototxt/detect.caffemodel和sr.prototxt/sr.caffemodel)进行二维码检测和解码。识别结果包括每个二维码的编号、内容及位置信息。项目适用于批量二维码识别场景,部署简单,识别效果良

遇见--专栏 123

解决vue移动端适配问题

解决vue移动端适配问题 1.首先把安装amfe-flexible,这里使用npm install npm install -S amfe-flexible 2.在入口文件中引入 import 'amfe-flexible/index.js' 3.在根目录的index.html 的头部加入手机端适配的meta代码 <meta name="viewport" content...

庆安的博客 1399

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VUE2移动端适配

VUE2移动端适配

AWMBAN的博客 1265

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

vue框架搭建--移动端

由于Vue官方提供了vue-cli手脚架,所以快速构建出个简单的项目框架。在做移动端项目时,因为移动端的特性可能会用到些比较常用的插件,就在这里简单介绍如何使用 这里只介绍怎么在项目中安装引用和简单的使用方法,详细用法会附上相关链接或者自行百度 1、手淘适配方案--amfe-flexible 移动端总是少不了适配,所以无疑是最佳的选择(GitHub传送门) 1、安装 cn...

diaojue7644的博客 228

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

vue移动端适配(vue-cli 3/4)

目录项目场景:问题描述:原因分析:解决方案: 项目场景: Vue项目H5页面,只要求适配移动端(vue 2.6 + @vue/cli 4.5.13) 问题描述: 以前做的 vue-cli 2.x 移动端适配我是用 lib-flexible + px2rem-loader ,然后这次 @vue/cli 4 用了它就不灵了,发现刷新页面样式缩小了,我擦。。。 原因分析: 后来翻阅了一些文档,由于viewport单位得到众多浏览器的兼容,lib-flexible这个过渡方案已经可以放弃使用,不管是现在的版本

分享与记录前端点滴 2920

Vue 移动端适配 amfe-flexible

1、首先下载: npm install px2rem-loader --save npm install amfe-flexible --save 2、main.js引入: import Vue from 'vue' import App from './App' import router from './router' // rem h5 适配 import 'amfe-...

水墨青花的博客 1万+

Vue amfe-flexible+px2rem-loader+postcss-px2rem-exclude 界面自适应方案

最近项目是大屏+移动端的VUE开发项目,上面要说也要适应PC端,但当初设计并没有考虑这种适配,因此在不大动代码的情况下,采用手淘的界面适配方案,刚开始查到lib-flexible,但已经不维护了,转而采用amfe-flexible+px2rem-loader,其原理就是将px转化为rem,达到适配效果。 1. 安装 npm install px2rem-loader amfe-flexiblepostcss-px2rem-exclude --save 2.配置 针对于本项目,在根目...

想飞请准备 1534

在vue-cli4中移动端的自适应:amfe-flexible和px2rem-loader

1、首先在项目中安装以下依赖 npm install px2rem-loader --save npm install amfe-flexible --save npm install postcss-px2rem --save 2、在main.js中添加: import 'amfe-flexible' 3、在vue.config.js中进行配置 module.exports = ...

qq_31403519的博客 3105

Vue移动端用淘宝弹性布局lib-flexible插件做适配

淘宝弹性布局lib-flexible lib-flexible并不单独使用,而是搭配px2rem-loader一起做适配方案,目的是自动将css中的px转换成rem,在项目中还是按照设计稿写上对应的固定像素(px)就行。 移动端适配的具体步骤 第一步:安装插件 lib-flexible npm i lib-flexible --save-dev 第二步:安装px2rem loader npm install px2rem-loader --save-dev 第三步:在main.js中引入lib-flex

前端探险家的博客 1859

总结一下vue移动端适配方案

方案一:amfe-flexible+px2rem-loader amfe-flexible:根据设备宽度,修改根元素html的大小,以适配不同终端 px2rem-loader:将css中的px转为rem单位,用了它就不用自己计算rem值了 注意:amfe-flexible是lib-flexible的优化,主要区别是amfe-flexible不会改变视口大小 安装 + 配置 1. 安装amfe-flexible和px2rem-loader npm install -s amfe-flexible npm i

xixi的博客 1881

vue 移动端适配

这里我写一下我自己用的vue 移动端适配 ,可能跟别人的不一样。但是效果是一样的。 我是安装 amfe-flexible npm i -S amfe-flexible 安装px2rem,使得我们在开发中不需要自己手动计算,照常写px npm install px2rem-loader --save-dev 在build目录下的utils.js修改配置 co...

冰雪为融的博客 509

vue适配移动端(lib-flexible + px2rem-loader)

搭建一个vue项目 全局安装vue-cli npm install --global vue-cli 创建一个基于webpack模板的新项目 vue init webpack “name” 如:vue init webpack my-vue 进入项目目录 cd “name” 如:cd my-vue 并安装依赖 npm install 在项目目录下安装适配依赖 安装(...

qevfnc的博客 287

说说vue-cli中使用flexible和px2rem-loader

1.下载lib-flexible npm i lib-flexible --save 或 yarn add lib-flexible 2.在项目中引入lib-flexible 一般情况在(main.js中引入lib-flexible) import 'lib-flexible/flexible' 3.设置meta标签(视情况而定) &...

weixin_34323858的博客 110

基于vue-cli4配置px2rem做到移动端自适配

在实际开发中,我们需要将设计稿中的px转换成rem,然后再写入到样式中。postcss-px2rem可以帮助我们自动完成转换。 一、安装模块 cnpm install amfe-flexible postcss-px2rem -S amfe-flexible:是rem的适配插件。(例:750px == 10rem) postcss-px2rem:负责将输入的px自动转为rem。 二、入口文件main.js里引入amfe-flexible import "amfe-flexib...

高先生的猫 702
上一篇: 跨域 iframe 内嵌页面 JavaScript 写 cookie 失败解决方法
下一篇: npm install 报错: cb() never called!
jayccx
博客等级 码龄18年 13粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值