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

vue项目实现postcss-pxtoremvue大屏适配

1.安装依赖

npm install postcss-pxtorem autoprefixer postcss-loader --save-dev
# 或者
yarn add postcss-pxtorem autoprefixer postcss-loader --dev

2.配置 PostCSS

在项目根目录下创建一个 .postcssrc.js 文件,并添加以下配置:
module.exports = {plugins: {autoprefixer: {},'postcss-pxtorem': {rootValue: 16, // 1rem = 16pxpropList: ['*'], // 转换所有属性unitPrecision: 5, // 单位精度replace: true, // 替换 px 为 remmediaQuery: false, // 不转换媒体查询中的单位minPixelValue: 1, // 最小像素值exclude: /node_modules/i, // 排除 node_modules,如果是多个 [/node_modules/, /public/], // 排除 node_modules 和 public 目录},},
};

3.配置 webpack

// vue.config.js
module.exports = {css: {loaderOptions: {postcss: {plugins: [require('autoprefixer'),require('postcss-pxtorem')({rootValue: 16, // 1rem = 16pxpropList: ['*'], // 转换所有属性unitPrecision: 5, // 单位精度replace: true, // 替换 px 为 remmediaQuery: false, // 不转换媒体查询中的单位minPixelValue: 1, // 最小像素值exclude: /node_modules/i, // 排除 node_modules}),],},},},
};

4.监测屏幕缩放动态设置根元素

// src/utils/adjustFontSize.js
function adjustFontSize() {// 获取屏幕宽度const screenWidth = window.innerWidth || document.documentElement.clientWidth;// 根据屏幕宽度设置根元素的字体大小// 假设我们想要每 100px 屏幕宽度对应 1remconst baseFontSize = 16; // 默认的字体大小const customFontSize = (screenWidth / 1920) * baseFontSize;// 设置 html 的字体大小document.documentElement.style.fontSize = `${customFontSize}px`;
}// 初始化
adjustFontSize();// 监听窗口大小改变事件
window.addEventListener('resize', adjustFontSize);

5.在 Vue.js 应用中导入和使用 adjustFontSize

//main.js
import './utils/adjustFontSize';

项目中开发时就可以用px开发啦

注意:
在大屏开发中,如果是行内样式的px,不会被进行转换,所以考虑手动转换(echarts中设置grid时就因为没有手动转换rem,导致第一次测试时样式跑偏)

pxToRem.fontSize = function (res){const clientWidth= window.innerWidth || window.documentElement.clientWidth || document.body.clientWidth;if(clientWidth){return}let fontSize =  clientWidth/1920;return res*fontSize
}使用时:pxToRem.fontSize(80)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【运维】在 CentOS 7 中修改 `http_proxy` 设置
  • 从0-1开发一个Vue3前端系统页面-9.博客页面布局
  • 8月18日笔记
  • 访客管理系统 - 在线版 识别身份证文字信息
  • Android -- 谷歌地图绘制
  • MySQL数据库专栏(四)数据库操作
  • 汽车IVI中控OS Linux driver开发实操(二十四):I2C设备驱动的编写
  • Token Compensator:无需重新微调即可改变视觉Transformer的推理成本
  • C++中类和对象(2)
  • python数组和队列
  • leetcode + react学习
  • Kafka系列之:Dead Letter Queue死信队列DLQ
  • webrtc学习笔记1
  • 企业选型指南:8款最佳工资管理系统推荐
  • 使用 Vue 2 搭建大屏可视化系统
  • 【刷算法】从上往下打印二叉树
  • 07.Android之多媒体问题
  • Android框架之Volley
  • C++类的相互关联
  • Elasticsearch 参考指南(升级前重新索引)
  • Flex布局到底解决了什么问题
  • Git的一些常用操作
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript-Array类型
  • java小心机(3)| 浅析finalize()
  • js数组之filter
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 异步
  • 正则表达式
  • 阿里云ACE认证学习知识点梳理
  • ​Java基础复习笔记 第16章:网络编程
  • ​Redis 实现计数器和限速器的
  • # 数仓建模:如何构建主题宽表模型?
  • ###STL(标准模板库)
  • (1)Android开发优化---------UI优化
  • (Java数据结构)ArrayList
  • (solr系列:一)使用tomcat部署solr服务
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • .net 4.0发布后不能正常显示图片问题
  • .NET 8.0 中有哪些新的变化?
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET/C# 使窗口永不获得焦点
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .Net环境下的缓存技术介绍
  • .NET框架类在ASP.NET中的使用(2) ——QA