移動web開發(fā)

前端開發(fā)常用單位

像素

  • 在前端開發(fā)中視口的水平方向和垂直方向是由很多小方格組成的,一個小方格就是一個像素
  • 特點: 不會隨著視口大小的變化而變化,像素是一個固定的單位(絕對單位)

百分比

  • 百分比是前端開發(fā)中的一個動態(tài)單位,永遠(yuǎn)都是以當(dāng)前元素的父元素作為參考進(jìn)行計算
  • 特點
    • 子元素寬度是參考父元素寬度計算的
    • 子元素高度是參考父元素高度計算的
    • 子元素padding和margin無論是垂直方向還是水平方向都是參考父元素的寬度計算的
    • 不能通過百分比設(shè)置元素的border
    • 百分比是一個動態(tài)的單位,會隨著父元素寬高的變化而變化

em

  • em是前端開發(fā)中的一個動態(tài)單位,是一個相對于元素字體大小的單位
  • 特點
    • 當(dāng)前元素設(shè)置了字體大小,那么就相對于當(dāng)前元素的字體大小
    • 當(dāng)前元素沒有設(shè)置字體大小,那么就相對于第一個設(shè)置字體大小的祖先元素的字體大小
    • 如果當(dāng)前元素和所有祖先元素都沒有設(shè)置大小,那么就相對于瀏覽器默認(rèn)的字體大小
    • em是一個動態(tài)單位,會隨著參考元素字體大小的變化而變化(相對單位)

rem

  • rem就是root em,和em一樣是前端開發(fā)中的一個動態(tài)單位
  • rem和em的區(qū)別在于,rem是一個相對于根元素(html)字體大小的單位
  • 特點
    • 除了根元素以外,其他祖先元素的字體大小不會影響rem尺寸
    • 如果根元素設(shè)置了字體大小,那么就相對于根元素的字體大小
    • 如果根元素沒有設(shè)置字體大小,那么就相對于瀏覽器默認(rèn)的字體大小
    • rem是一個動態(tài)單位,會隨著根元素字體大小的變化而變化(相對單位)

vwh

  • vw和vh是前端開發(fā)中的一個動態(tài)單位,是一個相對于網(wǎng)頁視口的單位
  • 系統(tǒng)會將視口的寬度和高度分為100份,1vw就占用視口寬度的百分之一,1vh就占用視口高度的百分之一,vw和vh永遠(yuǎn)都是以視口為參考
  • 特點: vw/vh是一個動態(tài)單位,會隨著視口大小的變化而變化(相對單位)
  • vmin和vmax
    • vmin:vw和vh中較小的那個
    • vmax:vw和vh中較大的那個
    • 使用場景: 保證移動開發(fā)中屏幕旋轉(zhuǎn)之后尺寸不變

移動端視口

  • 簡單理解就是可視區(qū)域大小我們稱之為視口

  • 在pc端,視口大小就是瀏覽器窗口可視區(qū)域的大小,在移動端,視口大小并不等于窗口大小,移動端視口寬度被人為定義為了980

  • 移動端自動將視口寬度設(shè)置為980帶來的問題

    • 雖然移動端自動將視口寬度設(shè)置為980之后讓我們可以很完美的看到整個網(wǎng)頁,但是由于移動端的物理尺寸(設(shè)備寬度)是遠(yuǎn)遠(yuǎn)小于視口寬度的
    • 為了能夠在較小的范圍內(nèi)看到視口中所有的內(nèi)容,那么就必須將內(nèi)容縮小
    • 和前面Canvas時講的viewbox一樣,近大遠(yuǎn)小原理
  • 通過meta設(shè)置視口大小

    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
    • width=device-width 設(shè)置視口寬度等于設(shè)備的寬度
    • initial-scale=1.0 初始縮放比例,1不縮放
    • maximum-scale:允許用戶縮放到的最大比例
    • minimum-scale:允許用戶縮放到的最小比例
    • user-scalable:用戶是否可以手動縮放

移動端常用適配方案

