移动端网页大小自适应方案

目前比较常用的方法有:

  • 首先要让页面大小铺满屏幕又不能溢出。只需要在html<head>标签内加入viewport(如下),参数分别表示:页面宽度= 屏幕宽度,最大和最小伸缩比都是1,不允许用户拉缩。
 <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
  • 百分比自适应:把长度单位转换为百分比来表示,这样在不同的宽度下,元素的长宽也会随之变化。

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

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

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

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

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


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

在参考淘宝网的自适应方法时,偶然发现页面<html>的fontsize会根据屏幕的宽度自动调整,而且屏幕宽度和所设字体大小的商是一定的。
于是猜想它是用JS获取屏幕宽度后,按照固定比例缩小后作为rem的单位长度实现自适应。
这不就是优点全有滴解决方法吗!?请容许我激动一下下(☆_☆)



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


最终代码:

Zepto(function($){
    var win = window,
        doc = document;

    function setFontSize() {
        var winWidth =  $(window).width();
        // 640宽度以上进行限制
        var size = (winWidth / 640) * 100;
        doc.documentElement.style.fontSize = (size < 100 ? size : 100) + ‘px‘ ;
    };

    //防止在html未加载完毕时执行,保证获取正确的页宽
    setTimeout(function(){
        // 初始化
        setFontSize();

    }, 200);

});

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

时间: 2024-08-12 11:13:03

移动端网页大小自适应方案的相关文章

网页大小自适应方案

目前比较常用的方法有: 首先要让页面大小铺满屏幕又不能溢出.只需要在html<head>标签内加入viewport(如下),参数分别表示:页面宽度= 屏幕宽度,最大和最小伸缩比都是1,不允许用户拉缩. <meta name="viewport" content="width=device-width,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"> 百分比自适应:把长度单位转换为

移动端网页 rem 自适应布局

(function(doc , win){var DocElement = doc.documentElement;var RsizeEvent = 'orientationchange' in window ? 'orientationchange' : 'resize';function ResetSize(){var deviceWidth = DocElement.clientWidth;if(!deviceWidth){return false;}DocElement.style.fo

移动端网页大小固定区域滚动/overflow:auto移动端不显示滚动条

移动端网页,要实现功能,如图片 初步想法,使用dl 给dl设置固定宽高 然后用overflow:auto设置滚动显示完整内容 碰到问题1:滚动条不显示,但是可以正常滚动, 解决办法 <span style="font-family:Microsoft YaHei;font-size:18px;color:#333333;">/*--滚动条--*/ ::-webkit-scrollbar{ width:5px; height:5px; background-color:#ff

使PC端网页宽度自适应手机屏幕大小

有时候我们会纠结PC页面在手机页面上无法正常显示,超出屏幕,有些内容看不到,现在又了下面的代码,可以做到自适应手机屏幕宽度: 在网页的<head>中增加一个meta标签: <meta name=”viewport” content=”width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes” /> 可以让网页的宽度自动适应手机屏幕的宽度. 其中:wid

pc端字体大小自适应

$(window).resize(function ()// 绑定到窗口的这个事件中 {  var whdef = 100/1920;// 表示1920的设计图,使用100PX的默认值  var wH = window.innerHeight;// 当前窗口的高度  var wW = window.innerWidth;// 当前窗口的宽度  var rem = wW * whdef;// 以默认比例值乘以当前窗口宽度,得到该宽度下的相应FONT-SIZE值  $('html').css('fo

如何通过 WebP 自适应方案减少图片资源大小

前言 我们知道,理想的网页应该在 1 秒内打开,而在页面的整体大小中,图片往往是所占比例最大的一部分(大约占到 60% 以上,更多了解请点击),也可以参照如下图所示.优化图片不仅可以加快页面显示,还能降低移动网络的流量费用.原图产生的 PNG.JPEG.GIF 和 SVG 图片一般都有很大的压缩余地.下文将重点介绍一款图片新格式:WebP,从而揭开它神秘的面纱. 解决方案:使用 WebP 优化图像 1.什么是 WebP ? WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式

移动端自适应方案

本文来自大搜车博客:移动端自适应方案,主要讲:1.移动真的需要动态生成viewport吗?2.移动前端如何自适应?作者给出主观的最佳实践:最帅的flex.演示地址.里面讲了一些互联网公司的自适应做法,可以看看. 研究样本 手淘 ml.JS 天猫首页 手机携程 一个月前去了css开发者大会,听到了手淘的自适应方案,想起之前一直就想了解ml.js到底干了什么事.回来仔细研究了一下,抱着好奇心一并看了同样类型的网站的方案,深入学习一下. 研究结论 手淘 获取手机dpr(window.devicePix

(转)移动端自适应方案

研究样本 手淘 ml.js 天猫首页 手机携程 一个月前去了css开发者大会,听到了手淘的自适应方案,想起之前一直就想了解ml.js到底干了什么事.回来仔细研究了一下,抱着好奇心一并看了同样类型的网站的方案,深入学习一下. 研究结论 手淘 获取手机dpr(window.devicePixelRatio),动态生成viewport. 换取手机宽度,分成10份,每一份的宽度即是rem的尺寸. 根据设计稿尺寸(px)通过计算,转换成rem去布局. ps:海外淘宝并没有这样做,而是scale1.0并且图

finereport普通报表的移动端自适应方案

移动端报表呈现,首先要求的是页面随手机屏幕大小自动放缩(自适应),下面给出一个普通报表中的finereport移动端自适应方案,适用于finereport 7.1之前的版本. 首先,了解一下当前我们可以做到的自适应效果: 当前,用FIneReport按某一尺寸做好的报表,如果在屏幕像素较大的手机上打开,我们可以做到自动放大,但是我们当前最多只能放大两倍.所以,在制作移动端报表时,尺寸要有所取舍了. 之前给一个客户做过移动端报表,实现了在iphone4.小米.华为P6.三星S4等手机上自适应的效果