#yyds干货盘点#自适应布局方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#自适应布局方案相关的知识,希望对你有一定的参考价值。

起步

rem 是什么

​rem​​(font size of the root element)是指相对于根元素​​<html>​​来做计算的字体大小单位。

e.g. 设置​​html font-size: 75px ​​时,其他元素​​1rem = 75px​​,​​4rem = 300px​

vw 是什么

​vw​​是基于​​viewport​​视窗的长度单位。​​1vw​​等于​​window.innerWidth​​的​​1%​

e.g. 设备物理宽度为​​375px​​时,​​1vw = 3.75px​

dpr 是什么

设备像素比​​device pixel ratio​​简称​​dpr​​,即物理像素和设备独立像素的比值。

在​​web​​中,浏览器为我们提供了​​window.devicePixelRatio​​来帮助我们获取​​dpr​​。

​iPhone 6、7、8​​的实际物理像素是​​750 x 1334​​,在开发者工具中我们可以看到:它的设备独立像素是​​375 x 667​​,设备像素比​​dpr​​为​​2​

e.g. 如果给定一个元素的高度为​​200px​​​(这里的​​px​​​指物理像素,非​​CSS​​​像素),​​iphone6​​​的设备像素比​​dpr = 2​​​,我们给定的​​height​​​应为​​200px/2=100dp​​。


postcss-px-to-viewport

​postcss-px-to-viewport​​的做法其实没多大不同,它直接计算每个像素在设计稿中占据的​​%​​来输出​​vw​​,​​rem​

设计稿 = 375px 时

转换 VW 方案

postcss-px-to-viewport: 
unitToConvert: px, // 需要转换的单位,默认为"px"
viewportWidth: 375, // 视窗的宽度,对应设计稿的宽度
viewportUnit: vw, // 指定需要转
fontViewportUnit: vw, // 字体使用的视口单位
unitPrecision: 13 // 指定`px`转换为视窗单位值的小数后 x位数
...

复制代码

计算 1px 在设计稿中的占比,再换算成 vw

​1px = 1 / 375 = 0.2666666666666%​​ 即 ​​100px = 26.6666666666666% = 26.6666666666666vw​

实际渲染时(375px 的屏幕),​​26.6666666666666vw = 26.6666666666% * 375 = 100px​

在 转换成​​vw​​​的方案设置媒体查询超出宽度范围后固定​​body​​宽度,内容居中时,会出现样式过大影响查看的问题。

@media screen and (min-width: 1024px) 
html
max-width: 1024px;

转换 REM 方案

避免不同浏览器的默认字体大小不一样导致大小不一致的问题,我们需要固定好​​root元素 html​​的​​font-size​

恰好我们可以利用​​postcss-px-viewport​​不支持内联样式的转换。来设置​​root元素 html​​的内联​​font-size: 16px;​​来固定​​root​​的字体大小以适配转换成​​rem​​的方案。

​1px = 1 / 375 = 0.2666666666666%​​ 即 ​​100px = 26.6666666666666% = 26.6666666666666rem​

由于我们设置了​​root元素 html​​的内联​​font-size: 16px;​​来固定​​root​​的字体大小。因此,实际渲染时(375px 的屏幕),容器​​26.6666666666666rem = 26.6666666666666 * 16 = 426.6666666666656px​

也就是说,我们需要更改​​viewportWidth​​的大小来和设计图适配。直接推导一下设计图与​​viewportWidth​​的倍数关系 = ​​426.6666666666656 / 100 = 4.26656​​倍。设置​​viewportWidth: 1599.96​​ ​​(375 * 4.26656 = 1599.96)​

同样设置媒体查询超出宽度范围后固定​​body​​宽度,内容居中

@media screen and (min-width: 1024px) 
html
max-width: 1024px;

rem + vw

原则上也需要一个参考的设计图,这边假设为​​375px​​宽设计图。计算方法与​​postcss-px-to-viewport rem​​方案一至。

计算公式 :​​1vw = 3.75px​​ ​​1px = 0.2666666666666667vw​​ ​​100px = 26.6666666666666667vw ​

​1rem = 26.6666666666666667vw = 100px​

但需要注意的是,设置时需要把​​1rem​​设置成​​100px 对应的 vw值​​的值(防止小于浏览器最小字体),编写时根据设计图​​px / 100​​来编写。

当需要​​向上兼容​​自适应的时候,设置好​​@media​​对应不同的​​font-size​​即可。

同样设置媒体查询超出宽度范围后固定​​body​​宽度,内容居中。

html 
font-size: 26.6666666666666667vw;
margin: 0 auto;
body
// 重置字体大小
font-size: 0.14rem;



@media screen and (min-width: 768px)
html
font-size: 9vw;
max-width: 768px;

以上是关于#yyds干货盘点#自适应布局方案的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# 前端歌谣的刷题之路-第一百四十七题-三列布局-浮动

#yyds干货盘点#CSS的clamp()函数实现响应式布局

千万级日志回放引擎设计稿#yyds干货盘点#

如何为 .NET 项目自定义强制代码样式规则 #yyds干货盘点#

#yyds干货盘点#前端图片预加载

#yyds干货盘点# Java 垃圾回收器之G1详解