關(guān)于移動(dòng)端適配

分享一篇移動(dòng)端適配的多個(gè)方案,也可以說(shuō)說(shuō)你們是怎么做的。

概念

  • 自適應(yīng):根據(jù)不同的設(shè)備屏幕大小來(lái)自動(dòng)調(diào)整尺寸、大小
  • 響應(yīng)式:會(huì)隨著屏幕的實(shí)時(shí)變動(dòng)而自動(dòng)調(diào)整,是一種更強(qiáng)的自適應(yīng)

為什么要做適配

市面上移動(dòng)端屏幕尺寸非常的繁多,很多時(shí)候我們希望一個(gè)元素在不同的屏幕上顯示不同的大小以此來(lái)更好的還原效果圖:

1.當(dāng)我們針對(duì)一個(gè)手機(jī)進(jìn)行布局設(shè)計(jì)時(shí),設(shè)置了一個(gè) 300 * 200 大小的盒子
2.但在不同的設(shè)備上,由于邏輯像素不同的問(wèn)題,會(huì)使得這個(gè)盒子在更大的視口上顯得很小,在更小的視口上顯示很大
3.因此我們需要進(jìn)行適配讓它在不同設(shè)備上所占據(jù)視口的空間比例是相同的

當(dāng)前幾種適配方案

1.百分比設(shè)置(不推薦)
  • 因?yàn)椴煌瑢傩缘陌俜直戎?,相?duì)的可能是不同參照物,所以百分比往往很難統(tǒng)一
  • 百分比在移動(dòng)端適配中使用是比較少的
2.rem+html動(dòng)態(tài)的font-size
3.vw單位
4.flex的彈性布局

方案1:rem+html動(dòng)態(tài)的font-size

rem 單位是相對(duì)于 html 元素的 font-size 來(lái)設(shè)置的,通過(guò)在不同屏幕尺寸下,動(dòng)態(tài)的修改 html 元素的 font-size 以此來(lái)達(dá)到適配效果

在開發(fā)中,我們只需要考慮兩個(gè)問(wèn)題:

  • 針對(duì)不同的屏幕,設(shè)置 html 不同的 font-size
  • 將原來(lái)設(shè)置的尺寸,轉(zhuǎn)化成 rem 單位
font-size 的尺寸
屏幕尺寸 html的font-size 盒子的設(shè)置寬度 盒子的最終寬度
375px 37.5px 1rem 37.5px
320px 32px 1rem 32px
414px 41.4px 1rem 41.4px
px 與 rem 的單位換算
  • 代碼換算
1.根據(jù) html 的寬度計(jì)算出 font-size 的大小,并設(shè)置到 html 上
2.監(jiān)聽頁(yè)面尺寸的變化,實(shí)時(shí)修改 font-size 大小
// 基準(zhǔn)大小
const baseSize = 375 / 10 // 375為UI提供的375尺寸,如果是750尺寸則設(shè)置為750
// 設(shè)置 rem 函數(shù)
function setRem () {
  // 當(dāng)前頁(yè)面寬度相對(duì)于 375(設(shè)計(jì)稿尺寸) 寬的縮放比例,可根據(jù)自己需要修改。
  const scale = document.documentElement.clientWidth / 375
  // 設(shè)置頁(yè)面根節(jié)點(diǎn)字體大小
  document.documentElement.style.fontSize = (baseSize * Math.min(scale, 2)) + 'px'
}
// 初始化
setRem()
// 改變窗口大小時(shí)重新設(shè)置 rem
window.onresize = function () {
  setRem()
}
  • 借助插件postcss-pxtorem (npm install postcss-pxtorem)

方案2:vw 適配方案

100vw 相當(dāng)于整個(gè)視口的寬度 innerWidth,1vw 相當(dāng)于視口寬度的 1%,將 px 轉(zhuǎn)換為 vw 即可完成適配,其實(shí)上面的 rem 就是模仿 vw 方案

vw相比于rem的優(yōu)勢(shì):
  • 不需要去計(jì)算 html 的 font-size 大小,也不需要去給 html 設(shè)置 font-size
  • 不會(huì)因?yàn)樵O(shè)置 html 的 font-size 大小,而必須再給 body 設(shè)置一個(gè) font-size 防止繼承
  • 因?yàn)椴灰蕾?font-size 的尺寸,所以不用擔(dān)心某些原因的 html 的 font-size 尺寸被篡改,導(dǎo)致頁(yè)面尺寸混亂
  • vw 更加語(yǔ)義話,1vw 相當(dāng)于 1/100 viewport 的大小
  • rem 事實(shí)上作為一種過(guò)渡的方案,它利用的也是 vw 的思想
px 與 vw 的單位轉(zhuǎn)換
  • 代碼換算
比如屏幕尺寸為 375px,元素大小為 150px,我們需要將 150px 轉(zhuǎn)換成對(duì)應(yīng)的 vw 值:150 / 3.75=40
// less/scss 函數(shù)
@vwUnit: 3.75;
.pxToVw(@px) {
  result: (@px / @vw) * 1vw
}
.box {
  width: .pxToVw(100)[result];
  height: .pxToVw(100)[result];
} 
  • 借助插件postcss-px-to-viewport-8-plugin (npm install postcss-px-to-viewport-8-plugin)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容