了解真实的『REM』手机屏幕适配,独家发布

这篇具有很好参考价值的文章主要介绍了了解真实的『REM』手机屏幕适配,独家发布。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

htmlFontSizehtml 元素的字体大小。

首先来看方案1中,在屏宽为640px情况下的设置:

@media screen and (min-width: 640px) {html{font-size:100px;}}

可以很明显的表现出这一点 1rem = 1 * 100px ,同我们最初的设定。那么我们要得到其它屏幕大小的 htmlFontSize 值要怎么办。很简单如方案3,因为我们的采用等比缩放的方式适配,所以计算目标屏幕宽度和设计稿的宽度的比即可:

window.innerWidth / designWidth * rem2px + ‘px’

由于浏览器默认字体大小为 16px,所以当我们使用百分比作为根节点 html 的字体大小时,即html元素的font-size值设置为一个百分比值,rem 的计算方式就会改为:

defaultFontSize = 16px

1rem = 1 * htmlFontSize * defaultFontSize

如方案2中,在屏宽为640px情况下的设置:

@media screen and (min-width: 640px) {html{font-size:625%;}}

应用上面的公式:

1rem = 1 * 625% * 16px

其中:625% * 16 = 6.25 * 16 = 100

所以:1rem = 1 * 100px

同样的可以得到所有屏幕大小下,htmlfont-size 值的计算公式,即为方案4:

window.innerWidth / designWidth * rem2px / 16 * 100 + ‘%’

通过方案3和方案4的公式,就可以很方便的生成方案1和方案2中的css。

这里只给出了方案3和方案4对应验证页面(方案1和方案2是它们的变形): scheme3.html, scheme4.html

如下面两张图,是在屏宽为360px下的效果,通过计算目标为:1rem = 56.25px。方案3设置值为:56.25px,方案4设置值为:351.5625%

| 方案3 | 方案4 |

| — | — |

| | |

到目前为止貌似很完美的解决了问题,实际情况当然是出现了意外。在有些 Android 手机上,浏览器或 webview 的默认字体是随着系统设置的字体改变的。这样就会导致默认字体大于或小于 16px

修改默认字体大小后,我们再看方案3和方案4。

同样在屏宽为360px下,我们调大系统字体大小,如下面的效果

设置前 html 元素的字体大小的计算值18px ,设置后的计算值65px ,由于屏幕宽度没有改变,我们的目标值,即我们在 html 元素上设置的 font-size 值也没有变化任然为 56.25px,而最终计算值出现了偏差。

| 方案3 | 方案4 |

| — | — |

| | |

分析偏差前,先来看在360px屏宽下,方案3和方案4的计算过程:

方案3:

document.documentElement.style.fontSize = 56.25px

htmlFontSize = 56.25px

1rem = 1 * htmlFontSize = 56.25px

实际为:

1rem = 64.6875px

方案4:

document.documentElement.style.fontSize = 351.5625%

htmlFontSize = 351.5625%

defaultFontSize = 18px

1rem = 1 * htmlFontSize * defaultFontSize = 351.5625% * 18px = 63.28125px

351.5625% * 18 = 63.28125

实际为:

1rem = 64.6875px

貌似方案4的计算结果很接近实际效果,而方案3偏差很大。再来比较方案3和方案4的计算公式:

// 方案3

document.documentElement.style.fontSize =

window.innerWidth / designWidth * rem2px + ‘px’;

// 方案4

document.documentElement.style.fontSize =

window.innerWidth / designWidth * rem2px / 16 * 100 + ‘%’;

方案4较于方案3其实多除了一个16,可以推测浏览器在计算 rem 的具体值时,如果 html 设置的 font-sizepx 值时会先除以 16 ,然后再乘以 htmlFontSize

1rem = 1 * (56.25px / 16) * 18

1 * (56.25 / 16) * 18 = 63.28125

方案4存在问题,是因为系统的默认字体改为了 18px ,但是我们在计算百分比是时候,还是以 16px 为基准值进行计算,所以出现偏差(计算值和实际值之间还有一点偏差这个在后面会提到)。

