vue-cli3使用postcss-plugin-px2rem方式
vue-cli3使用postcss-plugin-px2rem
postcss-plugin-px2rem是可以將px自動(dòng)轉(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.忽略u(píng)i框架中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è)計(jì)稿上量出多少個(gè)px直接在代碼中寫多上px了。
//propWhiteList: [], //默認(rèn)值是一個(gè)空數(shù)組,這意味著禁用白名單并啟用所有屬性。
exclude: /node_module/, //默認(rèn)false,可以(reg)利用正則表達(dá)式排除某些文件夾的方法,例如/(node_module)/ 。如果想把前端UI框架內(nèi)的px也轉(zhuǎn)換成rem,請(qǐng)把此屬性設(shè)為默認(rèn)值
// selectorBlackList: [], //要忽略并保留為px的選擇器
// ignoreIdentifier: false, //(boolean/string)忽略單個(gè)屬性的方法,啟用ignoreidentifier后,replace將自動(dòng)設(shè)置為true。
// replace: true, // (布爾值)替換包含REM的規(guī)則,而不是添加回退。
}),
]
}
}
}px轉(zhuǎn)rem插件postcss-plugin-px2rem使用方法(瀏覽器縮放頁(yè)面自適應(yīng))
常見屏幕自適應(yīng)的布局
- 百分比布局
- rem布局
- css媒體查詢
- 在前端框架設(shè)計(jì)初期,應(yīng)優(yōu)先選擇好頁(yè)面布局方式
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單位增長(zhǎng)到的十進(jìn)制數(shù)字,其實(shí)就是精度控制
// propWhiteList: [], // 白名單
// propBlackList: [], // 黑名單
exclude:false, //默認(rèn)false,排除某些文件夾的方法,例如/(node_module)/ 。
// selectorBlackList: [], //要忽略并保留為 px 的選擇器。可以是字符串或者正則表達(dá)式
// ignoreIdentifier: false, //(boolean/string)一種忽略單個(gè)屬性的方法,當(dāng)啟用 ignoreIdentifier 時(shí),replace將自動(dòng)設(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)聽防抖。
- 加了防抖,縮放時(shí),會(huì)出現(xiàn)那種類似于卡頓的效果,但是性能上確實(shí)有優(yōu)化。
- (算是犧牲視覺效果增加性能,加不加防抖不妨都試試,看產(chǎn)品需求,因人而異)
// pxToRem.js
import _ from 'lodash'
// 以1920px 底圖為準(zhǔn)開發(fā)頁(yè)面,動(dòng)態(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)聽防抖,重新計(jì)算rem配置
window.addEventListener('resize', setDomFontSize);
// 這里有個(gè)知識(shí)點(diǎn): window.onresize,window.addEventLister兩種方式的區(qū)別
// 最主要的區(qū)別:onresize本身就是一個(gè)回調(diào),多次執(zhí)行會(huì)被覆蓋,通過addEventLister監(jiān)聽多次執(zhí)行就不會(huì)被覆蓋,運(yùn)用于循環(huán)生成多個(gè)Echarts時(shí),改變窗口大小,Echarts圖表自適應(yīng)問題4.在main.js中進(jìn)行配置
// main.js
import { setDomFontSize } from './utils/pxToRem'
// 執(zhí)行方法,相當(dāng)于全局掛載了
setDomFontSize()總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue中nprogress頁(yè)面加載進(jìn)度條的方法實(shí)現(xiàn)
這篇文章主要介紹了Vue中nprogress頁(yè)面加載進(jìn)度條的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
vue3使用別名報(bào)錯(cuò)問題的解決辦法(vetur插件報(bào)錯(cuò)問題)
最近在寫一個(gè)購(gòu)物網(wǎng)站使用vue,使用中遇到了問題,下面這篇文章主要給大家介紹了關(guān)于vue3使用別名報(bào)錯(cuò)問題的解決辦法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
vue長(zhǎng)按事件和點(diǎn)擊事件沖突的解決
這篇文章主要介紹了vue長(zhǎng)按事件和點(diǎn)擊事件沖突的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
vue中echarts點(diǎn)擊事件點(diǎn)擊一次多次觸發(fā)問題
這篇文章主要介紹了vue中echarts點(diǎn)擊事件點(diǎn)擊一次多次觸發(fā)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
詳解vite+ts快速搭建vue3項(xiàng)目以及介紹相關(guān)特性
這篇文章主要介紹了vite+ts快速搭建vue3項(xiàng)目以及介紹相關(guān)特性,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
v-if 導(dǎo)致 elementui 表單校驗(yàn)失效問題解決方案
在使用 elementui 表單的過程中,某些表單項(xiàng)需要通過 v-if 來判斷是否展示,但是這些表單項(xiàng)出現(xiàn)了檢驗(yàn)失效的問題,今天小編給大家介紹v-if 導(dǎo)致 elementui 表單校驗(yàn)失效問題解決方案,感興趣的朋友一起看看吧2024-01-01
Vue實(shí)現(xiàn)網(wǎng)頁(yè)轉(zhuǎn)PDF方法流程詳解
在日常的工作中,有時(shí)候會(huì)碰到需要將某個(gè)網(wǎng)址網(wǎng)頁(yè)保存成為pdf的情況,這篇文章主要介紹了用Vue實(shí)現(xiàn)網(wǎng)頁(yè)轉(zhuǎn)PDF的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

