1、简述 JS rem 基本设置
rem:root em
设置 em 后,将以父级的 font-size 为基准,等比例渲染:1em = 父 fs
举例:
1 |
|
rem 的区别为父元素固定为 root 节点,即 html 元素。
所以可以通过动态设置 html 元素的 font-size 来实现等比例缩放。
预期效果:
1、假如设计稿给的标准宽度为 750px,其中有个元素为宽 100px,高 345px
2、若在宽为 750px 的设备下,元素显示效果要为:宽 100px,高 345px
3、若在宽为 375px 的设备下,元素显示效果要为:宽 50px,高 172.5px
4、若在宽为 Xpx 的设备下,元素显示效果要为:宽 100X/750px,高 345X/750px
这样就是等比例缩放的
实现逻辑:
1、假如设计稿给的标准宽度为 750px,其中有个元素为宽 100px,高 345px
2、制定基准:100rem = 750px
,其中的 100 可随意制定,20、50 都行看个人喜好
3、根据 2 定的基准,动态设置 html 元素的
1 |
|
4、根据 2 定的基准可得新基准:1rem = 7.5px
5、根据 4 得的基准,将所有 CSS 的 px 改为 rem
6、假如设计稿内有个元素为宽 100px,高 345px
1 |
|
详细解释:
1、当页面宽度为 750px 时
2、对应的 html 元素的font-size
为750px / 100 = 7.5px
3、width: 13.3rem
计算出来的结果为:13.3 * 7.5 ≈ 100
4、height: 46rem
计算出来的结果为:46 * 7.5 = 345
5、再串一下计算逻辑得出终极写法:
1 |
|
终极写法:假设页面有 Xpx 的,则 CSS 写为calc(Xvw / 7.5)
以上是使用纯手写 CSS 实现的 rem,无任何 JS 代码。
但可以发现需要去记这个写法calc(Xvw / 7.5)
,所以若为 MVVM 框架,可借助postcss-px2rem
等库实现自动px
转rem
,就不用去记写法。
补充说明下:
若使用 100 来制定基准:100rem = 原始设计稿宽度宽度
则可以直接用 vw 单位也能实现等比缩放,可以不设置 html 的 font-size 了
因为原始设计稿宽度宽度 = 100vw
假如设计稿给的标准宽度为 750px,其中有个元素为宽 100px,高 345px,写法如下:
1 |
|