vue-cli3使用postcss-plugin-px2rem方式
vue-cli3使用postcss-plugin-px2rem
postcss-plugin-px2rem是可以將px自動轉(zhuǎn)化為rem的postcss插件
1.安裝
npm i postcss-plugin-px2rem --save -dev
2.package.json中添加配置(組件中px轉(zhuǎn)rem才生效)在package.json、package.json、package.json中設(shè)置很重要
"postcss-plugin-px2rem": { "rootValue": 37.5, "unitPrecision": 5, "propBlackList": [ "font-size" ], "mediaQuery": false, "minPixelValue": 3 }
3.忽略ui框架中px轉(zhuǎn)rem在vue.config.js(json中不能使用正則)中配置
css: { loaderOptions: { postcss: { plugins: [ require('postcss-plugin-px2rem')({ // rootValue: 100, //換算基數(shù), 默認(rèn)100 ,這樣的話把根標(biāo)簽的字體規(guī)定為1rem為50px,這樣就可以從設(shè)計稿上量出多少個px直接在代碼中寫多上px了。 //propWhiteList: [], //默認(rèn)值是一個空數(shù)組,這意味著禁用白名單并啟用所有屬性。 exclude: /node_module/, //默認(rèn)false,可以(reg)利用正則表達(dá)式排除某些文件夾的方法,例如/(node_module)/ 。如果想把前端UI框架內(nèi)的px也轉(zhuǎn)換成rem,請把此屬性設(shè)為默認(rèn)值 // selectorBlackList: [], //要忽略并保留為px的選擇器 // ignoreIdentifier: false, //(boolean/string)忽略單個屬性的方法,啟用ignoreidentifier后,replace將自動設(shè)置為true。 // replace: true, // (布爾值)替換包含REM的規(guī)則,而不是添加回退。 }), ] } } }
px轉(zhuǎn)rem插件postcss-plugin-px2rem使用方法(瀏覽器縮放頁面自適應(yīng))
常見屏幕自適應(yīng)的布局
- 百分比布局
- rem布局
- css媒體查詢
- 在前端框架設(shè)計初期,應(yīng)優(yōu)先選擇好頁面布局方式
postcss-plugin-px2rem插件的使用
官網(wǎng)地址:https://www.npmjs.com/package/postcss-plugin-px2rem
1.下載插件
npm i postcss-plugin-px2rem --save
2.在vite.config.js
import px2rem from 'postcss-plugin-px2rem'; // 插件的參數(shù)設(shè)置 const px2remOptions = { rootValue: 16, //換算基數(shù), 默認(rèn)100 ,根元素字體的大小 unitPrecision: 5, //允許REM單位增長到的十進(jìn)制數(shù)字,其實就是精度控制 // propWhiteList: [], // 白名單 // propBlackList: [], // 黑名單 exclude:false, //默認(rèn)false,排除某些文件夾的方法,例如/(node_module)/ 。 // selectorBlackList: [], //要忽略并保留為 px 的選擇器。可以是字符串或者正則表達(dá)式 // ignoreIdentifier: false, //(boolean/string)一種忽略單個屬性的方法,當(dāng)啟用 ignoreIdentifier 時,replace將自動設(shè)置為true。 // replace: true, // (布爾值)替換包含 rems 的規(guī)則,而不是添加后備規(guī)則。 mediaQuery: false, //(布爾值)允許在媒體查詢中轉(zhuǎn)換px minPixelValue: 0 // 設(shè)置要替換的最小像素值。 默認(rèn) 0 } export default defineConfig({ plugins:[...], css:{ postcss:{ plugins:[px2rem(px2remOptions)] } } })
3.在util文件夾中創(chuàng)建pxToRem.js文件
注意:
- 我看其他文章上有做了性能優(yōu)化,加入了縮放監(jiān)聽防抖。
- 加了防抖,縮放時,會出現(xiàn)那種類似于卡頓的效果,但是性能上確實有優(yōu)化。
- (算是犧牲視覺效果增加性能,加不加防抖不妨都試試,看產(chǎn)品需求,因人而異)
// pxToRem.js import _ from 'lodash' // 以1920px 底圖為準(zhǔn)開發(fā)頁面,動態(tài)修改根元素字體的大小 export const setDomFontSize = () => { let width = document.documentElement.clientWidth || document.body.clientWidth; let fontsize = (width <= 200 ? 1200 : width) / 100 + 'px'; (document.getElementsByTagName('html')[0].style)['font-size'] = fontsize; } // let setDomFontSizeDebounce = _.debounce(setDomFontSize, 400) // window.addEventListener('resize', setDomFontSizeDebounce); // 瀏覽器加入收縮監(jiān)聽防抖,重新計算rem配置 window.addEventListener('resize', setDomFontSize); // 這里有個知識點: window.onresize,window.addEventLister兩種方式的區(qū)別 // 最主要的區(qū)別:onresize本身就是一個回調(diào),多次執(zhí)行會被覆蓋,通過addEventLister監(jiān)聽多次執(zhí)行就不會被覆蓋,運用于循環(huán)生成多個Echarts時,改變窗口大小,Echarts圖表自適應(yīng)問題
4.在main.js中進(jìn)行配置
// main.js import { setDomFontSize } from './utils/pxToRem' // 執(zhí)行方法,相當(dāng)于全局掛載了 setDomFontSize()
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue中nprogress頁面加載進(jìn)度條的方法實現(xiàn)
這篇文章主要介紹了Vue中nprogress頁面加載進(jìn)度條的方法實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11vue3使用別名報錯問題的解決辦法(vetur插件報錯問題)
最近在寫一個購物網(wǎng)站使用vue,使用中遇到了問題,下面這篇文章主要給大家介紹了關(guān)于vue3使用別名報錯問題的解決辦法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07詳解vite+ts快速搭建vue3項目以及介紹相關(guān)特性
這篇文章主要介紹了vite+ts快速搭建vue3項目以及介紹相關(guān)特性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02v-if 導(dǎo)致 elementui 表單校驗失效問題解決方案
在使用 elementui 表單的過程中,某些表單項需要通過 v-if 來判斷是否展示,但是這些表單項出現(xiàn)了檢驗失效的問題,今天小編給大家介紹v-if 導(dǎo)致 elementui 表單校驗失效問題解決方案,感興趣的朋友一起看看吧2024-01-01Vue實現(xiàn)網(wǎng)頁轉(zhuǎn)PDF方法流程詳解
在日常的工作中,有時候會碰到需要將某個網(wǎng)址網(wǎng)頁保存成為pdf的情況,這篇文章主要介紹了用Vue實現(xiàn)網(wǎng)頁轉(zhuǎn)PDF的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08