赞
踩
最近开发了3个门户网站,一般程序员都会有显示器,一开始我使用的是flex响应式 + 宽度百分比
去进行适配,但是开发完之后发现在显示器上看着正常,但是到了笔记本上就发现宽度是自适应了,但是高度并没有随着宽度去等比例缩小
,就显得页面很别扭,所以我就查了很多文章,一个一个去试,下面来总结一下,方便以后去开发:
lib-flexible
+ px2remLoader
+ postcss-px2rem
lib-flexible
:阿里可伸缩布局方案px2rem-loader
:px转remautofit.js
: 是一个可以让你的PC项目自适应屏幕的工具npm install postcss-px2rem px2rem-loader --save
npm i lib-flexible --save
main.js
引入lib-flexible
import 'lib-flexible'
vue-loader的options和其他样式文件loader最终是都是由build/utils.js里的方法生成的,我们只需在cssLoader后再加上一个px2remLoader即可,px2rem-loader的remUnit选项意思是 1rem=多少像素,结合lib-flexible的方案,我们将px2remLoader的options.remUnit设置成设计稿宽度的1/10,这里假设设计稿宽为1920px
//utils.js
const cssLoader = {
loader: 'css-loader',
options: {
sourceMap: options.sourceMap
}
}
// 增加代码,px转rem配置(需要将px2remloader添加进loaders数组中)
const px2remLoader = {
loader: 'px2rem-loader',
options: {
remUnit: 192, //根据视觉稿,rem为px的十分之一,1920px 192 rem
// remPrecision: 8//换算的rem保留几位小数点
}
}
// //utils.js
function generateLoaders (loader, loaderOptions) {
const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader] : [cssLoader, px2remLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
//...
}
function refreshRem(){
var width = docEl.getBoundingClientRect().width;
if (width / dpr > 540) {
width = width * dpr;
}
//缩放比例,可按实际情况修改
var rem = width / 8;
docEl.style.fontSize = rem + 'px';
flexible.rem = win.rem = rem;
}
node_modules
里的lib-flexible
包,拷贝一份放在utils
里面取名为flexible.js
,修改lib-flexible的源码,(更改refreshRem函数)修改为下面的代码就可以了,当然if判断是根据自己需求的调整。// 更改refreshRem函数
function refreshRem(){
var width = docEl.getBoundingClientRect().width;
if (width / dpr > 540) {
width = width * dpr;
}
//缩放比例,可按实际情况修改
var rem = width / 8;
docEl.style.fontSize = rem + 'px';
flexible.rem = win.rem = rem;
}
import "@/utils/flexible";
// // 引入等比适配插件
const px2rem = require("postcss-px2rem");
// 配置基本大小
const postcss = px2rem({
//配置rem基准值 基准大小 baseSize,需要和rem.js中相同
remUnit: 192, // 设计稿尺寸1920/10
});
module.exports = {
chainWebpack: (config) => {
config.module
.rule("css")
.test(/\.css$/)
.oneOf("vue")
.use("px2rem-loader")
.loader("px2rem-loader")
.options({
remUnit: 192,
remPrecision: 8,
})
.end();
},
css: {
loaderOptions: {
postcss: {
plugins: [postcss]
},
},
},
}
由于我开发的时候第一次没有发现cli2 和 cli3 的区别 ,是修改flexible文件的时候才发现的(自己项目是cli3),所以会有两个步骤结合的情况,后来因为项目着急也没有去删除一些没用的去验证哪个需要哪个不需要,所以后来我就又找了找,看有没有准确的,发现很多文章都是乱的,凭自己的判断在这里提供一个看上去可行的(cli3):
npm install postcss-px2rem px2rem-loader --save
// rem等比适配配置文件
// 基准大小
const baseSize = 16
// 设置 rem 函数
function setRem () {
// 当前页面屏幕分辨率相对于 1920宽的缩放比例,可根据自己需要修改
const scale = document.documentElement.clientWidth / 1920
// 设置页面根节点字体大小(“Math.min(scale, 2)” 指最高放大比例为2,可根据实际业务需求调整)
document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px'
}
// 初始化
setRem()
// 改变窗口大小时重新设置 rem
window.onresize = function () {
setRem()
}
import './utils/rem.js'
// 引入等比适配插件
const px2rem = require('postcss-px2rem')
// 配置基本大小
const postcss = px2rem({
// 基准大小 baseSize,需要和rem.js中相同
remUnit: 16
})
// 使用等比适配插件
module.exports = {
lintOnSave: true,
css: {
loaderOptions: {
postcss: {
plugins: [
postcss
]
}
}
}
}
1、配置这些之后需要重新编译项目
2、如果个别地方不想转化px,可以简单的使用大写的PX
或 Px
,或者在其后添加/*no*/
保证不被转换
3、这种响应式配置法对于行内样式是无用的
autofit.js
是一个可以让你的PC项目自适应屏幕的工具,其原理非常简单,即在scale等比缩放的基础上,向右或向下增加了宽度或高度,以达到充满全屏的效果,使用autofit.js不会挤压、拉伸元素,它只是单纯的设置了容器的宽高。
代码仓库
Admin Pro
Antdv Pro
Antdv Pro源码
vue-admin-beautiful-pro 源码地址
最近逛技术博有看到一些文章也不错,贴出来供大家看看:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。