稀土掘金技术社区 02月08日
响应式设计:打造适配所有屏幕的H5页面大小
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文探讨了如何使用rem单位和响应式设计来解决H5页面在不同屏幕尺寸设备上的适配问题。传统的px单位在不同设备上显示效果不一致,而rem单位基于根元素的字体大小,结合JavaScript动态调整根元素的font-size,可以实现页面的自动缩放和适配。文章通过实例展示了如何计算和设置根元素的字体大小,以及如何监听窗口大小变化并重新计算字体大小,从而实现真正的响应式H5页面。

📱 **px到rem的转变**:px是绝对单位,页面元素尺寸固定,在不同屏幕上显示效果不同。rem是相对单位,基于HTML根元素的字体大小,可以根据屏幕大小进行缩放。

📐 **设计合适的字体大小**:通过JavaScript动态计算并设置根元素的字体大小,使页面元素在不同屏幕上保持一致的显示比例。例如,根据iPhone SE的屏幕尺寸,将根元素的字体大小设置为37.5px。

🔄 **响应式设计**:通过监听窗口大小变化事件,动态调整根元素的字体大小,实现页面的实时适配。无论用户如何调整窗口大小或设备方向,页面都能保持最佳的显示效果。

💻 **代码示例**:文章提供了详细的代码示例,展示了如何使用JavaScript计算和设置根元素的字体大小,以及如何监听窗口大小变化事件并重新计算字体大小。

原创 Danta 2025-02-07 08:31 重庆

点击关注公众号,“技术干货” 及时达!

前言

萝卜青菜,各有所爱;正如我们对于手机的选择一样,每个人都有自己偏好的品牌和型号,而这些设备的屏幕大小也千差万别。面对如此多样化的终端环境,如果一个H5页面仅仅针对某一特定尺寸的手机进行设计,那么当其他用户尝试访问时,可能会遇到布局错乱、元素显示不全等问题,极大地影响了用户体验。

在这样的背景下,如何设计出能够完美适配所有屏幕的H5页面,成为了开发者们亟需解决的重要课题。想象一下,无论用户使用的是小巧玲珑的智能手机,还是大屏平板电脑,您的页面都能自动调整至最佳状态,提供一致且优质的浏览体验——这不仅是技术上的挑战,更是为每一个用户提供个性化服务的关键所在。

在这篇文章中,我们来看看如何实现根据手机屏幕大小调节我们的H5页面。

从px到rem的转变

当我们使用px时

px (Pixels)」 :

案例:

<!DOCTYPE html><html lang="en" ><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title></title>   </head><body> <div>    <div style="height: 100px; width: 100px; background-color: red; display: inline-block;" ></div>     <div style="height: 200px; width: 200px; background-color: green; display: inline-block;"></div>      <div style="height: 200px; width: 200px; background-color: green;display: inline-block;"></div></div></body></html>

效果:

我们来看看使用px在不同手机上的展示成果如何?

「步骤为:」 右键浏览器 -> 点击检查 -> 点击切换仿真设备, 这样就可以,看看在不同的手机所展示的页面效果


最终:

我们可以看到使用px设计页面,缺点就是在不同的屏幕中,你所设计的页面在不同的手机中展示不同,因为px是绝对单位,并不会随着你手机屏幕的大小而调节,那么我们就要使用rem

我们来使用rem

「调整默认字体大小,如   :」

<html lang="en" style="font-size: 75px;">

设计合适的字体大小:

那么我们就可以根据手机屏幕的大小,然后调节默认字体大小,这样就能保证特定的rem所占据的位置,在不同的手机中一样。

案例:

「iphone SE」 是手机页面的模板,我们先拿它开刀,它的屏幕大小是「375*667」,那么 如果10rem为屏幕宽度,默认字体大小就要设计成「375/10 = 37.5px」

<!DOCTYPE html><html lang="en" style="font-size: 37.5px;"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title></title><style>  * {    margin: 0;    padding: 0;  }</style></head><body>    <div style="width: 5rem; height: 2rem;background-color: red;display:inline-block;"></div><div style="width: 5rem; height: 2rem;background-color: green;display:inline-block;"></div></body></html>

结果:我们实现了两个色块的并排

这时候长的帅的读者肯定要问了,你也就是实现了「iPhoneSE」的屏幕呀,那我要是切个别的手机呢?这时候就要来到了「响应式设计」了。

响应式设计:

以上我们实现了iPhoneSE的屏幕中两个色块的并排,那么是在我们知道该屏幕的大小,然后计算出默认的字体大小,从而设计的,想想能否把这些封装成函数,一步到位!

案例:

<!DOCTYPE html><html lang="en" style="font-size: 75px;"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title></title>  <script>    // 阻塞 来动态设置 html 的 font-size    // 立即执行函数    (function() {    // console.log('立即执行函数')    function calc() {      const w = document.documentElement.clientWidth;      console.log(w);      document.documentElement.style.fontSize         = 75*(w / 750) + 'px';        console.log( document.documentElement.style.fontSize );    }     calc()   })()  </script>  <style>  *{    margin:0;    padding:0;  }
</style></head><body> <div> <div style="width: 5rem; height: 2rem;background-color: green;display:inline-block;" ></div><div style="width: 5rem; height: 2rem;background-color: blue;display:inline-block;"></div></div></body></html>

效果:

分析:

我们重点来讲讲新添加的部分,也就是「JS」中的

    「匿名函数声明」

    「内部函数 calc

    「获取视口宽度」

    「动态调整字体大小」

    「输出调试信息」

    「调用 calc 函数」

    「立即执行」

「如此一来,我们的页面就能在不同手机中展示相同的效果了」

那么看完效果图,大家有没有发现有需要改进的地方,每次换个手机尺寸都要重新刷新一次,就很麻烦,所以我们就得想想怎么去优化。

改进一下:

「效果:」

代码:
<!DOCTYPE html><html lang="en" style="font-size: 75px;"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title></title>  <script>    // 阻塞 来动态设置 html 的 font-size    // 立即执行函数    (function() {    // console.log('立即执行函数')    function calc() {      const w = document.documentElement.clientWidth;      console.log(w);      document.documentElement.style.fontSize         = 75*(w / 750) + 'px';        console.log( document.documentElement.style.fontSize );    }     calc()    // 竖屏 横屏  屏幕大小发生变化    window.onresize=function(){        console.log('屏幕大小发生变化')        calc()
} })() </script> <style> *{ margin:0; padding:0; }
</style></head><body> <div> <div style="width: 5rem; height: 2rem;background-color: green;display:inline-block;" ></div><div style="width: 5rem; height: 2rem;background-color: blue;display:inline-block;"></div></div></body></html>
新增功能:响应窗口大小变化:
window.onresize = function() {    console.log('屏幕大小发生变化');    calc();};

    window.onresize事件监听器」

    「输出调试信息」

    「调用calc函数」

总结

面对多样化的终端设备和屏幕尺寸,从传统的使用px(像素)作为固定单位进行页面布局的方法已经不能满足需求。为了解决不同设备上显示效果不一致的问题,我们可以转向了更加灵活的相对单位rem(基于根元素<html>的字体大小),并结合JavaScript动态调整根元素的font-size,以实现真正的响应式设计。

点击关注公众号,“技术干货” 及时达!

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

H5页面适配 rem单位 响应式设计 移动端开发
相关文章