vue 開發(fā) H5 如何做適配

如何創(chuàng)建基礎(chǔ)的vue項(xiàng)目, 我這邊就不和大家說啦, 今天主要是和大家分享一下, vue 開發(fā) H5 端, 如何做適配.
    1. 在 index.html 文件中加入以下代碼:
      <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no">
  • 2.先創(chuàng)建兩個(gè)全局的樣式文件 boder.css 和 reset.css 分別在 main.js 中引入
    • 添加boder.css,設(shè)置1像素邊框,防止移動(dòng)端CSS里面寫了1px躯护,實(shí)際上看起來(lái)比1px粗的問題出現(xiàn).
        /*移動(dòng)端1像素邊框*/
      @charset "utf-8";
      .border,
      .border-top,
      .border-right,
      .border-bottom,
      .border-left,
      .border-topbottom,
      .border-rightleft,
      .border-topleft,
      .border-rightbottom,
      .border-topright,
      .border-bottomleft {
        position: relative;
      }
       
      .border::before,
      .border-top::before,
      .border-right::before,
      .border-bottom::before,
      .border-left::before,
      .border-topbottom::before,
      .border-topbottom::after,
      .border-rightleft::before,
      .border-rightleft::after,
      .border-topleft::before,
      .border-topleft::after,
      .border-rightbottom::before,
      .border-rightbottom::after,
      .border-topright::before,
      .border-topright::after,
      .border-bottomleft::before,
      .border-bottomleft::after {
        content: "\0020";
        overflow: hidden;
        position: absolute;
      }
       
      /* border
       * 因滤钱,邊框是由偽元素區(qū)域遮蓋在父級(jí)
       * 故外臂,子級(jí)若有交互三娩,需要對(duì)子級(jí)設(shè)置
       * 定位 及 z軸
       */
      .border::before {
        box-sizing: border-box;
        top: 0;
        left: 0;
        height: 100%;
        width: 100%;
        border: 1px solid #eaeaea;
        transform-origin: 0 0;
      }
       
      .border-top::before,
      .border-bottom::before,
      .border-topbottom::before,
      .border-topbottom::after,
      .border-topleft::before,
      .border-rightbottom::after,
      .border-topright::before,
      .border-bottomleft::before {
        left: 0;
        width: 100%;
        height: 1px;
      }
       
      .border-right::before,
      .border-left::before,
      .border-rightleft::before,
      .border-rightleft::after,
      .border-topleft::after,
      .border-rightbottom::before,
      .border-topright::after,
      .border-bottomleft::after {
        top: 0;
        width: 1px;
        height: 100%;
      }
       
      .border-top::before,
      .border-topbottom::before,
      .border-topleft::before,
      .border-topright::before {
        border-top: 1px solid #eaeaea;
        transform-origin: 0 0;
      }
       
      .border-right::before,
      .border-rightbottom::before,
      .border-rightleft::before,
      .border-topright::after {
        border-right: 1px solid #eaeaea;
        transform-origin: 100% 0;
      }
       
      .border-bottom::before,
      .border-topbottom::after,
      .border-rightbottom::after,
      .border-bottomleft::before {
        border-bottom: 1px solid #eaeaea;
        transform-origin: 0 100%;
      }
       
      .border-left::before,
      .border-topleft::after,
      .border-rightleft::after,
      .border-bottomleft::after {
        border-left: 1px solid #eaeaea;
        transform-origin: 0 0;
      }
       
      .border-top::before,
      .border-topbottom::before,
      .border-topleft::before,
      .border-topright::before {
        top: 0;
      }
       
      .border-right::before,
      .border-rightleft::after,
      .border-rightbottom::before,
      .border-topright::after {
        right: 0;
      }
       
      .border-bottom::before,
      .border-topbottom::after,
      .border-rightbottom::after,
      .border-bottomleft::after {
        bottom: 0;
      }
       
      .border-left::before,
      .border-rightleft::before,
      .border-topleft::after,
      .border-bottomleft::before {
        left: 0;
      }
       
      @media (max--moz-device-pixel-ratio: 1.49), (-webkit-max-device-pixel-ratio: 1.49), (max-device-pixel-ratio: 1.49), (max-resolution: 143dpi), (max-resolution: 1.49dppx) {
        /* 默認(rèn)值丑慎,無(wú)需重置 */
      }
       
      @media (min--moz-device-pixel-ratio: 1.5) and (max--moz-device-pixel-ratio: 2.49), (-webkit-min-device-pixel-ratio: 1.5) and (-webkit-max-device-pixel-ratio: 2.49), (min-device-pixel-ratio: 1.5) and (max-device-pixel-ratio: 2.49), (min-resolution: 144dpi) and (max-resolution: 239dpi), (min-resolution: 1.5dppx) and (max-resolution: 2.49dppx) {
        .border::before {
          width: 200%;
          height: 200%;
          transform: scale(.5);
        }
       
        .border-top::before,
        .border-bottom::before,
        .border-topbottom::before,
        .border-topbottom::after,
        .border-topleft::before,
        .border-rightbottom::after,
        .border-topright::before,
        .border-bottomleft::before {
          transform: scaleY(.5);
        }
       
        .border-right::before,
        .border-left::before,
        .border-rightleft::before,
        .border-rightleft::after,
        .border-topleft::after,
        .border-rightbottom::before,
        .border-topright::after,
        .border-bottomleft::after {
          transform: scaleX(.5);
        }
      }
       
      @media (min--moz-device-pixel-ratio: 2.5), (-webkit-min-device-pixel-ratio: 2.5), (min-device-pixel-ratio: 2.5), (min-resolution: 240dpi), (min-resolution: 2.5dppx) {
        .border::before {
          width: 300%;
          height: 300%;
          transform: scale(.33333);
        }
       
        .border-top::before,
        .border-bottom::before,
        .border-topbottom::before,
        .border-topbottom::after,
        .border-topleft::before,
        .border-rightbottom::after,
        .border-topright::before,
        .border-bottomleft::before {
          transform: scaleY(.33333);
        }
       
        .border-right::before,
        .border-left::before,
        .border-rightleft::before,
        .border-rightleft::after,
        .border-topleft::after,
        .border-rightbottom::before,
        .border-topright::after,
        .border-bottomleft::after {
          transform: scaleX(.33333);
        }
      }
      
    • 添加reset.css,清除不同手機(jī)瀏覽器的初始樣式,使各種瀏覽器的初始樣式都保持一致.
                /*! minireset.css v0.0.2 | MIT License | github.com/jgthms/minireset.css */
          html,
          body,
          p,
          ol,
          ul,
          li,
          dl,
          dt,
          dd,
          blockquote,
          figure,
          fieldset,
          legend,
          textarea,
          pre,
          iframe,
          hr,
          h1,
          h2,
          h3,
          h4,
          h5,
          h6 {
            margin: 0;
            padding: 0;
          }
           
          h1,
          h2,
          h3,
          h4,
          h5,
          h6 {
            font-size: 100%;
            font-weight: normal;
          }
           
          ul {
            list-style: none;
          }
           
          button,
          input,
          select,
          textarea {
            margin: 0;
          }
           
          html {
            box-sizing: border-box;
          }
           
          * {
            box-sizing: inherit;
          }
          *:before, *:after {
            box-sizing: inherit;
          }
           
          img,
          embed,
          object,
          audio,
          video {
            height: auto;
            max-width: 100%;
          }
           
          iframe {
            border: 0;
          }
           
          table {
            border-collapse: collapse;
            border-spacing: 0;
          }
           
          td,
          th {
            padding: 0;
            text-align: left;
          }
      
  • 3.移動(dòng)端項(xiàng)目主要是根據(jù)屏幕大小來(lái)動(dòng)態(tài)設(shè)置元素的尺寸酗昼,需要安裝下面兩個(gè)插件:
    * postcss-pxtorem 用于將 px 轉(zhuǎn)化為 rem npm install postcss postcss-pxtorem@5.0 --save-dev
    * lib-flexible用于設(shè)置 rem 基準(zhǔn)值 npm i lib-flexible , 并在 main.js 中引入 import 'lib-flexible'
    • 在package.json項(xiàng)目配置里設(shè)置postcss
      "postcss": {
        "plugins": {
          "autoprefixer": {
            "overrideBrowserslist": [
              "Android 4.1",
              "iOS 7.1",
              "Chrome > 31",
              "ff > 31",
              "ie >= 8"
            ]
          },
          "postcss-pxtorem": {
            "rootValue": 37.5,
            "propList": [
              "*"
            ]
          }
        }
      }
      
    • 4.新建 rem.js 文件, 并在 main.js 中引入
          /**
           * 移動(dòng)端(手機(jī)端)頁(yè)面自適應(yīng)解決方案—rem布局
           * @ 轉(zhuǎn)化為px : rem = 37.5 : 1
           */
           (function flexible (window, document) {
            var docEl = document.documentElement
            var dpr = window.devicePixelRatio || 1
      
            // adjust body font size
            function setBodyFontSize () {
              if (document.body) {
                document.body.style.fontSize = 14 * dpr + 'px'
              } else {
                document.addEventListener('DOMContentLoaded', setBodyFontSize)
              }
            }
      
            setBodyFontSize()
      
            // set 1rem = viewWidth / 10
            function setRemUnit () {
              var rem = docEl.clientWidth / 10
              docEl.style.fontSize = rem + 'px'
            }
      
            setRemUnit()
      
            // reset rem unit on page resize
            window.addEventListener('resize', setRemUnit)
            window.addEventListener('pageshow', function (e) {
              if (e.persisted) {
                setRemUnit()
              }
            })
      
            // detect 0.5px supports
            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)
      
  • 最后杀捻,樣式中直接用px單位就好了崔泵。如果你的設(shè)計(jì)稿寬度為750px,那么寫樣式的時(shí)候就要把數(shù)字除以2.
Tip 這邊提一個(gè)注意事項(xiàng), 如果是使用的 VantUi 組件, 還需要再加一個(gè)配置文件
  • 設(shè)置 postcss 根目錄下的新建 postcss.config.js 文件(如果有這個(gè)文件則無(wú)需添加)
      module.exports = {
           plugins: {
             // postcss-pxtorem 插件的版本需要 >= 5.0.0
            'postcss-pxtorem': {
               rootValue({ file }) {
                  return file.indexOf('vant') !== -1 ? 37.5 : 75;
                },
                propList: ['*'],
            } ,
          },
        };
    
  • 以上是我在做H5的時(shí)候, 參考別人的方法, 做的整理, 如有問題, 歡迎指出!!!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末险污,一起剝皮案震驚了整個(gè)濱河市痹愚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛔糯,老刑警劉巖拯腮,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蚁飒,居然都是意外死亡动壤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門淮逻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)琼懊,“玉大人阁簸,你說我怎么就攤上這事『哒桑” “怎么了启妹?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)削祈。 經(jīng)常有香客問我,道長(zhǎng)脑漫,這世上最難降的妖魔是什么髓抑? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮优幸,結(jié)果婚禮上吨拍,老公的妹妹穿的比我還像新娘。我一直安慰自己网杆,他們只是感情好羹饰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碳却,像睡著了一般队秩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昼浦,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天馍资,我揣著相機(jī)與錄音,去河邊找鬼关噪。 笑死鸟蟹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的使兔。 我是一名探鬼主播建钥,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼虐沥!你這毒婦竟也來(lái)了熊经?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤欲险,失蹤者是張志新(化名)和其女友劉穎奈搜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盯荤,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馋吗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秋秤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宏粤。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脚翘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绍哎,到底是詐尸還是另有隱情来农,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布崇堰,位于F島的核電站沃于,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏海诲。R本人自食惡果不足惜繁莹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望特幔。 院中可真熱鬧咨演,春花似錦、人聲如沸蚯斯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拍嵌。三九已至遭赂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間横辆,已是汗流浹背嵌牺。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留龄糊,地道東北人逆粹。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像炫惩,于是被迫代替她去往敵國(guó)和親僻弹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 這篇文字里我會(huì)介紹50 個(gè)便于使用的 CSS2/CSS3 代碼片段給所有的WEB專業(yè)人員. 選擇IDE開發(fā)環(huán)境來(lái)存...
    JamHsiao_aaa4閱讀 1,102評(píng)論 0 3
  • // return ; // eslint-disable-next-line import/no-extran...
    Message_id閱讀 799評(píng)論 0 0
  • 1他嚷、垂直對(duì)齊 如果你用CSS蹋绽,則你會(huì)有困惑:我該怎么垂直對(duì)齊容器中的元素?現(xiàn)在筋蓖,利用CSS3的Transform卸耘,...
    kiddings閱讀 3,152評(píng)論 0 11
  • 一,HTML有N多標(biāo)簽粘咖,根據(jù)顯示的類型蚣抗,主要可以分為3大類 1,塊級(jí)標(biāo)簽 獨(dú)占一行的標(biāo)簽 能隨時(shí)設(shè)置寬度和高度(比...
    張不二01閱讀 725評(píng)論 0 4
  • 寫在從深圳返家的途中瓮下。呆在一個(gè)地方已經(jīng)至少兩個(gè)鐘了翰铡,看來(lái)十一要在路上與眾位萍水相逢的同乘們一起度過了钝域。 好了,話不...
    沐酒鴻江閱讀 315評(píng)論 0 0