移動端適配必須掌握的基本概念和適配方案

来源:https://www.cnblogs.com/jofun/archive/2020/07/21/13358140.html
-Advertisement-
Play Games

隨著技術的發展,移動設備越來越流行,並且不同設備間屏幕尺寸和屏幕像素的差異,移動端開發麵臨著多解析度適配的問題。 ...


隨著技術的發展,移動設備越來越流行,並且不同設備間屏幕尺寸和屏幕像素的差異,移動端開發麵臨著多解析度適配的問題。

基本概念

響應式開發本質時針對多種屏幕做適配,在實際開發中,通常情況下時針對主流的設備進行適配。在開發前,必須掌握幾個基本概念:

  • 物理像素:即屏幕的實際像素點。像素是屏幕設備的最小顯示單元,如 iPhone4 的屏幕解析度是640x960像素,即 iPhone4 的屏幕由橫向640個像素和縱向960個像素排列組成。
  • 設備獨立像素:即邏輯像素,用於定義應用的 UI(UI即用戶界面,這裡指的是定義應用界面的各個元素的大小)。蘋果 iPhone4 首次提出了 Retina Display(視網膜屏幕)的概念,在 iPhone4 使用的視網膜屏幕中,把 2x2 個像素當 1 個物理像素使用,即使用 2x2 個像素顯示原來 1 個物理像素顯示的內容,從而讓 UI 顯示更精緻清晰,這 2x2 個像素即使邏輯像素。
  • 屏幕像素比(device pixel ratio 簡稱 dpr):即物理像素與邏輯像素的比值。

常見設備寬高:

設備名稱 物理像素 設備獨立像素 屏幕像素比
iPhone4 640x960 320x480 2
iPhone6,6S,7 750x1334 375x667 2
iPhone6 Plus,6S Plus,7 Plus 1080x1920 414x736 3
Galaxy S4, S5 1080x1920 360x640 2
Galaxy Note4 1440x2560 360x640 4
iPad mini 2, 3 1536x2048 768x1024 2

視口(Viewport)

視口(Viewport)是指當前可見的電腦圖形區域,在瀏覽器中,是指能用來顯示網頁的區域。視口當前可見的部分叫做可視視口(visual viewport)。整個網頁所占據的區域(包括可視也包括不可視的區域)叫做佈局視口(layout viewport)。當可視視口比佈局視口小時,瀏覽器網頁就會出現橫向滾動條,以支持用戶瀏覽整個網頁的內容。

通常情況下,大多數移動設備的 Viewport(一般指佈局視口)的寬度都是 980 像素,而可視視口(即設備獨立像素)通常都小於 980 像素。為了禁止出現橫向滾動條,不得不設置設備的 Viewport。通過在 Head 元素中使用 Meta 標簽來設置 Viewport 屬性。常用的 Viewport 設置如下:

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">

Viewport 屬性:

屬性 含義 取值
width 定義視口的寬度,單位為像素 正整數或 device-width(設備的寬度)
height 定義視口的高度,單位為像素 正整數或 device-height(設備的高度)
initial-scale 定義初始縮放比例 整數或小數
maximum-scale 定義允許用戶縮放到的最大比例 整數或小數
minimum-scale 定義允許用戶縮放到的最小比例 整數或小數
user-scalable 定義是否允許用戶縮放 yes或no

適配方案

對於移動端適配的方案,市面上有很多種。細心觀察會發現,實際上這些適配方案是基於兩種不同的設計思想而產生的。一種是通過縮放處理屏蔽屏幕尺寸和解析度的影響,保證內容元素數量的一致性。這種做法產生的結果是屏幕尺寸越大的設備顯示的內容元素越大,反之亦然。另一種是不進行縮放處理,保證內容元素大小的一致性。這種做法產生的結果是屏幕尺寸越大的設備在橫向上顯示的內容元素越多,反之亦然。

rem 適配

rem 適配是縮放處理設計思想的典型代表。rem 是一個相對單位,它永遠相對於根元素(html)的字體大小,這個特性方便了統一管理元素的大小,非常適合用來處理佈局。rem 適配通常採用如下的 viewport 設置:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1">

如何合理設置 rem 的大小呢?通常將頁面寬度進行 10 等分,即:

const rem = document.documentElement.clientWidth / 10

這樣,rem 的大小完全是隨屏幕正比變化,就能根據設計稿尺寸換算頁面元素和字體的大小。以常用的 750px 設計稿尺寸為例,假設設計稿的某個字體大小是 40px,換算成 rem 應該為 40 / 75 = 0.53333rem。當然這樣計算很麻煩,可以選擇使用構建工具postcss-pxtorem簡化這些工作。

註意:並非所有單位都需要轉換成 rem,通常只對需要等比縮放的元素進行 rem 換算,對於不需要縮放的元素,比如邊框陰影,使用 px 等其他單位。實際開發中,應該以 rem 單位為基礎,同時結合其他單位協同工作。

