• 适配总结


    1、没有设置 viewport 的情况下,不同尺寸下的手机屏幕默认宽度都是980宽;

    2、设置 viewport 为固定的 width;

      <meta name="viewport" content="width=360">
      设置 <meta name="viewport" content="width=360"> 后,会使页面在不同设备上显示相同宽度,事例中不管 iPhone 5iPhone 6 页面都会变成 360px 宽;
    3. 设置 viewport 为设备的 width

      设置 <meta name="viewport" content="width=device-width"> 后,页面宽度会识别为硬件设备最优的宽度显示,这是使用最广泛的设置方式。

    4、动态设置rem;

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width">
      <script>
      (function(doc,win,wid){
        var rootEle = doc.documentElement,
            wid = wid || 750;
        recalc();
        function recalc(){
          rootEle.style.fontSize = 100*(rootEle.clientWidth/wid)+"px"
        }
        win.addEventListener('orientationchange',recalc,false);
        win.addEventListener('resize',recalc,false);
      })(document,window,750);</script>
      <style>
      *{margin: 0; padding: 0;}
      #full{background-color: red; font-size: 0;}
      .item{background-color: yellow; height: 2rem; width: 2rem; display: inline-block; margin: 0 3px 0 0; font-size: 14px;}
      </style>
    </head>
    <body>
      <div id="full">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
      </div>
    </body>
    </html>

    传入的 750 为设计图总宽度,在任何屏幕宽度内,1rem 等于设计图中的 100px

    5、flexible.js

      引入

    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
    <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script> 或者
    <script src="./node_modules/amfe-flexible/index.js"></script>

    flexible主要做的三件事情
    • 动态改写<meta>标签
    • <html>元素添加data-dpr属性,并且动态改写data-dpr的值
    • <html>元素添加font-size属性,并且动态改写font-size的值
    • // 首先是一个立即执行函数,执行时传入的参数是window和document
      (function flexible (window, document) {
        var docEl = document.documentElement // 返回文档的root元素
        var dpr = window.devicePixelRatio || 1 
        // 获取设备的dpr,即当前设置下物理像素与虚拟像素的比值
       
        // 调整body标签的fontSize,fontSize = (12 * dpr) + 'px'
        // 设置默认字体大小,默认的字体大小继承自body
        function setBodyFontSize () {
          if (document.body) {
            document.body.style.fontSize = (12 * dpr) + 'px'
          } else {
            document.addEventListener('DOMContentLoaded', setBodyFontSize)
          }
        }
        setBodyFontSize();
       
        // set 1rem = viewWidth / 10
        // 设置root元素的fontSize = 其clientWidth / 10 + ‘px’
        function setRemUnit () {
          var rem = docEl.clientWidth / 10
          docEl.style.fontSize = rem + 'px'
        }
       
        setRemUnit()
       
        // 当页面展示或重新设置大小的时候,触发重新
        window.addEventListener('resize', setRemUnit)
        window.addEventListener('pageshow', function (e) {
          if (e.persisted) {
            setRemUnit()
          }
        })
       
        // 检测0.5px的支持,支持则root元素的class中有hairlines
        if (dpr >= 2) {
          var fakeBody = document.createElement('body')
          var testElement = document.createElement('div')
          testElement.style.border = '.5px solid transparent'
          fakeBody.appendChild(testElement)
          docEl.appendChild(fakeBody)
          if (testElement.offsetHeight === 1) {
            docEl.classList.add('hairlines')
          }
          docEl.removeChild(fakeBody)
        }
      }(window, document))

      6.vw && vh

          根据CSS3规范,视口单位主要包括以下4个:

              1.vw:1vw等于视口宽度的1%。

              2.vh:1vh等于视口高度的1%。

              3.vmin:选取vw和vh中最小的那个。

              4.vmax:选取vw和vh中最大的那个。

  • 相关阅读:
    SSR 第二篇,搭建Vue SSR程序
    SSR 第一篇,搭建简单的SSR程序
    数组的所有方法整理学习
    CustomEvent 使用
    VUE CSS module
    eslint Expected linebreaks to be 'LF' but found 'CRLF'
    利用Object.freeze() 提升性能
    vue 项目开启gzip 压缩和性能优化
    [转]Ext Grid控件的配置与方法
    ExtJS renderer(转)
  • 原文地址:https://www.cnblogs.com/jaywu/p/12784749.html
Copyright © 2020-2023  润新知