zoukankan      html  css  js  c++  java
  • 网页大小自适应方案

    目前比较常用的方法有:

    • 首先要让页面大小铺满屏幕又不能溢出。只需要在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

  • 相关阅读:
    06.章节页面接口开发
    05.课程主页面三个接口开发
    python高级(六)——用一等函数实现设计模式
    python高级(五)—— python函数(一等对象)
    python高级(四)—— 文本和字节序列(编码问题)
    python高级(三)—— 字典和集合(泛映射类型)
    python高级——目录
    python高级(二)—— python内置序列类型
    python高级(一)—— python数据模型(特殊方法)
    python实现百度地图API获取某地址的经纬度
  • 原文地址:https://www.cnblogs.com/lucybloguniquecom/p/5523341.html
Copyright © 2011-2022 走看看