Vant官方文档

Vant 中的样式默认使用 px 作为单位,如果需要使用 rem 单位,推荐使用以下两个工具:

postcss-pxtorem 是一款 postcss 插件,用于将 px 单位转化为 rem
lib-flexible 用于设置 rem 基准值

下面我们分别将这两个工具配置到项目中完成 REM 适配。

(1)使用 lib-flexible 动态设置 REM 基准值(html 标签的字体大小)

安装依赖:

# yarn add amfe-flexible
npm i amfe-flexible

然后在 main.js 中加载执行该模块:

import 'amfe-flexible'

最后测试:在浏览器中切换不同的手机设备尺寸,观察 html 标签 font-size 的变化。

例如在 iPhone 6/7/8 设备下,html 标签字体大小为 37.5 px

例如在 iPhone 6/7/8 Plus 设备下,html 标签字体大小为 41.4 px
(2)使用 postcss-pxtorem 将 px 转为 rem

安装依赖:

# yarn add -D postcss-pxtorem
# -D 是 --save-dev 的简写
npm install postcss-pxtorem -D

然后在项目根目录中创建 postcss.config.js 文件:

module.exports = {plugins: {'autoprefixer': {browsers: ['Android >= 4.0', 'iOS >= 8']},'postcss-pxtorem': {rootValue: 37.5,propList: ['*']}}
}

配置完毕,重新启动服务。

最后测试:刷新页面,审查元素样式查看是否已将 px 转换为 rem。

这是没有配置转换之前的。

这是转换之后的,可以看到 px 都被转换为了 rem。

需要注意的是:

该插件不能转换行内样式中的 px,例如 <div style="width: 200px;"></div>

关于 PostCSS 配置文件

postcss.config.js 是 PostCSS 的配置文件。

/*
* PostCSS的配置文件
* PostCSS 是基于 Node.js 运行的一个处理CSS的工具
* 所以他的配置文件也是运行在Node.js中
* */// PostCSS 配置文件需要导出一个对象
module.exports = {// 配置要使用的相关的插件plugins: {// 自动添加浏览器厂商声明前缀,用来兼容不同的浏览器// VueCli 已经在内部默认配置了 autoprefixerautoprefixer: {// browsers 用来配置要兼容到的系统(浏览器)环境browsers: ['Android >= 4.0', 'iOS >= 8']},// 把 px 转为 rem'postcss-pxtorem': {rootValue: 37.5,propList: ['*']}}
}

PostCSS 介绍

PostCSS 是一个允许使用 JS 插件转换样式的工具。 这些插件可以检查(lint)你的 CSS,支持 CSS Variables 和 Mixins, 编译尚未被浏览器广泛支持的先进的 CSS 语法,内联图片,以及其它很多优秀的功能。

PostCSS 被广泛地应用,其中不乏很多有名的行业领导者,如:维基百科,Twitter,阿里巴巴, JetBrains。PostCSS 的 Autoprefixer 插件是最流行的 CSS 处理工具之一。

PostCSS 接收一个 CSS 文件并提供了一个 API 来分析、修改它的规则(通过把 CSS 规则转换成一个抽象语法树的方式)。在这之后,这个 API 便可被许多插件利用来做有用的事情,比如寻错或自动添加 CSS vendor 前缀。

截止到目前,PostCSS 有 200 多个功能各异的插件。你可以在 插件列表 或 搜索目录 找到它们。

PostCSS 是一个处理 CSS 的处理工具,本身功能比较单一,它主要负责解析 CSS 代码,再交由插件来进行处理,它的插件体系非常强大,所能进行的操作是多种多样的,例如:

Autoprefixer 插件可以实现自动添加浏览器相关的声明前缀
PostCSS Preset Env 插件可以让你使用更新的 CSS 语法特性并实现向下兼容
postcss-pxtorem 可以实现将 px 转换为 rem

PostCSS 一般不单独使用,而是与已有的构建工具进行集成。

Vue CLI 默认集成了 PostCSS,并且默认开启了 autoprefixer 插件。

