Vue-cli 3.x 中实现页面等比缩放(postcss-px2rem)

# 前言

前端的童鞋们可能会遇到这样一个问题,UI设计师给出了一套设计图,我们需要自适应各种屏幕,且各个元素的大小和字体大小也随之缩放。

# 经历

看到这个需求,本人首先会想到之前的思路是媒体查询,检测不同范围的屏幕宽度,写不同的样式来改变排版,以适应pc、ipad和移动端等。

# 问题

假设屏幕大于999px都属于pc端,pc 分为大屏超大屏,我们需要响应大屏到超大屏之间的适应,举个栗子:
例如:媒体查询 (屏幕999~1200 div.title 都是 200px 宽,1200~1440。。。)
也就是说某个区间内,div.title 的宽度是不变的,当然你要设成百分比也不是可变的,那字体是否也可变呢?想要实时响应字体大小和元素大小又该如何解决呢?

# 解决等比缩放

这里我们可以使用一个插件,可以很轻松的解决掉这个实时响应等比缩放的问题:px2rem 插件。

安装

npm i postcss-px2rem --s

配置

vue.config.js 文件

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

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

需要结合 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;
            // 这里是假设在750px宽度设计稿的情况下,1rem = 100px;
            // 可以根据实际需要修改 
            // 1920 响应的最大屏幕
            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

哇哦,是不是很简单,是不是很神奇,小伙伴们赶快试试吧 ~~
点赞 ~~ 转发 ~~

# 番外篇

还有两款插件,分别为:
postcss-plugin-px2rempostcss-pxtorem

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

css: {
    loaderOptions: {
        postcss: {
            plugins: [
                require('postcss-plugin-px2rem')({
                    // rootValue: 100, //换算基数, 默认100  ,这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多上px了。
                    // unitPrecision: 5, //允许REM单位增长到的十进制数字。
                    //propWhiteList: [],  //默认值是一个空数组,这意味着禁用白名单并启用所有属性。
                    // propBlackList: [], //黑名单
                    exclude: /(node_module)/,  //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值
                    // selectorBlackList: [], //要忽略并保留为px的选择器
                    // ignoreIdentifier: false,  //(boolean/string)忽略单个属性的方法,启用ignoreidentifier后,replace将自动设置为true。
                    // replace: true, // (布尔值)替换包含REM的规则,而不是添加回退。
                    mediaQuery: false,  //(布尔值)允许在媒体查询中转换px。
                    minPixelValue: 3 //设置要替换的最小像素值(3px会被转rem)。 默认 0
                }),
            ]
        }
    }
}

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

css: {
    loaderOptions: {
        postcss: {
            plugins: [
                require('postcss-pxtorem')({//这里是配置项,详见官方文档
                    rootValue: 1, // 换算的基数
                    selectorBlackList: ['weui', 'mu'], // 忽略转换正则匹配项
                    propList: ['*'],
                }),
            ]
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272