而在方案3中,我们其实是不考虑浏览器默认字体大小的,但在实际使用的过程中,浏览器还是除了 16 ,而此时默认字体大小为 18px。得出如下在 htmlfontSize 设置为 px 的情况下 rem 的计算公式为:

1rem = 1 * (htmlFontSize / 16) * defaultFontSize

在系统设置的字体大小发生改变时,defaultFontSize 会跟着改变,而 16 不会变化。所以方案3虽然表面上不考虑默认字体大小的变化,只关注屏幕与设计稿之间的宽度比,但在实际计算中还是使用到了默认字体大小,而且还有一个不变的 16 在作祟,导致方案3失败。

所谓的「root element」其实不是想象的那样,一个是16,一个是18,到底取的是那个 root element 的字体大小。

ok,rem 的计算的时候,px 的方式会有一个16不随系统字体大小改变,所以我们采用百分比的方案,绕开这个问题。

采用百分比的方案4因为在计算时写死了默认字体大小 16px。所以它的偏差在于没能动态的获取默认字体大小。更新如下:

方案4.1

var designWidth = 640, rem2px = 100;

var h = document.getElementsByTagName(‘html’)[0];

var htmlFontSize = parseFloat(window.getComputedStyle(h, null)

.getPropertyValue(‘font-size’));

document.documentElement.style.fontSize =

window.innerWidth / designWidth * rem2px / htmlFontSize * 100 + ‘%’;

效果如下图:

16px 的图中,设置后的 htmlfont-size1rem 的实际值有偏差,同时 6.4rem 的计算值也有偏差。通过查看代码发现htmlfont-size使用的是: getPropertyValue('font-size')1rem 使用的是 getPropertyValue('width'),偏差出在计算 font-size 的时候浏览器进行了四舍五入。rem 定义中的另一个元素「font size」也不能按字面意思使用,宣告失守。

18px 中的偏差,以及上文中方案4在 18px 实际值和计算值出现的偏差都是同样的问题。所以基准值还需要修改。

| 16px | 18px |

| — | — |

| | |

在更新一版,方案4.2:

var designWidth = 640, rem2px = 100;

var d = window.document.createElement(‘div’);

d.style.width = ‘1rem’;

d.style.display = “none”;

var head = window.document.getElementsByTagName(‘head’)[0];

head.appendChild(d);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
了解真实的『REM』手机屏幕适配,独家发布,2024年程序员学习,智能手机
了解真实的『REM』手机屏幕适配,独家发布,2024年程序员学习,智能手机
了解真实的『REM』手机屏幕适配,独家发布,2024年程序员学习,智能手机
了解真实的『REM』手机屏幕适配,独家发布,2024年程序员学习,智能手机
了解真实的『REM』手机屏幕适配,独家发布,2024年程序员学习,智能手机
了解真实的『REM』手机屏幕适配,独家发布,2024年程序员学习,智能手机

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
了解真实的『REM』手机屏幕适配,独家发布,2024年程序员学习,智能手机

最后

如果你已经下定决心要转行做编程行业,在最开始的时候就要对自己的学习有一个基本的规划,还要对这个行业的技术需求有一个基本的了解。有一个已就业为目的的学习目标,然后为之努力,坚持到底。如果你有幸看到这篇文章,希望对你有所帮助,祝你转行成功。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-GAjvdt5X-1711816192788)]

最后

如果你已经下定决心要转行做编程行业,在最开始的时候就要对自己的学习有一个基本的规划,还要对这个行业的技术需求有一个基本的了解。有一个已就业为目的的学习目标,然后为之努力,坚持到底。如果你有幸看到这篇文章,希望对你有所帮助,祝你转行成功。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

了解真实的『REM』手机屏幕适配,独家发布,2024年程序员学习,智能手机文章来源地址https://www.toymoban.com/news/detail-853205.html

