Vant 的 rem 引用

本文详细介绍了在Vant项目中如何配置和使用rem单位,通过main.js的设置以及postcss.config.js的配置文件来实现响应式布局。

引入:

npm i lib-flexible -S

npm i postcss-pxtorem -D

main.js

import "lib-flexible/flexible";

项目根目录下创建:

postcss.config.js

//postcss.config.js
module.exports = {
  
<think> 我们参考了引用[1]中提到的npm安装方式,但用户要求使用pnpm安装Vant。pnpm的使用方式与npm类似,只需将npm命令替换为pnpm即可。 同时,用户希望全局引用Vant并实现rem布局。 步骤: 1. 使用pnpm安装Vant - 根据项目使用的Vue版本选择安装对应的Vant版本(Vue 3对应最新版Vant,Vue 2对应Vant 2) 2. 全局引入Vant - 可以在main.js(或main.ts)中全局引入Vant组件和样式 3. 实现rem布局 - 安装postcss-pxtorem插件,用于将px单位转换为rem单位 - 配置vant的样式基准值(Vant默认使用37.5px作为设计基准,但可以通过配置调整) - 设置html元素的font-size,通常使用lib-flexible或amfe-flexible来根据设备宽度动态设置font-size 具体步骤: 一、安装Vant 对于Vue 3项目: ```bash pnpm add vant ``` 对于Vue 2项目: ```bash pnpm add vant@latest-v2 ``` 二、全局引入Vant 在项目的入口文件(如src/main.js或src/main.ts)中: ```javascript import { createApp } from 'vue' import App from './App.vue' import Vant from 'vant' import 'vant/lib/index.css' const app = createApp(App) app.use(Vant) app.mount('#app') ``` 三、实现rem布局 1. 安装必要的依赖: - amfe-flexible:用于设置动态的根元素font-size - postcss-pxtorem:用于将px转换为rem ```bash pnpm add amfe-flexible postcss-pxtorem -D ``` 2. 在入口文件中引入amfe-flexible(通常在main.js中): ```javascript import 'amfe-flexible' ``` 3. 配置postcss-pxtorem。可以在项目根目录下创建postcss.config.js文件,配置如下: ```javascript module.exports = { plugins: { 'postcss-pxtorem': { rootValue: 37.5, // Vant设计稿基准为37.5(设计稿宽度375px),如果设计稿是750px,则设置为75。但Vant的样式是基于375px设计的,所以这里建议设置为37.5,这样Vant的样式可以正确转换。 propList: ['*'], // 需要转换的属性,*表示所有属性 selectorBlackList: ['.norem'] // 过滤掉.norem开头的class,不进行rem转换 } } } ``` 注意:如果你的设计稿是750px(即设计稿宽度为750px),那么你在编写自己的样式时,可以按照设计稿的尺寸除以2来写(因为750的设计稿1px相当于设备宽度的1/750,而375的设计稿1px相当于1/375,所以750设计稿的1px相当于375设计稿的0.5px,因此除以2)。而Vant组件是按照375px设计稿设计的,所以我们在配置postcss-pxtorem时,rootValue设置为37.5(即37.5px=1rem)即可同时适配Vant和自己的样式(自己的样式按750设计稿写,然后除以2,再被转换为rem,这样在375屏幕上就会显示正常)。 另一种做法:如果不想自己手动除以2,可以将rootValue设置为一个函数,根据不同的文件路径返回不同的值。比如,对于node_modules中的vant文件,使用37.5,对于自己的样式文件,使用75。配置如下: ```javascript module.exports = { plugins: { 'postcss-pxtorem': { rootValue({ file }) { return file.indexOf('vant') !== -1 ? 37.5 : 75; }, propList: ['*'], selectorBlackList: ['.norem'] } } } ``` 这样配置后,在编写自己的样式时可以直接按照750设计稿的尺寸来写(单位px),在编译时会转换为rem(除以75)。而Vant的样式则除以37.5,保持Vant的正常显示。 4. 在public/index.html中添加视口标签(如果已有则忽略): ```html <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> ``` 完成以上步骤后,项目就支持rem布局了。 注意:在开发过程中,设计稿上的尺寸如果是750px,那么在写样式时,直接使用设计稿上的像素值,例如设计稿上宽度为100px,则写100px,postcss-pxtorem会将其转换成(100/75)rem。而对于Vant组件,其内部的样式都是基于375px设计稿(即37.5的rootValue)转换的,所以显示正常。 如果遇到问题,检查配置是否正确以及是否重启了开发服务器(因为配置postcss.config.js后可能需要重启)。 引用说明: [^1] 提供了npm安装Vant的方式,我们类比使用了pnpm安装。 [^2] 提供了CDN引入方式,但这里我们使用pnpm安装并在项目中引入,因此不采用CDN方式。 相关问题: 1. 如何按需引入Vant组件? 2. 在Vue项目中如何配置postcss插件? 3. rem布局和vw布局有什么区别? </think> ### 使用 pnpm 安装 Vant、全局引用并实现 rem 布局 #### 1. **使用 pnpm 安装 Vant** 根据 Vue 版本选择安装命令: ```bash # Vue 3 项目 pnpm add vant # Vue 2 项目 pnpm add vant@latest-v2 ``` #### 2. **全局引入 Vant** 在入口文件(如 `main.js` 或 `main.ts`)中全局注册: ```javascript import { createApp } from 'vue' import App from './App.vue' import Vant from 'vant' import 'vant/lib/index.css' // 引入全局样式 const app = createApp(App) app.use(Vant) // 全局注册组件 app.mount('#app') ``` #### 3. **实现 rem 布局** **步骤说明:** 1. **安装依赖** 安装 flexible 和 postcss 插件: ```bash pnpm add amfe-flexible postcss-pxtorem -D ``` 2. **设置基准值** 在入口文件中引入动态 rem 适配: ```javascript // main.js import 'amfe-flexible' // 自动设置 html 的 font-size ``` 3. **配置 postcss** 创建 `postcss.config.js` 文件: ```javascript module.exports = { plugins: { 'postcss-pxtorem': { rootValue: 37.5, // Vant 设计稿基准(375px 宽) propList: ['*'], // 转换所有属性的 px 单位 selectorBlackList: ['.norem'] // 忽略 .norem 开头的类 } } } ``` 4. **HTML 视口设置** 在 `public/index.html` 中添加: ```html <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> ``` #### 4. **验证 rem 布局** 在 CSS 中直接使用 px 单位,编译后会自动转换: ```css /* 输入: */ .container { width: 375px; } /* 输出: */ .container { width: 10rem; /* 375px / 37.5 = 10rem */ } ``` #### 注意事项: 1. **设计稿适配** - 若设计稿为 750px,将 `rootValue` 设为 75(750 / 10) - Vant 组件默认按 375px 设计,无需额外调整[^1] 2. **忽略特定样式** 添加 `.norem` 前缀避免转换: ```css /* 不会被转换 */ .norem-box { border: 1px solid #ccc; } ``` --- ### 引用说明 [^1]: Vant 官方推荐使用 37.5px 作为 rem 基准值,确保组件尺寸适配移动端 [^2]: 全局引入需加载完整样式文件,若需按需加载可配合 `unplugin-vue-components`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值