溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

前端開發(fā)中移動(dòng)端適配的示例分析

發(fā)布時(shí)間:2021-08-09 09:47:23 來源:億速云 閱讀:123 作者:小新 欄目:移動(dòng)開發(fā)

這篇文章主要介紹了前端開發(fā)中移動(dòng)端適配的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、百分比

使用場(chǎng)景:只要求寬度隨屏幕自適應(yīng),比如文字塊

百分比在PC端自適應(yīng)上也經(jīng)常用到,著實(shí)相當(dāng)好用,但它一般用于寬度自適應(yīng)的設(shè)置,高度設(shè)置百分比時(shí),要求其父類元素有明確高度。

1、利用百分比實(shí)現(xiàn)填充全屏

為了讓元素設(shè)置height:100%生效,并且正好為窗口高度,則需要給html和body元素以及它所有的父元素都設(shè)置高度100%。

例如:

<html style="height: 100%;">
  <body style="height: 100%;">
    <div  class="wrap" style="height: 100%; width:100%">
        填充全屏啦
    </div>
  </body>
</html>

在使用height: 100%;時(shí)需要注意的一些事項(xiàng)

  • Margins 和 padding 會(huì)讓你的頁面出現(xiàn)滾動(dòng)條,也許這是你不希望的。

  • 如果你的元素實(shí)際高度大于你設(shè)定的百分比高度,那元素的高度會(huì)自動(dòng)擴(kuò)展。

寫到這里我突然想插個(gè)題外話,對(duì)于absolute定位的元素,用height:100%顯然也是無效的,因?yàn)榇藭r(shí)它已經(jīng)脫離了文檔流,此時(shí)它的高度由自身內(nèi)容撐開。這是如果我希望它填滿父盒子,怎么做?這里有個(gè)黑魔法,設(shè)置它的top,left,bottom,right均為0,這時(shí)盒子就會(huì)被拉伸至填滿父盒子。

2、利用百分比實(shí)現(xiàn)寬高比固定

有時(shí),我們希望寬度自適應(yīng),高度隨寬度變化而變化,并有固定的寬高比。

讓我們縷縷,用height百分比顯然不行,height百分比是以父元素高度為基準(zhǔn)的,而我們需要以寬度為基準(zhǔn)來設(shè)置高度。

所以這里可以用到padding-top或者padding-bottom,padding是以父元素的width為基準(zhǔn)的。我們可以設(shè)置元素的height:0,然后用padding-bottom將元素?fù)伍_,以實(shí)現(xiàn)固定寬高比。

二、rem

使用場(chǎng)景:對(duì)于圖片等對(duì)高度自適應(yīng)有要求的場(chǎng)景

rem單位:以頁面根字體的大小,也就是html元素字體的大小為基準(zhǔn),例如

html{
    font-size:16px;
}

那么1rem等于16px。

所以使用時(shí),我們只要讓根字體大小隨屏幕大小自適應(yīng),那頁面中所有使用rem單位來設(shè)置寬高的元素,大小也會(huì)隨屏幕大小自適應(yīng)了。

根據(jù)不同屏幕大小設(shè)置根字體大小有兩種方法:

1、css方法設(shè)置rem

利用媒體查詢,根據(jù)不同的屏幕大小進(jìn)行設(shè)置,缺點(diǎn)就是一般只列舉一些代表性的屏幕大小,自適應(yīng)不能充分覆蓋所有范圍

html{
    font-size:10px
} 
@media screen and (min-width:321px) and (max-width:375px){
    html{
        font-size:11px
    }   
} 
@media screen and (min-width:376px) and (max-width:414px){
    html{
        font-size:12px
    }
} 
@media screen and (min-width:415px) and (max-width:639px){
    html{
        font-size:15px
    }
} 
@media screen and (min-width:640px) and (max-width:719px){
    html{
        font-size:20px
    }
} 
@media screen and (min-width:720px) and (max-width:749px){
    html{
        font-size:22.5px
    }
} 
@media screen and (min-width:750px) and (max-width:799px){
    html{
        font-size:23.5px
    }
} 
@media screen and (min-width:800px){
    html{
        font-size:25px
    }
}

2、JS方法設(shè)置rem

利用JS設(shè)置根字體大小,所以若改變發(fā)生在渲染完成之后,則會(huì)引起回流,導(dǎo)致閃屏現(xiàn)象。因此使用這種方法時(shí),應(yīng)將JS代碼放入head頭部中并且在CSS引入之前。

(function (doc, win) {
  var docEl = doc.documentElement,
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
    recalc = function () {
      var clientWidth = docEl.clientWidth;
      if (!clientWidth) return;
      docEl.style.fontSize = 20 * (clientWidth / 375) + 'px';
    };
  recalc(); 
  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
})(document, window);

上面clientWidth為實(shí)際屏幕的寬度,而375為設(shè)計(jì)稿基于的參考屏幕寬度,20則是當(dāng)實(shí)際屏幕寬度等于參考屏幕寬度時(shí),1rem的大小。代碼的關(guān)鍵參數(shù)20和375是這樣設(shè)置的:

a) 由于提供的設(shè)計(jì)稿現(xiàn)在基本都是以iPhone6/7/8為參考的,寬度為750px,dpr為2,所以計(jì)算rem時(shí)的參考屏幕寬度可以設(shè)置為375。

b) 由于chrome的最小字體是12px,又為了計(jì)算方便,所以可以設(shè)置1rem的大小為20px
應(yīng)用過程中,比如我們拿到了一個(gè)750的設(shè)計(jì)稿,那么首先,將設(shè)計(jì)稿里的數(shù)值除以2,得到按手機(jī)屏幕大小布局的數(shù)值(這也是375的由來)。然后,再除以20就可以將設(shè)計(jì)稿中的px轉(zhuǎn)化為rem了。

三、媒體查詢

使用場(chǎng)景:一般利用媒體查詢來進(jìn)行特殊處理,比如

1、iphoneX這類全屏的適配

2、在適配dpr為3的iPhone Plus或者pad橫屏等超級(jí)大屏?xí)r,需要根據(jù)業(yè)務(wù)需求設(shè)置臨界值,然后展示不同內(nèi)容或者替換不同分辨率圖片(也就是常說的2倍圖、3倍圖的使用)等

四、vw、vh

vw是以屏幕寬度為基準(zhǔn)的百分比單位,1vw=1% * deviceWidth

vh是以屏幕高度為基準(zhǔn)的百分比單位,1v=1% * deviceHeight

vw,vh確實(shí)很好用,但是目前使用時(shí)仍需考慮兼容性的問題,在國(guó)內(nèi)一些手機(jī)自帶瀏覽器里(比如華為)會(huì)失效,并且據(jù)說碰上X5內(nèi)核時(shí)也容易踩坑 。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“前端開發(fā)中移動(dòng)端適配的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI