[极致用户体验] 为什么建议2022年不用“等比设计稿“+rem,而用“灵活设计稿“+px

我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,发送加微信,交个朋友),转发本文前需获得作者HullQin授权。我独立开发了《联机桌游合集》,是个网页,可以很方便的跟朋友联机玩斗地主、五子棋等游戏,不收费没广告。还开发了《Dice Crush》参加Game Jam 2022。喜欢可以关注我 HullQin 噢~我有空了会分享做游戏的相关技术。

背景

最近写了3篇关于微信大字号的文章:

  • 《在微信大字号模式下,网页样式乱了怎么办?》提供了一种解决方案,在用户调整微信字体大小后,可以保证网页字体大小不变,解决了样式错乱的问题。
  • 《让你的网页,适配微信大字号模式!体验超好,快来收藏》介绍了几种方案,助你的网页适配微信的大字号。
  • 《微信设置大字号后,iOS加载网页时闪动怎么办?》介绍了方案,解决iOS大字号模式下首屏闪动的问题。

说到大字号,我就想到了经典的面试问题:请你谈谈 rempx 的区别

重新认识em/rem和px

众所周知,em、rem是相对单位,px是绝对单位。

  • px: 定义的「尺寸、距离」是固定的,不受父元素的字号影响。
  • em: 在font-size中使用是相对于父元素的字体大小,在其他属性中使用是相对于自身的字体大小。
  • rem: 通过相对根元素font-size的倍数来定义「尺寸、距离」。

为什么有rem

首先你要想清楚一个问题:为什么rem会出现?

十年前至五年前,在不同的手机上,你需要设置不同的字号,才能让用户看起来是正常大小。比如,电脑上16px就是正常字号。但是在手机上,分辨率高一些,需要设置24px的字号,用户才能看到正常大小。而有的手机分辨率更高,需要用32px的字号才是正常大小。如果要满足不同设备的用户,就不得不动态计算DPI,设置不同的px值。

而使用rem可以很方便的修改所有元素尺寸,每当需要修改时,只需要修改html这个根元素的font-size即可。用了rem的元素会跟随着发生变化。

rem目的是适配各种宽度的屏幕(其实微信小程序rpx就是参考rem来设计的,但是rpx则更直接的解决了问题)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在使用 `postcss-pxtorem` 插件时,可以设置 `rootValue` 参数来指定基准值,也就是 1rem 对应的像素值。默认情况下,`rootValue` 为 `16`,即 1rem 对应 16px。 如果你需要适配多个设计稿的宽度,可以根据实际情况设置不同的 `rootValue` 值。具体做法如下: 1. 安装 `postcss-pxtorem` 插件: ``` npm install postcss-pxtorem --save-dev ``` 2. 在 Nuxt2 项目的根目录中新建 `postcss.config.js` 文件,并配置 `postcss-pxtorem` 插件: ```js module.exports = { plugins: { 'postcss-pxtorem': { rootValue: 16, // 默认值为 16,即 1rem 对应 16px propList: ['*'], }, }, }; ``` 其中,`propList` 参数用于指定哪些 CSS 属性需要转换成 rem 单位,默认为 `['font-size']`,即只有 `font-size` 属性会被转换。我们可以将其设置为 `['*']`,表示将所有 CSS 属性都转换成 rem 单位。 3. 在需要适配的页面中,根据设计稿的宽度设置不同的 `rootValue` 值。例如,如果有两个设计稿分别为 750px 和 1080px,可以在对应的页面中设置 `rootValue` 值: ```html <!-- 750px 设计稿 --> <style scoped> html { font-size: calc(100vw / 7.5); /* 1vw = 1/100 of viewport width */ } </style> <!-- 1080px 设计稿 --> <style scoped> html { font-size: calc(100vw / 10.8); /* 1vw = 1/100 of viewport width */ } </style> ``` 这样,根据不同的设计稿宽度,1rem 单位就会对应不同的像素值。例如,在 750px 设计稿中,1rem 单位对应的像素值为 50px(因为 `rootValue` 等于 `750 / 15 = 50`),在 1080px 设计稿中,1rem 单位对应的像素值为 80px(因为 `rootValue` 等于 `1080 / 13.5 = 80`)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hull Qin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值