通過媒體查詢

  • 媒體查詢的方式可以說是我們早期采用的布局方式,它主要是通過查詢設(shè)備的寬度來執(zhí)行不同的css代碼,最終達(dá)到界面的配置
  • 優(yōu)勢
    • 簡單,哪里不對改哪里
    • 調(diào)整屏幕寬度的時候不用刷新頁面即可響應(yīng)式展示
    • 特別適合對移動端和pc維護同一套代碼的時候
  • 劣勢
    • 由于移動端和pc端維護同一套代碼,所以代碼量比較大,維護不方便
    • 為了兼顧大屏幕或高清設(shè)備,會造成其他資源浪費,特別是加載圖片資源
    • 為了兼顧移動端和pc端各自響應(yīng)式的展示效果,難免會損失各自特有的交互方式
  • 應(yīng)用場景
    • 對于比較簡單(界面不復(fù)雜)的網(wǎng)頁,如:企業(yè)官網(wǎng),宣傳單頁等,我們可以通過媒體查詢,伸縮布局,bootstrap來實現(xiàn)響應(yīng)式站點
    • 對于比較復(fù)雜(界面復(fù)雜)的網(wǎng)頁,如:電商,團購等,更多的則是采用pc端一套代碼,移動端一套代碼
  • 界面自動跳轉(zhuǎn)
    • 默認(rèn)打開PC端界面
    • 在PC端界面中通過BOM拿到當(dāng)前瀏覽器信息
    • 通過正則判斷當(dāng)前瀏覽器是否是移動端瀏覽器
    • 通過BOM的location對象實現(xiàn)跳轉(zhuǎn)到移動端界面

通過媒體查詢+rem

  • 雖然我們將移動端獨立到一套代碼中了,但是由于移動端也有很多的屏幕尺寸,所以也需要進(jìn)行適配

  • 當(dāng)下在企業(yè)開發(fā)中設(shè)計師提供給我們的移動端設(shè)計圖是750*xxx或者1125*xxx的,所以我們需要對設(shè)計師提供的圖片進(jìn)行等比縮放,這樣才能1:1還原設(shè)計圖片

  • 如何等比縮放

    • 將設(shè)計圖片等分為指定分?jǐn)?shù),求出每一份的大小
    • 將目標(biāo)屏幕也等分為指定分?jǐn)?shù),求出每一份的大小
    • 用原始元素尺寸/原始圖片每一份大小*目標(biāo)屏幕每一份大小=等比縮放后的尺寸
  • 應(yīng)用計算公式

    • 目標(biāo)屏幕每一份的大小就是html的font-size
    • 使用時只需要用原始元素尺寸/原始圖片每一份大小rem 即可
  • JS動態(tài)計算當(dāng)前屏幕每一份的大小

    <script>
      document.documentElement.style.fontSize = window.innerWidth / 7.5 + "px";
    </script>
    
    • 不用寫很多的媒體查詢
    • 切換了屏幕尺寸需要刷新界面才有效

設(shè)備像素和CSS像素

  • 設(shè)備像素又稱為物理像素,是"物理屏幕"上真實存在的發(fā)光點,只要屏幕一經(jīng)出廠就固定不會改變
  • CSS像素又稱為邏輯像素,是編程世界中虛擬的東西,我們通過代碼設(shè)置的像素都是邏輯像素
  • CSS像素和設(shè)備像素在有的時候是不一樣的
    • 在pc端,1個CSS像素往往都是對應(yīng)著電腦屏幕的一個物理像素,所以我們無需關(guān)心pc端的CSS像素和設(shè)備像素
    • 在手機端,最開始1個CSS像素也是對應(yīng)著手機屏幕的1個物理像素,從iPhone4開始,蘋果公司推出了所謂的retina視網(wǎng)膜屏幕
    • 屏幕尺寸沒有變化,但是像素點卻多了一倍
    • 這就導(dǎo)致了在1個CSS像素等于1個物理像素的手機上,我們設(shè)置1個CSS像素只會占用1個物理像素
    • 而在1個CSS像素不等于1個物理像素的手機上,我們設(shè)置1個CSS像素就會占用2個物理像素
    • 所以仔細(xì)觀察會發(fā)現(xiàn)同樣是1像素但是在retina視網(wǎng)膜屏幕的手機上會粗一些

適配方案三

  • 如果設(shè)備像素和CSS像素一樣,那么無需處理不會帶來任何負(fù)面影響
  • 如果設(shè)備像素是CSS像素的2倍,那么我們只需將CSS像素縮小一半即可,但是有時候設(shè)備像素可能是CSS像素的3倍/4倍...
  • 獲取設(shè)備像素比DPR
    • DPR = 設(shè)備像素 / CSS像素
    • 在JS中我們可以通過window.devicePixelRatio 獲取當(dāng)前設(shè)備像素比
    • 通過<meta name="viewport">的initial-scale屬性來縮小
    • 注意點:縮放視口后視口大小會發(fā)生變化
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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