Vue CLI 内部使用了 PostCSS。
你可以通过 .postcssrc 或任何 postcss-load-config 支持的配置源来配置 PostCSS。也可以通过 vue.config.js 中的 css.loaderOptions.postcss 配置 postcss-loader。
我们默认开启了 autoprefixer。如果要配置目标浏览器,可使用 package.json 的 browserslist 字段。

Autoprefixer 插件的配置

autoprefixer 是一个自动添加浏览器前缀的 PostCss 插件,browsers
用来配置兼容的浏览器版本信息,但是写在这里的话会引起编译器警告。

Replace Autoprefixer browsers option to Browserslist config.
Use browserslist key in package.json or .browserslistrc file.Using browsers option can cause errors. Browserslist config
can be used for Babel, Autoprefixer, postcss-normalize and other tools.If you really need to use option, rename it to overrideBrowserslist.Learn more at:
https://github.com/browserslist/browserslist#readme
https://twitter.com/browserslist

警告意思就是说你应该将 browsers 选项写到 package.json 或 .browserlistrc 文件中。

browserslist:
你会发现有 package.json 文件里的 browserslist 字段 (或一个单独的
.browserslistrc 文件),指定了项目的目标浏览器的范围。这个值会被 @babel/preset-env 和
Autoprefixer 用来确定需要转译的 JavaScript 特性和需要添加的 CSS 浏览器前缀。

参考官方文档中的语法,我们将 .browserslistrc 修改如下:

postcss-pxtorem 插件的配置

  • rootValue:表示根元素字体大小,它会根据根元素大小进行单位转换
  • propList 用来设定可以从 px 转为 rem 的属性
    例如 * 就是所有属性都要转换,width 就是仅转换 width 属性

rootValue 应该如何设置呢?
如果你使用的是基于 lib-flexable 的 REM 适配方案,则应该设置为你的设计稿的十分之一。
例如设计稿是 750 宽,则应该设置为 75。

大多数设计稿的原型都是以 iPhone 6 为原型,iPhone 6 设备的宽是 750,我们的设计稿也是这样。

但是 Vant 建议设置为 37.5,为什么呢?
因为 Vant 是基于逻辑像素 375 写的,所以如果你设置为 75 的话,Vant 的样式就小了一半。
所以如果设置为 37.5 的话,Vant 的样式是没有问题的,但是我们在测量设计稿的时候都必须除2才能使用,否则就会变得很大。

有没有更好的办法不用除以2呢?当然有了,这里给大家介绍两种方式,一种不用写代码,一种需要写代码。

(1)不用写代码的方式

在 Photoshop 中打开单位与标尺设置面板:菜单栏 -> 编辑 -> 首选项 -> 单位与标尺。

将单位中的标尺和文字的单位修改为点。

打开设置图像大小面板:

菜单栏 -> 图像 -> 图像大小
快捷键:Alt + Ctrl + I


关闭重新采样
将宽度单位设置为点
将高度单位设置为点
将宽度修改为 375,高度不用动(它会适应宽度自动调整)
点击确定完成修改。

调整之后,我们可以看到图像的大小变成了 375 点 x 667 点(144 ppi)。

在 iPhone 6/7/8 设备下,1个点 = 2个物理像素,所以你看到我们导出的图片还是原来的二倍图。

(2)写代码的方式(自行了解)

通过查阅文档我们可以看到 rootValue 支持两种参数类型:

数字:固定值
函数:动态计算返回
有一个默认参数:一个对象,其中包含一个 file 属性(编译的文件路径)

所以我们可以这样来处理它:

module.exports = {plugins: {'postcss-pxtorem': {rootValue ({ file }) {// 如果是 Vant 的样式就按照 37.5 处理转换// 如果是我们自己的样式就按照 75 处理转换return file.indexOf('vant') !== -1 ? 37.5 : 75},propList: ['*']}}
}

这种方式不方便调试。因为在调试面板中看到的都是逻辑像素大小,它和 750 物理像素设计稿不一致,无法很好的利用调试工具。

Vue移动端项目——Vant 移动端 REM 适配相关推荐

  1. 如何使移动端项目在PC端依然可以良好的展示

    前置条件: 移动端适配使用的是如下适配方案, 也就是使用的rem作为适配,该示例中用到的是13.333333vw, 使得1rem等于100px. html{font-size: 13.333333vw ...

  2. Vue移动端项目中px转rem的两种方法

    1)使用lib-flexible动态设置REM基准值(html标签的字体大小) 安装依赖 yarn add amfe-flexible// 或者npm i amfe-flexible 然后在main. ...

  3. vue+spring boot项目实现PC端微信登录

    一.实现微信登录在编码前需要在微信开放平台注册开发者账号和安装NatApp获取域名. 微信开放平台注册开发者账号可参考:https://blog.csdn.net/weixin_45001200/ar ...

  4. vue中pc端大屏怎么进行rem适配(lib-flexible + postcss-plugin-px2rem)

    npm i lib-flexible -S postcss-plugin-px2rem 在main.js中引入 import 'lib-flexible/flexible.js' 找到node_mod ...

  5. vue中pc端大屏怎么进行rem适配(lib-flexible + postcss-pxtorem)

    使用 插件 lib-flexible 和 postcss-pxtorem 进行是适配,一共是两个步骤,当我们在进行适配的时候,如果只将当前屏幕分成几份的话,那么在后面写样式的时候,样式的单位需要写成r ...

  6. vue-cli4+vant+rem+sass+vuex+axios封装+webpack搭建移动端项目

    h5移动端项目模板 基于 vue-cli4.0 + webpack 4 + vant ui + sass+ rem 适配方案+axios 封装,构建手机端模板脚手架 启动项目 git clone ht ...

  7. vue rem适配_vue如何使用UI库快速开发项目

    ☝点击蓝色字体关注,轻松获取最新推送 前言 项目开发中,不是所有的项目都可以让你排期.估时.有些项目可能今天才确认了需求,明天就让你出一版进行测试 怎么办? 我们可以使用UI库帮助我们快速进行项目开发 ...

  8. 移动端、后台管理、大屏可视化等项目rem适配(postcss-pxtorem、amfe-flexible)。已自测

    vue项目使用element-ui框架Rem适配(postcss-pxtorem.amfe-flexible)的安装使用. 移动端.后台管理.大屏可视化等类型项目皆适用,均已自测. 分步指南 1.安装 ...

  9. vue cli3+项目使用postcss-px2rem或者postcss-plugin-px2rem适配

    1. 使用postcss-px2rem或者postcss-plugin-px2rem讲vue项目的px全部转换未rem适配. 2. 下载: npm install --save postcss-px2 ...

最新文章

  1. mysql和SQLYog工具使用
  2. c# WinForm开发 DataGridView控件的各种操作
  3. flink scala shell命令行使用示例
  4. InfoVista.NET 内部数据格式简介
  5. 2015蓝桥杯省赛---java---A---8(移动距离)
  6. 【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析
  7. qlistview 自定义控件_是否可以在QListView中添加自定义窗口小部件?
  8. ipc (进程间通信
  9. pthread_create()函数
  10. 2022年山东省安全员C证特种作业证考试题库及答案
  11. 世界上有没有正五面体?
  12. curve BLS12-377/381 BN256 SageMath脚本
  13. 用iperf在ambarella s2l上进行网络性能测试
  14. Node.js进阶基础技能—Koa基本使用
  15. 学习历程-----postgreSql
  16. R 用回归来做 ANOVA
  17. 独立后台带分销功能月老办事处交友盲盒微信小程序源码新版,更好的裂变推广引流
  18. 微信小程序,几行代码实现图片瀑布流
  19. 渗透分支写脚本_抖音文案怎么写吸引人?最新文案创作技巧分享(赠文案脚本模板)...
  20. 科技公司LOGO在线制作设计

热门文章

  1. 32--数组中重复的数字
  2. java项目打镜像_docker通过dockerfile打java项目镜像
  3. Linux监控命令之 top
  4. 01Pandas_数据结构
  5. 【Python + Selenium】之JS定位总结
  6. tbase同步mysql_mysql主从同步
  7. Ansible执行过程分析、异步模式和速度优化
  8. input子系统基础之按键1——什么是input子系统?
  9. 5G毫米波通信中一些量化的概念
  10. html里嵌入语音,HTML5语音合成API语音/语言支持