REM布局理解以及解决方案
- REM的理解
REM
是一个相对长度单位,它是基于html
根元素的fontSize
来动态计算的,默认情况下html
根元素的fontSize
是16px
,也就是说:1rem=16px
。
如果设置html
元素的fontSize:32px
,那么对应的1rem=32px
。此时,html
根元素的fontSize
是写死的,此时rem
的值也是固定的,不管在什么设备下1rem=32px
。
<style>
div{
font-size: 1rem;
}
</style>
.....
<div>文字</div>
<style>
html{
font-size: 32px;
}
div{
font-size: 1rem;
}
</style>
<div>文字</div>
- 基于对上面
REM
的理解,那么要如何通过REM
实现响应式布局呢?(REM布局原理)
答案是必须让REM
变成一个相对动态的单位,在不同设备下REM
的值是不一样的。既然REM
的大小是基于html
根元素的fontSize
来决定的,就可以让html
根元素的fontSize
来根据设备的尺寸变化动态变化,从而达到REM
动态计算的效果。
-
那么如何动态设置
html
的fontSize
的大小呢?(REM布局实现方案)使用
VW
单位设置html
的fontSize
。VW
是一个视口单位,任何设备屏幕宽度都可用100vw
表示,即把设备屏幕切割成100
份,每一份就是1vw
,那么针对不同尺寸的设备,1vw
表示的单位值也就不一样。用vw
来设置html
的fontSize
就可以实现动态变化了。那么
html
的fontSize
设置多少vw
合适呢?以
iPhone6
设备为例,iPhone6
的设备宽度是375px
,即在iPhone6
设备上100vw=375px
,通过比例关系100vw:375px = x:100px
可以得出100px=26.66667vw
,那么这个26.66667vw
就是要设置给html
的fontSize
值了。这时候可能就有人会有疑问,为什么要用
100px
来化简出26.66667vw
为html
的fontSize
值?这是因为设置
100px
是为了在使用的时候更加方便快捷的进行px
到rem
的数值转换。设置html
的fontSize
为26.66667vw
后,1rem=26.66667vw=100px
,如果设计稿对应的元素是16px
,根据比例化简:1rem:100px = xrem:16px
,可以得出:x=0.16
,即16px=0.16rem
,这样就可以很快捷的进行px
到rem
的转化,所以这里用100px
作为化简值,不一定是必须的,你可以用10px
或者其他,化简到对应的vm
值,方便计算即可。此时,
html
根元素的fontSize
值为26.66667vw
就是一个可以动态变化的值,不同尺寸屏幕下对应的值也就不同,rem
对应的值也就会不同。<style> html{ font-size: 26.66667vw;} div{ font-size: 1rem;} </style> ... <div>文字</div>
Untitled 2.png
Untitled 3.png