移动端h5适配不同高度的机型,巨坑!!!

在设计一个包含动态按钮的活动页面时,遇到了手机屏幕长度不同导致的内容显示问题。介绍了两种解决方法:动态调整组件高度和为不同尺寸设备编写独立页面,但指出这些方法效率不高。最终建议使用5.7寸手机作为基准进行适配,以确保页面在各种设备上的良好显示。

最近给公司做一个活动页面,遇到了一个没有遇到过的问题。
我写了一个页面,在页面的最下面,有一个动态按钮,点击可以向下滑动,如下图
在这里插入图片描述
这些东西要在一个页面上全部显示出来,然后出问题了;
我的手机与老总的手机宽度一样,但是我的较长一点,然后就出现了下面的问题;
在这里插入图片描述
长度较短的手机不显示所有的内容,无论你怎么设置都没有办法;
原因是,宽度一样的话,图片的长度都是一样的,我们适配的都是手机宽度,很少有适配手机长度的;
如果想宽度一样,长度不一样的机型显示所有的内容,那么你两个解决方案;
第一个,jq动态获取手机可视高度,然后去压缩页面内组件的高度;
第二个,判断登录来源的机型,然后给每一个尺寸机型写一个单独的页面;

当然这两个办法都太麻烦,效率不高;

最好的解决办法就是:
在这里插入图片描述
一般手机屏幕尺寸最小的也是5.7的了,所以在编写页面的时候,需要一部5.7的手机适配,只要这种尺寸的手机没有问题,其他款式的手机,基本都没有问题;

ps:另外附属一句话,在屏幕下面留白的话,可能会影响美观,这个时候就需要公司的ui去设计了

移动端机型适配的方法和解决方案有多种,以下为你详细介绍: - **使用rem作为单位**:rem是根据根元素变化而变化的单位。可以通过动态设置根元素的字体大小来实现适配。例如,在main.js中动态设置rem值的代码如下: ```javascript (function (doc, win) { var docEl = doc.documentElement, resizeEvt = &#39;orientationchange&#39; in window ? &#39;orientationchange&#39; : &#39;resize&#39;, recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; docEl.style.fontSize = 10 * (clientWidth / 320) + &#39;px&#39;; }; if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener(&#39;DOMContentLoaded&#39;, recalc, false); recalc(); })(document, window); ``` 同时,在CSS中设置根元素字体大小,如`html{ font-size:16px; }`,这样1rem就等于16px [^2]。 - **利用rem配合less、sass按照设计图设置比例**:以640设计图为例,可通过以下代码实现机型适配: ```javascript (function () { document.addEventListener(&#39;DOMContentLoaded&#39;, function () { var deviceWidth = document.documentElement.clientWidth; if(deviceWidth > 640) deviceWidth = 640; document.documentElement.style.fontSize = deviceWidth / 6.4 + &#39;px&#39;; }, false); window.onresize = function(){ var deviceWidth = document.documentElement.clientWidth; if(deviceWidth > 640) deviceWidth = 640; document.documentElement.style.fontSize = deviceWidth / 6.4 + &#39;px&#39;; }; })(); ``` 此代码会根据设备宽度动态设置根元素的字体大小,从而实现rem单位的适配 [^1]。 - **根据特定设计机型设置根元素字体大小**:若以iphone5为设计机型,可使用如下代码: ```javascript document.documentElement.style.fontSize = document.documentElement.clientWidth / 3.2 + &#39;px&#39;; window.onresize = function() { document.documentElement.style.fontSize = document.documentElement.clientWidth / 3.2 + &#39;px&#39;; }; ``` 若以iphone6为设计机型,将3.2更改为3.75即可 [^5]。 - **利用@media screen媒体查询**:设置头部`<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">`,然后利用`@media`特性,根据条件使用不同样式。例如: ```css @media screen and (max-width: 600px) { /*当屏幕尺寸小于600px时,应用下面的CSS样式*/ .class { background: #ccc; } } ``` 这样可以根据不同的屏幕宽度应用不同的样式 [^2]。 - **使用amfe-flexible包**:阿里巴巴淘宝团队出品的amfe-flexible是一个用于解决移动端不同机型适配的包。其源码中通过不同屏幕的像素比来设置scale值,保证当前窗口的device-width始终等于物理像素设备的宽度,从而达到不同机型适配效果 [^3]。 - **针对特定设备设置viewport**:通过检测设备的`navigator.userAgent`,为特定设备设置viewport,代码如下: ```html <script> /(iPhone|iPad|iPhone OS|Phone|iPod|iOS)/i.test(navigator.userAgent)&&(head=document.getElementsByTagName(&#39;head&#39;),viewport=document.createElement(&#39;meta&#39;),viewport.name=&#39;viewport&#39;,viewport.content=&#39;target-densitydpi=device-dpi, width=480px, user-scalable=no&#39;,head.length>0&&head[head.length-1].appendChild(viewport)); </script> ``` 此代码会为iPhone、iPad等设备设置特定的viewport [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值