zoukankan      html  css  js  c++  java
  • webApp 页面适配布局

    webApp 页面布局

    1. 流式布局

    概念:
    流式布局是页面元素宽度按照屏幕分辨率进行适配调整,但是整体布局不变。

    设计方法:
    布局都是通过百分比来定义宽度,但是高度大都是用px固定的。

    弊端:

    • 虽然可以让各种屏幕适配,但是显示的效果极其不好。(有些手机页面的宽度会被拉伸,但是高度不变,很不协调。)
    • 大量百分比布局,也会出现许多兼容问题。

    2. 静态布局

    概念:
    静态布局是不管浏览器尺寸是多少,网页上所有元素的尺寸一律使用px作为单位,。这种设计常用于pc端

    设计方法:
    结合min-width,如果小于这个宽度就会出现滚动条,如果大于这个宽度,则会出现留白

    弊端:

    • 大屏幕手机两侧留白太多,页面会显得比较小,操作按钮也比较小
    • 这种设计只适用于PC端,移动端有严重的不兼容性

    3. 媒体查询@media

    概念:
    媒体查询是css3的新属性,为不同屏幕分辨率定义一个布局样式,即元素的位置和大小都是会改变的。

    设计方法:
    根据不同的分辨率来设计所需要的元素的位置和大小

    //适配iphone 5
    @media screen and (max- 320px) {
        html{font-size: 14px;}
        .name{
    	    font-size: 14px;
    	    margin-top: 28px;
        }
    }
    //适配宽度在321px - 413px 之间
    @media screen and (min- 321px) and (max- 413px) {
        html{font-size: 16px;}
        .name{
    	    font-size: 16px;
    	    margin-top: 32px;
        }
    }
    //适配宽度在414px - 639px 之间
    @media screen and (min- 414px) and (max- 639px) {
        html{font-size: 17px;}
        .name{
    	    font-size: 17px;
    	    margin-top: 34px;
        }
    }
    //适配宽度大于640px
    @media screen and (min- 640px) {
        html{font-size: 18px;}
        .name{
    	    font-size: 18px;
    	    margin-top: 36px;
        }
    }
    

    弊端:

    • 要匹配足够多的屏幕大小,工作大,维护性难,需要足够大的耐心
    • 媒体查询也是有限的,可以枚举出来的只能适应主流的宽高

    4. 设置viewport进行缩放

    概念:
    通过<meta>来提供一些页面的元信息,位于文档的头部<head>标签内来进行缩放

    设计方法:

    <meta name="viewport" content="width=device-width,minimun-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    

    通过设置最大缩放比maximum-sacle和最小缩放比minimum-scale来兼容屏幕。

    弊端:

    • 全局缩放,可能会造成出错。一般不单独使用,可以结合媒体查询或是rem单位等来使用。

    5. rem等比例适配屏幕

    概念:
    remcss3新增的一个相对长度单位,相对于根元素(即html元素font-size计算值的倍数。通过设置html的字体大小,来控制rem的大小。

    设计方法:
    1)@media媒体查询在css中定义好根元素的font-size的大小

    通过@media媒体查询来更改html的字体大小,实现兼容不同的设备。

    //适配iphone 5
    @media screen and (max- 320px) {
        html{font-size: 14px;}  //1rem = 14px
    }
    //适配宽度在321px - 413px 之间
    @media screen and (min- 321px) and (max- 413px) {
        html{font-size: 16px;}   //1rem = 16px
    }
    //适配宽度在414px - 639px 之间
    @media screen and (min- 414px) and (max- 639px) {
        html{font-size: 17px;}   //1rem = 17px
    }
    //适配宽度大于640px
    @media screen and (min- 640px) {
        html{font-size: 18px;}   //1rem = 18px
    }
    

    设计好根元素之后,页面中所有的元素的位置和大小单位都采用rem来写。

    2)js动态计算font-size大小

    @media来设置根元素的font-size不能使所有的设备全适配,用js来计算font-size可以实现全适配。在<script>标签中加上如下代码,这个标签最好放在<head>头部里。

    	(function(){
    		document.addEventListener('DOMContentLoaded',function(){
    			var html = document.documentElement;
    			var deviceWidth = html.clientWidth;
    			html.style.fontSize = deviceWidth/750*100 + "px";
    		},false);	
    	})();	
    

    其中750 数字是设计稿的尺寸,这里采用的是iPhone 6 的设计稿尺寸750px,因为计算出来的font-size字体太小,且有些浏览器不兼容太小的字号,所以font-size要放大100倍。

    页面元素设置宽高

    css中的尺寸 = 设计稿尺寸  /  100
    

    上述的js代码也可以进行简化:

    document.documentElement.style.fontSize = document.documentElement.clientWidth / 750 *100 + "px";
    

    效果和原理都是一样的。同样放在一个<script>标签里,标签放在<head>里面。

    6. 引用flexible.js

    概念:
    flexible.js是阿里团队开源的一个库,可以轻松兼容各种不同的移动端设备自适应的问题

    设计方法:
    1)结合viewport使用
    在页面的<head>中引入viewport

    <meta name="viewport" content="width=device-width,minimun-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    

    2)引入flexible_css.js,flexible.js
    在页面的<head>中引入文件

    // 加载阿里CDN的文件
    <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>
    

    也可以把这两个文件下载到自己的项目中,然后引入,效果是一样的。

    3)页面单位采用rem格式
    可以通过一些插件快速的将px->rem,比如sublime text 3 的 CSSREM 插件可以完成自动转换。

    除了使用编辑器的插件外,还可以使用css 预处理器,比如scss,里面的函数、混合宏这些功能来实现。

    还有一款npm工具px2rem,或是使用PostCSS。这两者适合在大项目中,因为可以配合gulp 或是 webpack,不适合单页面。

    4)页面效果
    配置好flexible.js后,可以在页面上看到它给<html>元素添加了data-dpr属性和font-size属性,并且两者会根据不同的手机分辨率来动态的改变它们的值。

    弊端:

    • 不适配平板
    • 不兼容其他的UI框架组件,比如:vux, weui, mini ui等。因为市面上的一些UI 组件都是自身已经做过适配的,再结合flexible的话,会导致整体组件被缩小,反而处理起来更加麻烦

    7. vw, vh, vmax, vmin属性

    概念:
    vw,vhcss3新增的单位属性,他们的计算方式是相对于视口的宽度和高度。视口被均分为100单位
    vmax相对于视口的宽度或高度中较大的那个。其中最大的那个被均分为100单位
    vmin相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的

    设计方式:
    元素的位置和大小采用vw , vh , vmax , vmin 为单位

    弊端:
    兼容性问题,有些手机不兼容这个单位

    综上所述:
    单一的H5页面可以通过动态计算js来改变font-size大小。
    大型的项目比如webpack项目可以采用rem + flexible + sass

  • 相关阅读:
    Java中Volatile关键字详解
    java hashmap&concurrentHashmap源理
    java CAS和AQS
    jvm内存模型
    springAop源码分析
    一个项目设置两个git地址,并最终实现一次性同时推送到到两个git地址上的方法总结
    H5实现横向滚动的方法总结
    tab吸顶的神奇-- css粘性属性
    H5制作显示轮播图的方法Swiper
    微信H5中禁止分享好友及分享到朋友圈的方法
  • 原文地址:https://www.cnblogs.com/real-me/p/7374746.html
Copyright © 2011-2022 走看看