Vue-cli 3.x 中實(shí)現(xiàn)頁(yè)面等比縮放(postcss-px2rem)

# 前言

前端的童鞋們可能會(huì)遇到這樣一個(gè)問(wèn)題,UI設(shè)計(jì)師給出了一套設(shè)計(jì)圖,我們需要自適應(yīng)各種屏幕,且各個(gè)元素的大小和字體大小也隨之縮放咖刃。

# 經(jīng)歷

看到這個(gè)需求,本人首先會(huì)想到之前的思路是媒體查詢(xún)憾筏,檢測(cè)不同范圍的屏幕寬度嚎杨,寫(xiě)不同的樣式來(lái)改變排版,以適應(yīng)pc氧腰、ipad和移動(dòng)端等枫浙。

# 問(wèn)題

假設(shè)屏幕大于999px都屬于pc端,pc 分為大屏超大屏古拴,我們需要響應(yīng)大屏到超大屏之間的適應(yīng)箩帚,舉個(gè)栗子:
例如:媒體查詢(xún) (屏幕999~1200 div.title 都是 200px 寬,1200~1440黄痪。紧帕。。)
也就是說(shuō)某個(gè)區(qū)間內(nèi)桅打,div.title 的寬度是不變的是嗜,當(dāng)然你要設(shè)成百分比也不是可變的,那字體是否也可變呢挺尾?想要實(shí)時(shí)響應(yīng)字體大小和元素大小又該如何解決呢?

# 解決等比縮放

這里我們可以使用一個(gè)插件叠纷,可以很輕松的解決掉這個(gè)實(shí)時(shí)響應(yīng)等比縮放的問(wèn)題:px2rem 插件。

安裝

npm i postcss-px2rem --s

配置

vue.config.js 文件

// 1. 引入等比適配插件
const px2rem = require('postcss-px2rem')

// 2. 配置基本大小
const postcss = px2rem({
    // 基準(zhǔn)大小 baseSize潦嘶,需要和rem.js中相同
    remUnit: 100
})
// 3. 使用插件
module.exports = {
  css: {
        loaderOptions: {
            // 等比縮放的插件
            postcss: {
                plugins: [
                    postcss
                ]
            }
        }
    }
}

需要結(jié)合 rem.js 配置

var fun = function (doc, win) {
    var docEl = doc.documentElement,
        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
        recalc = function () {
            var clientWidth = docEl.clientWidth;
            if (!clientWidth) return;
            // 這里是假設(shè)在750px寬度設(shè)計(jì)稿的情況下涩嚣,1rem = 100px;
            // 可以根據(jù)實(shí)際需要修改 
            // 1920 響應(yīng)的最大屏幕
            docEl.style.fontSize = (clientWidth / 1920) * 100 + 'px';
        };
    if (!doc.addEventListener) return;
    win.addEventListener(resizeEvt, recalc, false);
    doc.addEventListener('DOMContentLoaded', recalc, false);
}
fun(document, window);
window.onresize = function () {
    fun(document, window);
}

到這里配置完成啦掂僵,看下效果

配置前


image.png

image.png

配置后


image.png

image.png

哇哦航厚,是不是很簡(jiǎn)單,是不是很神奇锰蓬,小伙伴們趕快試試吧 ~~
點(diǎn)贊 ~~ 轉(zhuǎn)發(fā) ~~

# 番外篇

還有兩款插件幔睬,分別為:
postcss-plugin-px2rempostcss-pxtorem

postcss-plugin-px2remvue.confing 中常用配置為:

css: {
    loaderOptions: {
        postcss: {
            plugins: [
                require('postcss-plugin-px2rem')({
                    // rootValue: 100, //換算基數(shù), 默認(rèn)100  芹扭,這樣的話(huà)把根標(biāo)簽的字體規(guī)定為1rem為50px,這樣就可以從設(shè)計(jì)稿上量出多少個(gè)px直接在代碼中寫(xiě)多上px了麻顶。
                    // unitPrecision: 5, //允許REM單位增長(zhǎng)到的十進(jìn)制數(shù)字。
                    //propWhiteList: [],  //默認(rèn)值是一個(gè)空數(shù)組舱卡,這意味著禁用白名單并啟用所有屬性辅肾。
                    // propBlackList: [], //黑名單
                    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ī)則,而不是添加回退概龄。
                    mediaQuery: false,  //(布爾值)允許在媒體查詢(xún)中轉(zhuǎn)換px还惠。
                    minPixelValue: 3 //設(shè)置要替換的最小像素值(3px會(huì)被轉(zhuǎn)rem)。 默認(rèn) 0
                }),
            ]
        }
    }
}

postcss-pxtoremvue.confing 中常用配置為:

css: {
    loaderOptions: {
        postcss: {
            plugins: [
                require('postcss-pxtorem')({//這里是配置項(xiàng)私杜,詳見(jiàn)官方文檔
                    rootValue: 1, // 換算的基數(shù)
                    selectorBlackList: ['weui', 'mu'], // 忽略轉(zhuǎn)換正則匹配項(xiàng)
                    propList: ['*'],
                }),
            ]
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吸重,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子歪今,更是在濱河造成了極大的恐慌嚎幸,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寄猩,死亡現(xiàn)場(chǎng)離奇詭異嫉晶,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)田篇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)替废,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人泊柬,你說(shuō)我怎么就攤上這事椎镣。” “怎么了兽赁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵状答,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我刀崖,道長(zhǎng)惊科,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任亮钦,我火速辦了婚禮馆截,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜂莉。我一直安慰自己蜡娶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布映穗。 她就那樣靜靜地躺著窖张,像睡著了一般。 火紅的嫁衣襯著肌膚如雪男公。 梳的紋絲不亂的頭發(fā)上荤堪,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天合陵,我揣著相機(jī)與錄音枢赔,去河邊找鬼澄阳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛踏拜,可吹牛的內(nèi)容都是我干的碎赢。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼速梗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肮塞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起姻锁,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤枕赵,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后位隶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拷窜,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年涧黄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了篮昧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笋妥,死狀恐怖懊昨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情春宣,我是刑警寧澤酵颁,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站月帝,受9級(jí)特大地震影響材义,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嫁赏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一其掂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潦蝇,春花似錦款熬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至则酝,卻和暖如春殉簸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工般卑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留武鲁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓蝠检,卻偏偏與公主長(zhǎng)得像沐鼠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叹谁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351