如何實(shí)現(xiàn)vue-cli移動端適配問題 引入lib-flexible

第一部分:項(xiàng)目中引入lib-flexible

一、項(xiàng)目中安裝lib-flexible

npm install lib-flexible --save

二、在項(xiàng)目的入口main.js文件中引入lib-flexible

import 'lib-flexible'

第二部分:使用postcss-px2rem自動將css中的px轉(zhuǎn)換成rem

一、安裝postcss-px2rem?

npm install postcss-px2rem --save-dev


二、配置px2rem-loader

在vue-cli生成的文件中,找到以下文件 build/utils.js,如下圖添加配置




初始的適配方案就完成了,然后可以直接在css或.vue文件中寫已px為單位的樣式了,到瀏覽器會自動轉(zhuǎn)為rem。

因?yàn)榍捌陧?xiàng)目安排不是太趕,ui給的設(shè)計圖也相對簡單,所以自己寫了按鈕組件之類的,適配還挺好,覺得自己棒棒噠~

直到ui的后續(xù)設(shè)計圖出現(xiàn)時間插件,然后就引入了vant的組件庫。

放了一個簡單的cell組件,npm run serve項(xiàng)目跑起來,發(fā)現(xiàn)組件中的樣式都變小了,F(xiàn)12看了一下果然組件的樣式也都被轉(zhuǎn)換成了rem。

px2rem 用法

安裝px2rem后,再使用px上有些不同,大家可以參考px2rem官方介紹,下面簡單介紹一下。

直接寫px,編譯后會直接轉(zhuǎn)化成rem ---- 除開下面兩種情況,其他長度用這個

在px后面添加/*no*/,不會轉(zhuǎn)化px,會原樣輸出。 --- 一般border需用這個

在px后面添加/*px*/,會根據(jù)dpr的不同,生成三套代碼。---- 一般字體需用這個

示例代碼

編譯前(自己寫的代碼)

.selector {

?width: 150px;

?height: 64px; /*px*/

?font-size: 28px; /*px*/

?border: 1px solid#ddd; /*no*/

}

編譯后(打包后的代碼)

.selector {

?width: 2rem;

?border: 1px solid#ddd;

}

[data-dpr="1"] .selector {

?height: 32px;

?font-size: 14px;

}

[data-dpr="2"] .selector {

?height: 64px;

?font-size: 28px;

}

[data-dpr="3"] .selector {

?height: 96px;

?font-size: 42px;

}

重啟項(xiàng)目,就可以愉快的用設(shè)計稿上的px了。

注意:坑

不能在index.html的頭部加 name 為 viewport 的 meta 標(biāo)簽,flexible會自動為我們添加!

問題

變小的主要原因是第三庫 css一依據(jù)data-dpr="1"時寫的尺寸

這時我們使用的flexible引入時 data-dpr不是一個寫死了的,是一個動態(tài)的;就導(dǎo)致這個問題

然后就各種查解決方案,網(wǎng)絡(luò)上給的解決方案一個是改寫第三方庫的樣式,還有一個就是讓flexible不編譯第三方庫的文件(忽略ui組件庫的樣式文件)。

解決方案一:

將第三方組件的css文件復(fù)制出來第三方庫的css代碼px統(tǒng)一擴(kuò)大2倍,或者用全局替換將px替換為px/*no*/。我覺的這個方案不太好沒有采用,具體操作可以參考以下兩篇文章:https://segmentfault.com/a/1190000014575890 和 https://blog.csdn.net/weixin_42464312/article/details/82769805。

解決方案二:

使用postcss-px2rem-exclude,網(wǎng)上好多說用這個方法不起作用,經(jīng)過一個下午的折騰才發(fā)現(xiàn)是使用方法不對,我的錯誤方法就不跟你們說了,直接來正確的。

首先,需要卸載項(xiàng)目中的postcss-px2rem。

npm? uninstall postcss-px2rem --save-dev

其次,安裝postcss-px2rem-exclude

npm? install postcss-px2rem-exclude --save

最后是配置exclude選項(xiàng),需要注意的是這個配置在vue.config.js中式不起作用的,如圖。

正確的配置位置是項(xiàng)目根目錄下的postcss.config.js文件,如果你的項(xiàng)目沒有生成這個獨(dú)立文件,就需要在你的package.js里設(shè)置。

postcss.config.jsmodule.exports= {

? plugins: {

? ? autoprefixer: {},

? ? "postcss-px2rem-exclude": {

? ? ? remUnit: 75,

? ? ? exclude: /node_modules|folder_name/i

? ? }

? }

};

package.json"postcss": {

? ? "plugins": {

? ? ? "autoprefixer": {},

? ? ? "postcss-px2rem-exclude":{

? ? ? ? ? "remUnit":75,

? ? ? ? ? "exclude":"/node_modules|floder_name/i"? ? ? }

? ? }

? },

ok,完成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容