数据大屏rem适配方案

一般来说,做PC端的页面并不像移动端那样对分辨率及屏幕大小有的特别强的要求,但是针对数据大屏这种展示型的页面来说,就需要考虑适配的方案了,毕竟要尽可能的保证大部分的主流显示器都能正常展示。

市面上大部分的显示器几乎都是16:9的尺寸,也就是1920 * 1080的分辨率。
在这里插入图片描述

理想中的效果
当屏幕的尺寸比例刚好是16:9时,页面能刚好全屏展示,内容占满显示器
在这里插入图片描述
当屏幕的尺寸比例小于16:9时,页面上下留白,左右占满并上下居中,显示比例保持16:9
在这里插入图片描述
当屏幕尺寸比例大于16:9时,页面左右留白,上下占满并居中,显示比例保持16:9
当屏幕大小改变时,动态计算中间内容的显示比例大小,保证内容一直保持16:9

解决方案
rem
rem(font size of the root element),是 css3 中新增的一个大小单位,即相对于根元素 font-size 值的大小。

思路就是动态的计算出页面的fontsize从而改变rem的大小。

思路
首先拿 1920 * 1080 的标准屏幕大小为例。将屏幕分为10份,先计算rem的基准值: 1920 / 10 = 192 ,然后把所有元素的长,宽,位置,字体大小等原来的 px 单位全部转换成 rem, 网页加载后,用 js 去计算当前浏览器的宽度,并设置 html 的 font-size 为 (当前浏览器窗口宽度 / 10),这样的话10rem就刚好等于浏览器窗口的宽度。也就可以保证100%宽度,等比例缩放设计稿的页面了。

两件事:

获得 rem 的基准值。这边默认设置容器宽度为1920 * 1080,然后用1920 / 192 来计算rem的值
页面内写一段js代码,动态的计算html根元素的font-size
实现
站在巨人的肩膀上,我们不需要去从0到1去实现两个需求。

针对第一点:

首先安装 @njleonzhang/postcss-px-to-rem 这个包
npm i @njleonzhang/postcss-px-to-rem -D
复制代码
新建.postcssrc.js配置文件

module.exports = {
plugins: {
autoprefixer: {},
"@njleonzhang/postcss-px-to-rem": {
unitToConvert: 'px', // (String) 要转换的单位,默认是px。
widthOfDesignLayout: 1920, 
// (Number) 设计布局的宽度。对于pc仪表盘,一般是1920.
unitPrecision: 3, 
// (Number) 允许 REM 单位增长到的十进制数字.
selectorBlackList: ['.ignore', '.hairlines'], 
// (Array) 要忽略并保留为 px 的选择器.
minPixelValue: 1, // (Number) 设置要替换的最小像素值.
mediaQuery: false // (Boolean) 允许在媒体查询中转换 px.
}
}
}

复制代码
配置完成后,页面内的px就会被转换成rem了
针对第二点:

新建一个rem.js文件,在入口中引入,用于动态计算font-size

(function init(screenRatioByDesign = 16 / 9) {
let docEle = document.documentElement
function setHtmlFontSize() {
var screenRatio = docEle.clientWidth / docEle.clientHeight;
var fontSize = (
screenRatio > screenRatioByDesign
? (screenRatioByDesign / screenRatio)
: 1
) * docEle.clientWidth / 10;
docEle.style.fontSize = fontSize.toFixed(3) + "px";
console.log(docEle.style.fontSize);
}

setHtmlFontSize()

window.addEventListener('resize', setHtmlFontSize)
})()

复制代码
至此,页面就已经可以实现16:9自适应了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linlinlove2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值