到了这里,关于了解真实的『REM』手机屏幕适配,独家发布的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用rem + sass + 媒体查询 进行横竖屏适配移动端项目

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 常见的媒体查询,就是1280、1440、1600、1720、1920。规律也很简单,800 + 160*n。最小就是800px(最小的大部分是投影仪使用),不考虑特别设计的话屏幕的话,最大是2560px。下面使用不同分辨率变背景颜色的

    2024年02月10日
    浏览(39)
  • Vue中使px自动转rem配置 (h5适配问题)

    以下方法为px自动转换rem,顾名思义,配置完成后,不用再关心rem换算等等,只需按照设计稿的px值写入即可,当你保存后 PostCSS 插件会自动将px转换成所配置的rem值,并且你在浏览控制台观测界面时你会发现你在代码里写的是px单位,在控制台被转换成了rem单位。 postcss 一种

    2024年01月22日
    浏览(73)
  • 移动端Vant-Ui库以及适配Rem插件

    Vant下载以及使用 看官方文档下载一定要看清楚你要下载的是那个版本的项目 下载完成之后接下就是怎么去使用它 官方文档分三种引入使用 (1).是按需引入需要那个组件引入那个可以减少项目的大小也方便开发 上面分别也有注释首先引入VUE因为我们需要在上面挂在我们所按需

    2024年02月03日
    浏览(52)
  • Echarts基础-安装语法高亮插件&less-rem转换动态适配大小

    Echarts是一个功能强大的JavaScript开源可视化库,专门用于创建各种图表和数据可视化。 以下是关于Echarts的一些基础介绍: 丰富的图表类型:Echarts提供了包括折线图、柱状图、散点图、饼图、雷达图、地图等多种常见的图表类型,满足不同的数据展示需求。 兼容性良好:它可

    2024年04月10日
    浏览(47)
  • 移动端适配 rem、postcss-pxtorem、postcss-px-to-viewport、vw vh

    移动端设计稿一般是750px,如果没有用taro或者uniapp这类的框架,就需要自己来进行css的适配。 一、Rem rem是相对于根元素html字体大小的一个css单位,默认情况下html的font-size=16px,所以1rem = 16px。可以动态设置html的字体大小,比如设置html的font-size=100px,那么1rem=100px。重点就是

    2024年02月04日
    浏览(45)
  • Android适配平板屏幕尺寸

    一、划分手机和平板 人为判断方法:     大于6英寸的就是平板。小于6英寸的都是手机     平板尺寸: 6英寸、7英寸、10英寸、14英寸… Android系统支持多配置资源文件,我们可以追加新的资源目录到你的Android项目中。命名规范: 资源名字-限制符 layout/drawble文件夹     说

    2024年04月14日
    浏览(52)
  • Android之屏幕适配方案

    在说明适配方案之前,我们需要对如下几个概念有所了解:屏幕尺寸,屏幕分辨率,屏幕像素密度。 屏幕尺寸 屏幕尺寸指屏幕的对角线的物理长度,单位是英寸,1英寸=2.54厘米。 比如常见的屏幕尺寸:5.0、5.99、6.0等等 屏幕分辨率 屏幕分辨率是指手机在横向、纵向上的像素

    2024年02月03日
    浏览(48)
  • iPhone 14系列屏幕适配

    1、iPhone 14         显示屏: 6.1“ 超级视网膜 XDR OLED 屏幕分辨率(点): 390 x 844 原始分辨率(像素): 1170 x 2532 (460 ppi) ​ 状态栏高 47 ,安全区域尺寸: 安全区域(纵向): 上: 47, 下: 34, 左: 0, 右: 0 安全区域(横向): 顶部: 0, 底部: 21, 左: 47,

    2024年02月04日
    浏览(35)
  • Flutter:屏幕适配

    flutter_screenutil 是一个用于在Flutter应用程序中进行屏幕适配的工具包。它旨在帮助开发者在不同屏幕尺寸和密度的设备上创建响应式的UI布局。 `flutter_screenutil``提供了一些用于处理尺寸和间距的方法,使得开发者可以根据设备的屏幕尺寸和密度来动态调整UI元素的大小和位置。

    2024年02月13日
    浏览(43)
  • 【微信小程序】屏幕适配

    在网页中一般是使用 rem 单位,它能够根据html的字号大小自动改变尺寸,开发者可以动态的计算屏幕尺寸,然后根据屏幕大小的不同设置html的字号 小程序解决适配使用 rpx 单位,它能够根据屏幕大小自动进行转换。 每一个机型的宽度和高度都不一样,只需要写rpx自动会折算

    2024年03月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包