zoukankan      html  css  js  c++  java
  • 移动端的自适应布局

    最近做移动布局比较多,要自适应各种手机。

    比较理想的效果就是主背景图设在body上。然后body里面的元素用百分比布局,这样,整个页面的缩放就像一张图的缩放。像这样:

            html{ height: 100%; }
            body{
                min-height:100%;
                background: url("./images/XXX.jpg") no-repeat;
                overflow: hidden;
                background-size: 100% 100%;
            }

     由于不同手机屏幕高宽比和设计图的比例不一样,自适应时相比设计图会有一些变形,但是现在的手机端屏幕差别不是很大,设计师给的设计稿比例一般为640:1136(iPhone5的尺寸,比较主流),这样的方法在各手机端看起来还是比较过得去的。

    但是,百分比要计算,top、left、margin、都要百分比。子元素多一些就会比较麻烦。一直想怎么能更快捷一些,前几天看到一篇关于移动自适应的博客,可以学习一下。地址:http://www.cnblogs.com/PeunZhang/p/4517864.html

    一个插件,关于自适应问题的解决。原理是利用css3里scale缩放主要提供了三种:auto ,cover ,contain,三种适应形式。这三种都是根据屏幕大小不同调节宽高缩放,尽量让页面减少变形 。

    看了一下实现的Js,比较简单。顿时觉得自己还是思考少了,为什么之前总在抱怨自适应布局的繁琐,却没能自己也写出这样一套东西呢,其实并不难的。于是迫不及待拿出自己以前的项目用它去实现了一把。因为做的都是微信端的页面,几乎都是全屏(cover)展示,但是橡树的插件cover的缩放方式会让背景图不能总是完全呈现出来,这样对于有顶部logo的就不行。于是,小小的修改了一下他的。改写成一个以后更适合我的(对于我平时项目比较适合的。)就是始终让页面的高宽缩放到手机屏的大小,跟手机屏“贴合在一起”。

    js如下:

    function pageResponse(opt) {
        //getElementsByClassName
        function getElementsByClassName(cl) {
            if(document.getElementsByClassName){
                return  document.getElementsByClassName(cl)
            }
            else{    
                var ele = [],
                    els =  document.getElementsByTagName("*"),
                    i = els.length;
                cl = cl.replace(/-/g, "\-");
                var pa = new RegExp("(^|\s)" + cl + "(\s|$)");
                while(--i >= 0){
                    if (pa.test(els[i].className)){
                        ele.push(els[i]);
                    }
                }
                return ele;
            }
        }
        //缩放函数
        function template(obj, sw, sh){
            var s = obj.style; 
                s.width = pw + "px";
                s.height = ph + "px";
                s.webkitTransformOrigin = "left top 0";
                s.transformOrigin = "left top 0";
                s.webkitTransform = "scale(" + sw +','+sh+ ")";
                s.transform = "scale(" + sw +','+sh + ")";
            }
            //确定缩放比例
            var dw = document.documentElement.clientWidth,
                dh = document.documentElement.clientHeight,
                pw = opt.width || 320,
                ph = opt.height || 568,
                pd = getElementsByClassName(opt.class),
                sww=dw/pw,
                shh=dh/ph;
                console.log(sww);
            // 遍历后取得对象进行缩放
            for(i = 0;i < pd.length;i++){
                template(pd[i], sww, shh);
            }
    }

    用的时候这样:

    <body>
        <div class="page">
        <img src="imgs/XXX.jpg" alt="" width="640" height="1136">
        <p class="text">看你跟不跟着我自适应!!!</p>
        <div class="button"><img src="imgs/button.png" alt=""></div>
        </div>
        <script type="text/javascript" src="js/pageCover.js"></script>
        <script type="text/javascript">
    window.onload = window.onresize = function(){
        var page = new pageResponse({
            class : 'page',     //模块的类名
            width : '640',      //输入页面的宽度,默认宽度为320px
            height : '1136'      //输入页面的高度,默认高度为504px
        });
    }
    </script>
    </body>

    但是这样的问题就是

    <!-- 注意的问题:原理是只是对最外层page的缩放(包括其子元素)
                1、body(最外层page)的宽高基准是相对于page设置的大小,不是设备的大小
                2、字的大小(font-size)在body中设置,可以继承到子元素。防止字体因缩放过大或过小。
                3、page的高宽等于UI给的视觉图。否则与内部切片的缩放比例不协调。
                缺点:过分缩放变形,适应大多移动端还是可以的。
                优点,整个布局在单界面中全部显示。
     -->

    这样以后就不用去辛苦的计算百分比了。可以根据设计图直接用px去布局,然后做一套页面,各个设备试用。如果这样还不能满足的话,可以与mediaQuery结合使用。

       

  • 相关阅读:
    从零实现一个http服务器
    服务器端编程心得(七)——开源一款即时通讯软件的源码
    服务器端编程心得(六)—— 关于网络编程的一些实用技巧和细节
    服务器编程心得(五)—— 如何编写高性能日志
    以芯片直读方式得到的Android全盘镜像解析——DOS分区
    一款开源数据恢复工具——scalpel
    以芯片直读方式得到的全盘镜像解析及ext4日志区域解析——GPT分区
    Linux程序设计之shell程序设计
    算法——蛮力法之最近对问题和凸包问题
    算法——蛮力法之顺序查找和蛮力字符串匹配
  • 原文地址:https://www.cnblogs.com/hellolm/p/4751384.html
Copyright © 2011-2022 走看看