当前位置: 首页 > ds >正文

vue3 vite 自适应方案

两种方案:

1 使用 postcss-pxtorem插件

npm install postcss-pxtorem autoprefixer --save-dev #

或 yarn add postcss-pxtorem autoprefixer -D

2、postcss-px-to-viewport

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

yarn add postcss-px-to-viewport -D

安装完成后再项目跟目录下新建postcss.config.cjs

module.exports = {plugins: {// 自动添加浏览器前缀autoprefixer: {overrideBrowserslist: ['Android 4.1','iOS 7.1','Chrome > 31','ff > 31','ie >= 8']},// px 转 rem 配置// 'postcss-pxtorem': {//   rootValue: 75, // 设计稿宽度的 1/10(375px 设计稿对应 37.5)//   propList: ['*'], // 需要转换的属性,* 表示所有//   unitPrecision: 2, // 转换后的小数位数//   selectorBlackList: ['ignore-'], // 忽略带 ignore- 前缀的类//   replace: true, // 直接替换 px 而不是添加备用属性//   mediaQuery: false, // 不转换媒体查询中的 px//   minPixelValue: 1, // 小于 1px 不转换//   // exclude: /node_modules/i // 排除 node_modules 目录// },// px 转 vw vh 配置'postcss-px-to-viewport': {viewportWidth: 375, // 设计稿的视口宽度(核心配置)viewportHeight: 667, // 设计稿的视口高度(可选)unitPrecision: 5, // 转换后保留的小数位数viewportUnit: 'vw', // 主要转换的单位,可选 vw/vhselectorBlackList: ['ignore-'], // 不转换的选择器minPixelValue: 1, // 小于等于 1px 不转换mediaQuery: false, // 是否转换媒体查询中的 pxexclude: /node_modules/i, // 排除转换的目录include: undefined, // 需要强制转换的目录landscape: false, // 是否处理横屏情况landscapeUnit: 'vh', // 横屏时使用的单位landscapeWidth: 667 // 横屏时的视口宽度}}
};

以上代码为 rem 和 vw vh 两种方案,大家在开发中任选其中一个就可以

这个两种方案没有办法转换行内样式,

下面我们可以写两个函数将行内样式转换

export const pxToVw=(px, designWidth = 375)=> {const vw = (px / designWidth) * 100;// 先乘 100000 后四舍五入,再除以 100000 保留5位小数const roundedVw = Math.round(vw * 100000) / 100000;// 确保即使小数位不足5位也显示5位return roundedVw.toLocaleString('en-US', {minimumFractionDigits: 5,maximumFractionDigits: 5}) + 'vw';
}
export function pxToRem(px, rootValue = 75) {const rem = px / rootValue;// 保留 5 位小数(与 postcss-pxtorem 的 unitPrecision 保持一致)const roundedRem = Math.round(rem * 100000) / 100000;// 确保显示 5 位小数return roundedRem.toLocaleString('en-US', {minimumFractionDigits: 5,maximumFractionDigits: 5}) + 'rem';
}

需要注意的是

pxToVw 的designWidth 参数需要和postcss.config.cjs的viewportWidth 值保持一致

pxToRem的rootValue参数值需要和postcss.config.cjs的 rootValue值保持一致

http://www.xdnf.cn/news/20017.html

相关文章:

  • Java+AI开发实战与知识点归纳系列:Spring流式输出实战——LangChain4j与Ollama集成
  • 2025 大数据时代值得考的证书排名前八​
  • TypeScript与JavaScript:从动态少年到稳重青年的成长之路
  • “企业版维基百科”Confluence
  • STM32 - Embedded IDE - GCC - 如何在工程中定义一段 NoInit RAM 内存
  • 爬取m3u8视频完整教程
  • JavaWeb项目在服务器部署
  • 数据结构之----线性表其一---顺序表
  • 弱电太累,职业发展遇瓶颈?那一定不要错过这个技能!
  • 单片机(89C51)---基础知识
  • 阅兵时刻,耐达讯自动化RS485 转 Profinet 网关助力矿山冶金连接迈向辉煌
  • 【大数据技术实战】Flink+DS+Dinky 自动化构建数仓平台
  • 嵌入式 Linux 启动流程详解 (以 ARM + U-Boot 为例)
  • 【ShiMetaPi M4-R1】上手:RK3568B2|开源鸿蒙(OpenHarmony) 应用开发快速上手
  • Vue+Echarts饼图深度美化指南:打造卓越数据可视化体验
  • 深入理解 Java 集合框架:底层原理与实战应用
  • 0元部署私有n8n,免费的2CPU+16GB服务器,解锁无限制的工作流体验
  • ruoyi vue element 实现点击、返回首页收起已经展开的菜单栏
  • SpringBoot 整合 Kafka 的实战指南
  • 《用 Django 构建博客应用:从模型设计到文章管理的全流程实战》
  • 2025年11月GIS应用技术测评考试(附考试资料分享)
  • 【开题答辩全过程】以 校园安全管理系统设计与实现为例,包含答辩的问题和答案
  • Django 命令大全:从入门到精通,开发者必备指南
  • Spring Boot 事务失效的八大原因及解决方案详解
  • 什么是科技成果鉴定测试?成果鉴定测试报告带给企业什么好处?
  • 【54页PPT】基于DeepSeek的数据治理技术(附下载方式)
  • 数据库高可用全方案:Keepalived 故障切换 + LVS (DR) 模式 + MariaDB 主主同步实战案例
  • 深度学习----卷积神经网络的数据增强
  • docker 安装 redis 并设置 volumes 并修改 修改密码(三)
  • 工厂设备物联平台_HawkEye智能运维平台_璞华大数据