zoukankan      html  css  js  c++  java
  • 移动端页面适配解决方案

    一、流体布局

    所谓的流体布局,就是用百分比来定义宽度,最外层容器的宽度设置为100%,就可以适配不同的屏幕,子元素按照比例来设置百分比,子元素整体的百分比之和就是100%,但是如果有子元素设置了边框,或者padding,那么整体的宽度就会大于100%,这时,我们可以将盒子的尺寸计算方式设置为从边框计算,通过设置:box-sizing:border-box,此时,盒子设置的宽度就是盒子的实际宽度,就没有这个问题了。

    宽度解决了,高度如何设置呢?一般的元素,高度可以固定不变,所以在屏幕变化时,我们可以看到元素的宽度变了,高度不变,但是对于图片,如果高度不同,图片就会被拉扁,此时我们可以将图片的宽度设为100%;它的宽度就由它的父级的宽度决定,图片的高度不设置,图片就会按照宽度变化等比例放大或缩小,这是图片的特性,这样就可以做到图片的适配了。

    示例如下:

      * {
           box-sizing: border-box;
        }
    
      .wrap {
           overflow: hidden;
        }
    
      .banner {
           overflow: hidden;
        }
    
      .banner img {
            100%;
        }
    
      .l_con {
           33.333333%;
           height:50px;
           float: left;
        }
      .c_con {
           33.333333%;
           height:50px;
           float: left;
        }
       .r_con {
           33.333333%;
           height:50px;
           float: left;
        }

    二、响应式布局

    响应式布局,就是使用媒体查询的方式,针对不同的屏幕,对应不同的样式,但是移动端的屏幕很多种,如果要对应这么多套不同的样式,这样做也不现实,所以针对移动端,可以划分出三个屏幕宽度范围,在范围之内的,就使用同一套样式,这样定义三套样式就可以了,宽度的区间可以参照苹果手机的分辨率:374px以下为第一个区间,375px到413px为第二个区间,414px以上为第三个区间,按照这个三个区间定义三套样式,在苹果手机上可以做到很好的适配,但对于一些其他分辨率的手机,可能会有一些不太适配的细节,但是这三套,应该基本上是适用了。

    示例如下:

    /* 最小尺寸样式 */
            ... ... 
            
    /* 大于等于 375px 尺寸样式 */
       @media screen and (min- 375px){
             ... ...
       }
            
    /*大于等于 414px 尺寸样式*/
      @media screen and (min- 414px){
            ... ...
      }

    三、弹性盒子布局模型

    弹性盒子布局模型是一个新增的CSS 布局模块,它带有流体布局和响应式布局的一些特性,而且它用少量的属性可以实现了多个元素的对齐方式,分布以及顺序等问题,用它能快捷高效的实现适配多终端的布局,这种模块简称为 flexbox,flexbox布局模块的先后有三个版本,前两个版本的一些属性在最新的浏览器上已经得不到支持了,第三个版本在最新的浏览器上已得到广泛的支持。

    Flexbox布局模块是CSS3新增的一些属性,这些属性分为容器属性和条目属性,容器和条目是这种模块里面的概念,指的其实就是父元素和子元素。父元素通过设置display:flex来声明flexbox模块、通过flex-flow来设置子元素排列方式、通过justify-content来设置元素的分布方式等等。而子元素通过flex属性来设置伸长或缩小比例、通过order来设置它在容器中的顺序等等。

    示例如下:

    .menu {
       max- 800px;
       height: 40px;
       margin: 0 auto;
       display: flex;
       justify-content: flex-start;
       align-items: center;
    }
    
    .menu li {
       flex: 1;
    }

    四、基于rem的布局

    rem是CSS3新增的一个单位,相对于em单位,rem的单位设置更加简单,它是相对于根元素的的字体大小,其他的元素如果用rem来设置单位,它们对应的基准就是一样的,这样,在移动端适配中,除了html元素,其他元素的宽、高、行高、背景定位等等都用rem来设置,我们设定一个宽度作为基准,比如320px,然后按照这个基准,按比例来调节不同屏幕上对应的html元素的字体大小,就可以同步改变其他所有元素的用rem设置的尺寸的大小,这样就可以做到真正的按比例适配,不像流体布局,只能改变宽度,这种方式直接,高效,目前广泛应用在移动端布局中。

    动态改变html标签文字大小的JavaScript如下:

    (function () {
       let calc = function () {
           let docElement = document.documentElement;
           let clientWidthValue = docElement.clientWidth > 640 ? 640 : docElement.clientWidth;
           docElement.style.fontSize = 20 * (clientWidthValue / 320) + 'px';
       }
       calc();
       window.addEventListener('resize', calc);
    })()

    css 代码设置如下:

    .search{
       position: absolute;
       right:0.725rem;
       top:0.625rem;
       1.35rem;
       height:1.35rem;
       backgrond:url(../images/icons.png) left -31.97rem;
       -webkit-background-size: 2.9rem 33.5rem;
       background-size: 2.9rem 33.5rem;
    }

    在实际开发中,我们可以根据实际需要,选择适合的适配方式。

    本文原出处:http://pcedu.pconline.com.cn/1024/10241144.html

  • 相关阅读:
    解决:UIBarButtonItem size issue.尺寸
    flutter坑:Android license status unknown and also Android sdkmanager tool not found
    Ream--(objc)写事务精简方案
    SDMask(iOS蒙层遮罩弹出引导)
    HIFIMAN TWS600A听感小记——测评出街Man
    imageRectForContentRect,titleRectForContentRect,contentRectForBounds,imageRectForContentRect什么时候调用
    super performSelector: 解决调用父类私有方法的问题
    解决:target overrides the `GCC_PREPROCESSOR_DEFINITIONS`
    swift为什么不是do while?
    记录/objc2/object_setClass做了啥
  • 原文地址:https://www.cnblogs.com/Sky-Ice/p/9592232.html
Copyright © 2011-2022 走看看