移动端网页大小自适应的实现方法
来源: 阅读:871 次 日期:2016-06-14 16:15:30
温馨提示: 小编为您整理了“移动端网页大小自适应的实现方法”,方便广大网友查阅!

终于完成了手头的项目,失踪人口又回归啦!在做项目的过程中,遇到很多值得思考的点,速速道来。 第一个遇到的就是网页大小自适应的问题。

目前比较常用的方法有:

• 首先要让页面大小铺满屏幕又不能溢出。只需要在html标签内加入viewport(如下),参数分别表示:页面宽度= 屏幕宽度,最大和最小伸缩比都是1,不允许用户拉缩。

XML/HTML Code

1.

• 百分比自适应:把长度单位转换为百分比来表示,这样在不同的宽度下,元素的长宽也会随之变化。

优点:宽度之间无缝衔接, 操作起来也相对比较方便。

缺点:字体大小需要另外一套自适应方法来调整;当屏幕宽度大于700px后,继续按照百分比元素会偏大,这个时候调整起来会比较麻烦。

•rem、em自适应 :用媒体查询的方法,确定在不同屏幕宽度下,改变或的fontsize。再用rem, em替代 px作为单位实现自适应。

优点:可以根据不同屏幕宽度来设置,可以完美解决上面说的屏幕偏大时的比例问题。字体的大小也不存在问题。

缺点:根据宽度区间来设置,无法实现无缝变换。

--------------------------------------------------------------------------------

这些兼容方法各有优缺点,都不算完美,怎样才能把优点结合在一起,同时避免缺点呢?

在参考淘宝网的自适应方法时,偶然发现页面的fontsize会根据屏幕的宽度自动调整,而且屏幕宽度和所设字体大小的商是一定的。

于是猜想它是用JS获取屏幕宽度后,按照固定比例缩小后作为rem的单位长度实现自适应。

这不就是优点全有滴解决方法吗!?请容许我激动一下下(☆_☆)

--------------------------------------------------------------------------------

JS代码写起来非常简单,而且完美解决了用rem来设置无法达到无缝衔接的问题。

但移动端测试后问题就出现了,移动端safari在html加载完毕之前将JS以迅雷不及掩耳盗铃之势执行了,在页面没有按照viewport设置好宽度前,JS就读取了错误的宽度,导致元素变成原来的两倍大0^0, 需要用setTimeout()解决问题。

--------------------------------------------------------------------------------

最终代码

JavaScript Code

1.Zepto(function($){

2. var win = window,

3. doc = document;

4.

5. function setFontSize() {

6. var winWidth = $(window).width();

7. // 640宽度以上进行限制

8. var size = (winWidth / 640) * 100;

9. doc.documentElement.style.fontSize = (size < 100 ? size : 100) + 'px' ;

10. };

11.

12. //防止在html未加载完毕时执行,保证获取正确的页宽

13. setTimeout(function(){

14. // 初始化

15. setFontSize();

16.

17. }, 200);

18.

19.});

最后补充用rem做自适应过程中发现的一个坑--当html设置较大的fontsize时,块元素内的行内元素margin、padding会出现额外的值,解决办法是把外面包的块元素fontsize设置为0。

以上这篇移动端网页大小自适应的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多信息请查看 网页制作
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们| 联系我们| 人才招聘| 网站声明| 网站帮助| 非正式的简要咨询| 简要咨询须知| 加入群交流| 手机站点| 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00) 版权所有:
云南网警报警专用图标
Baidu
map