vw 適配

vw 是一個相對於 viewport 的單位,100vw 就等於 viewport 的寬度。vw 適配同樣是一個縮放處理設計思想的適配方案,得益於現代瀏覽器對 vw 單位的良好支持性而流行,它是比 rem 適配更優秀的適配方案。vw 適配通常採用如下的 viewport 設置:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1">

vw 適配如何換算元素大小呢?使用公式:(元素大小 / 設計稿大小)* 100vw 將元素大小轉換為 vw 單位的大小。以常用的 750px 設計稿尺寸為例,假設設計稿的某個字體大小是 40px,換算成 vw 單位大小應該為 (40 / 750)* 100vw = 5.33333vw。同樣可以選擇使用構建工具postcss-px-to-viewport簡化工作流程。

vw 適配和 rem 適配出自同一種設計思想,它們極其相似,vw 適配同樣需要結合其他單位協同工作。

彈性盒(Flexbox)適配

彈性盒(CSS Flexible Box Layout Module 簡稱 Flexbox)是一種用於在單個維度(行或列)中顯示項目的佈局模型。當頁面需要適應不同的屏幕大小以及設備類型時確保元素擁有恰當的行為的佈局方式,提供一種更加有效的方式來對一個容器中的子元素進行排列、對齊和分配空白空間。Flexbox 佈局的兩個基本概念:

  • 容器:彈性佈局的父元素(display=flex的元素)。
  • 項目:彈性佈局容器中的每一個子元素。

彈性盒適配就是採用了 Flexbox 佈局模型的適配方案,這種適配方案通常使用如下的 viewport 設置:

<meta name="viewport" content="width=device-width, initial-scale=1">

使用彈性盒適配的優點是不需要進行單位轉換,因為其不需進行縮放處理,因此通常情況下都使用 px 單位。彈性盒適配的基本原則是:

  • 內容流式:即彈性項目(彈性佈局容器中的每一個子元素)的填充內容使用流式佈局。
  • 佈局彈性:即涉及元素排列、對齊和空間分配時,使用彈性盒進行佈局。

目前,沒有完美的適配方式。實際開發中,應根據項目的需求和團隊的素質選用合適的方案。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文更新於2020-04-05,使用MySQL 5.7,操作系統為Deepin 15.4。 使用連接池 對於訪問資料庫來說,建立連接的代價比較昂貴。 減少對MySQL的訪問 應用應避免對同一數據做重覆檢索,減少對資料庫無謂的重覆訪問。 在應用端增加CACHE層可減輕資料庫的負擔。 負載均衡 負載均衡 ...
  • 一、使用免密碼登錄 1.使用 #find / -name my.cfg 找到mysql配置文件 2.vim /etc/mysql/my.cfg (我的配置文件是這個路徑,每個人的路徑可能有所不同,用find查詢後再編輯) 在[mysqld]設置下添加skip-grant-tables參數(跳過許可權列 ...
  • 對於sql優化,除了索引之外,執行計劃和統計信息是無法繞開的一個話題,如果sql優化(所有的RDBMS)脫離了統計信息的話就少了一個為什麼的過程,味道就感覺少了一大半。剛接觸Postgresql,粗淺地學習總結一下Postgresql相關的統計信息。 postgresql 進程模型 開始之前,有必要 ...
  • 目錄結構 目錄名作用 bin 存放系統腳本 conf 存放配置文件 contrib zk附加功能支持 dist-maven maven倉庫文件 docs zk文檔 lib 依賴的第三方庫 recipes 經典場景樣例代碼 src zk源碼 conf 目錄 conf 目錄用來存檔配置文件,zoo.cf ...
  • kafka的配置分為 broker、producter、consumer三個不同的配置 一 、BROKER 的全局配置 最為核心的三個配置 broker.id、log.dir、zookeeper.connect 。 系統 相關 ##每一個broker在集群中的唯一標示,要求是正數。在改變IP地址,不 ...
  • 資料庫索引,相信大家都不陌生吧。 索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定信息。作為輔助查詢的工具,合理的設計索引能很大程度上減輕db的查詢壓力,db我們都知道,是項目最核心也是最薄弱的地方,如果壓力太大很容易產生故障,造成難以預計的影響。所以,不管是日 ...
  • 太累了,不想來回覆制粘貼,多麼想有一鍵發佈到各大寫作平臺上的功能。 說重點,Golang學習系列第五天: Golang和PostgreSQL開發 RESTful API:https://blog.csdn.net/dong19891210/article/details/107424704 ...
  • 7 種數據類型分為簡單和複雜兩種 簡單數據類型: number, string, boolean, null, undefined, symbol 簡單數據類型存儲方式:直接存放在Stack(棧)里 註意:string可以存在棧也可存在堆 複雜數據類型:object(包括array和function ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...