网页大小自适应方案

目前比较常用的方法有:

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

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

缺点:字体大小需要另外一套自适应方法来调整;当屏幕宽度大于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。

链接:http://www.cnblogs.com/daisykoo/archive/2016/05/24/5522958.html

时间: 2024-10-15 06:20:56

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

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

目前比较常用的方法有: 首先要让页面大小铺满屏幕又不能溢出.只需要在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"/>

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

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

web app 自适应方案总结 关键字 弹性布局之rem

web app 自适应方案总结 关键字 弹性布局之rem 关于rem,主要参考文档 1.腾讯ISUX (http://isux.tencent.com/web-app-rem.html) 2.http://www.w3cplus.com/css3/define-font-size-with-css3-rem 现在移动端 web app 的自适应布局的方案有 5种. 零. Flexbox 使用css3 flexbox 进行布局,对于富媒体和复杂排版的支持非常强大,未普及兼容性非常差,几乎没有在任何

移动端自适应方案

本文来自大搜车博客:移动端自适应方案,主要讲: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并且图

移动端网页 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

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

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

原生js移动端字体自适应方案

自从进入新公司之后,就一直采用800的方案,也就是判断屏幕尺寸,大于800px是一种html字体处理方案,另一种方案是小于800px的html字体处理方案, 代码如下: 1 (function(doc, win) { 2 var docEl = doc.documentElement, 3 resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', 4 recalc = function() { 5 va

WebView加载HTML图片大小自适应与文章自动换行

http://www.brighttj.com/ios/ios-webview-load-html-image-adaptive.html 在很多App中都会使用到webview,尤其是在加载新闻内容等文章形式的数据时.因为图文混编以及不同字体格式的显示,在iOS进行编辑和显示都是一大问题(当然,iOS中也可以用CoreText进行绘制),但是对于web端来说,一个富文本编辑器就可以完美解决这个问题.所以后台很多时候会直接返回HTML代码拿给前端解析,这时,在客户端对HTML代码的处理就显得尤为