Vue 項(xiàng)目中的移動(dòng)端適配方案

1烫饼、淘寶 flexible 方案

工具 & 插件

  • sublime
  • cssrem -- 一個(gè)CSS值轉(zhuǎn)REM的Sublime Text插件
  • lib-flexible -- 安裝依賴

配置

  • 安裝 lib-flexible
  • 在模版文件 index.html 中設(shè)置 meta 屬性
<meta name="viewport" content="width=device-width,inital-scale=1.0,maxmum-scale=1.0,minmum-scale=1.0,user-scalable=no">
  • 在入口文件 index.js 中引入 lib-flexible
import 'lib-flexible'

引入 lib-flexible 更簡(jiǎn)便的方法是直接使用阿里CDN猎塞,在模板文件 index.html 中通過(guò)script標(biāo)簽引入

<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>

但是這樣做會(huì)有一個(gè)問(wèn)題,協(xié)議是 http杠纵,如果在 https 中這樣引入會(huì)出失敗

  • 安裝 sublime 插件

  • 修改配置文件
    進(jìn)入:Sublime Text -> Preferences -> Package Settings -> cssrem

{
  // px 轉(zhuǎn) rem的單位比例荠耽,即 1rem = 37.52px,可以根據(jù)設(shè)計(jì)稿修改該值
  "px_to_rem": 37.52,
  // 設(shè)置 px 轉(zhuǎn)化為 rem 保留幾位小數(shù)
  "max_rem_fraction_length": 2,
  // 設(shè)置對(duì)哪些文件啟用該插件
  "available_file_types": [".css", ".less", ".sass", ".scss", ".vue"]
}

2比藻、lib-flexible 的另一種實(shí)現(xiàn)

前面的方案有一定局限性铝量,比如只有在 sublime 中才能使用倘屹,而且需要手動(dòng)轉(zhuǎn) px 為 rem,我們可以通過(guò)其他項(xiàng)目依賴實(shí)現(xiàn)相同的效果慢叨。

插件

  • lib-flexible
  • px2rem-loader

使用

  • 使用 vue init webpack my-app 創(chuàng)建一個(gè)項(xiàng)目

  • 安裝 flexible纽匙,引入(同上)

  • npm install px2rem-loader --save-dev

  • 修改配置文件
    • build -> utils.js
exports.cssLoaders = function (options) {
   const cssLoader = {
    loader: 'css-loader',
    options: {
      sourceMap: options.sourceMap
    }
  }
  
  // 引入 px2rem-loader
  const px2remLoader = {
    loader: 'px2rem-loader,
    options: {
      // px 轉(zhuǎn) rem 的比例,視設(shè)計(jì)圖而定
      remUnit: 37.5
    }
  }
  
  // 添加 px2rem-loader
  function generateLoaders (loader, loaderOptions) {
    // 在下面的數(shù)組中添加 px2rem
    const loaders = options.usePostCSS ? [cssLoader, px2remLoader, postcssLoader] : [cssLoader, px2remLoader]
  }
}

這樣的話這個(gè) loader 會(huì)自動(dòng)將我們寫(xiě)的 px 轉(zhuǎn)為 rem拍谐,配合跟元素大小的隨視口大小改變烛缔,可以實(shí)現(xiàn)移動(dòng)端的適配。

3轩拨、vw / vh

如果不考慮適配比較老舊版本的瀏覽器践瓷,完全可以使用 vw / vh 布局,分別表示視口寬度/高度亡蓉。100vw 等于整個(gè)視口的寬度晕翠,100vh 等于整個(gè)視口的高度。

  • vw : 1vw 為視口寬度的 1%
  • vh : 1vh 為視口高度的 1%
  • vmin : vw 和 vh 中的較小值
  • vmax : 選取 vw 和 vh 中的較大值

總而言之砍濒,如果設(shè)計(jì)稿為 750px淋肾,那么 1vw = 7.5px,100vw = 750px梯影。其實(shí)設(shè)計(jì)稿按照設(shè)么都沒(méi)多大關(guān)系巫员,最終轉(zhuǎn)化過(guò)來(lái)的都是相對(duì)單位,我們可以使用插件幫助我們把書(shū)寫(xiě)的 px 轉(zhuǎn)為 vw / vh甲棍。

不過(guò)简识,使用 vw 具有一定的缺陷:

  • px轉(zhuǎn)換成vw不一定能完全整除,因此有一定的像素差感猛。
  • 比如當(dāng)容器使用vw七扰,margin采用px時(shí),很容易造成整體寬度超過(guò)100vw陪白,從而影響布局效果颈走。當(dāng)然我們也是可以避免的,例如使用padding代替margin咱士,結(jié)合calc()函數(shù)使用等等...

插件

  • postcss-px-to-viewport

使用

  • npm install postcss-px-to-viewport --save-dev
  • 在 postcss.config.js 添加配置

相關(guān)配置項(xiàng)參考官方 github 倉(cāng)庫(kù)

module.exports = {
  plugins: {
    "postcss-px-to-viewport": {
      // 常用配置立由,更多配置參考官方
      // 需要轉(zhuǎn)換的單位
      unitToConvert: 'px',
      // 設(shè)計(jì)稿的視口寬度
      viewportWidth: 375,
      // 單位轉(zhuǎn)換后保留的精度
      unitPrecision: 5,
    }
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市序厉,隨后出現(xiàn)的幾起案子锐膜,更是在濱河造成了極大的恐慌,老刑警劉巖弛房,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件道盏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)荷逞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)媒咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人种远,你說(shuō)我怎么就攤上這事涩澡。” “怎么了院促?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵筏养,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我常拓,道長(zhǎng)渐溶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任弄抬,我火速辦了婚禮茎辐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掂恕。我一直安慰自己拖陆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布懊亡。 她就那樣靜靜地躺著依啰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪店枣。 梳的紋絲不亂的頭發(fā)上馍资,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天缔杉,我揣著相機(jī)與錄音,去河邊找鬼矢沿。 笑死泽艘,一個(gè)胖子當(dāng)著我的面吹牛吮旅,可吹牛的內(nèi)容都是我干的征候。 我是一名探鬼主播寞酿,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钝侠!你這毒婦竟也來(lái)了该园?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤帅韧,失蹤者是張志新(化名)和其女友劉穎爬范,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體弱匪,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萧诫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斥难。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖帘饶,靈堂內(nèi)的尸體忽然破棺而出哑诊,到底是詐尸還是另有隱情,我是刑警寧澤及刻,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布镀裤,位于F島的核電站,受9級(jí)特大地震影響缴饭,放射性物質(zhì)發(fā)生泄漏暑劝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一颗搂、第九天 我趴在偏房一處隱蔽的房頂上張望担猛。 院中可真熱鬧,春花似錦丢氢、人聲如沸傅联。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蒸走。三九已至,卻和暖如春貌嫡,著一層夾襖步出監(jiān)牢的瞬間比驻,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工衅枫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嫁艇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓弦撩,卻偏偏與公主長(zhǎng)得像步咪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子益楼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354