viewport理解

来源:http://www.cnblogs.com/Uncle-Keith/archive/2016/12/06/6137271.html
-Advertisement-
Play Games

viewport預備知識 dpr === dppx dpr:device pixel ratio 設備像素比 dppx:Number of dots per px unit 每像素有多少點 。 1dppx = 96dpi dpr = 設備物理像素 / 設備獨立像素 設備物理像素指顯示在移動端中實際的 ...


viewport預備知識

dpr === dppx

dpr:device pixel ratio 設備像素比

dppx:Number of dots per px unit 每像素有多少點 。 1dppx = 96dpi

dpr = 設備物理像素 / 設備獨立像素

設備物理像素指顯示在移動端中實際的像素。設備獨立像素是css中定義的像素。

比如說iphone4 的 dpr = 2,而此時設置border的寬度為1px(設備獨立像素),那麼此時設備物理像素為2px。所以在移動端上看到的是2px的邊框。

也就是說,n個獨立像素 = dpr * m 個物理像素。

window.innerWidth:保存可見視口,也就是屏幕上可見頁面區域的大小。移動IE不支持這個屬性。

document.body.clientWidth:度量佈局視口,即渲染後頁面的實際大小(與可見視口不同,可見視口只是頁面中的一小部分)。

viewport

viewport就是設備的屏幕上能用來顯示網頁的那一塊區域,具體一些,就是瀏覽器上用來顯示網頁的那部分區域。

預設情況下,移動設備上的viewport都是大於瀏覽器可視區域的。這種預設的設置是為了考慮到移動設備能夠正常訪問到為PC設計的網站。移動設備上的viewport預設情況下為980px或者1024px。

但移動設備上預設的viewport帶來的結果就是mobile瀏覽器在瀏覽網站時會出現橫向滾動條。因為移動設備上瀏覽器的viewport(visual viewport)是比移動設備預設的viewport(layout viewport)的寬度要小很多的。

layout viewport

移動端預設viewport。layout viewport與PC端瀏覽器的區域寬度相同。目的是使為PC端開發的頁面同樣可以顯示在移動端上。layout viewport可以通過document.body.clientWidth獲取。

layout viewport 不會隨著用戶雙擊屏幕時發生改變。下圖是double click之前的效果。

visual viewport

移動端瀏覽器實際的可視區域的寬度。預設情況下,layout viewport的寬度是大於visual viewport的。visual viewport可以通過window.innerWidth獲取。

visual viewport 會隨著用戶雙擊屏幕時發生改變。下圖是double click之後的效果。

ideal viewport

ideal viewport指的是首先不需要用戶縮放和橫向滾動條就能正常的查看網站的所有內容。然後,顯示的文字的大小是合適。比如一段14px大小的文字,不會因為在一個高密度像素的屏幕里顯示得太小而無法看清,理想的情況是這段14px的文字無論是在何種密度屏幕,何種解析度下,顯示出來的大小都是差不多的。當然,不只是文字,其他元素如圖片什麼的也是這個道理。

ppk把這個viewport叫做 ideal viewport,也就是第三個viewport——移動設備的理想viewport。

ideal viewport並沒有一個固定的尺寸,不同的設備擁有有不同的ideal viewport。iphone4和iphone3的ideal viewport寬度都是320px,無論它的屏幕寬度是320還是640,也就是說,在iphone4和iphone3中,css中的320px就代表它們屏幕的寬度。

meta標簽解析

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

width=device-width:layout viewport的寬度等於設備寬度,這裡的設備寬度指的是visual viewport,layout viewport = visual viewport 就可以得到 ideal viewport

initial-scale:初始縮放比例。這裡說的縮放比例是指layout viewport與visual viewport的比例。當比例為1時就表示兩個值相等,則變成了ideal viewport了。initial-scale成立的前提條件是必須禁止用戶縮放頁面的行為,因為visual viewport會隨著用戶縮放頁面而改變,那麼此時initial-scale的值就不准確了。

所以這裡可以width=device-width和initial-scale作用是等價的,都是用於控制layout viewport和visual viewport的值是否相等。

minimum-scale:允許用戶的最小縮放比例,為一個數字,可以帶小數。

maximum-scale:允許用戶的最大縮放比例,為一個數字,可以帶小數。

user-scalable:是否允許用戶進行縮放,值為"no"或"yes", no 代表不允許,yes代表允許。

經過我的測試,在移動前端開發meta標簽設置時,content屬性的必須設置的是user-scalablewidth=device-widthinitial-scale=1其中選一。單獨設置maximum-scale和minimum-scale是不起作用的。即

有效:<meta name='viewport' content='width=device-width, user-scalable=1'>

有效:<meta name='viewport' content='initial-scale=1, user-scalable=1'>

無效:<meta name='viewport' content='maximum-scale=1, minimum-scale=1, user-scalable=1'>

要把當前的viewport寬度設為ideal viewport的寬度,既可以設置 width=device-width,也可以設置 initial-scale=1,但這兩者各有一個小缺陷,就是iphone、ipad以及IE 會橫豎屏不分,通通以豎屏的ideal viewport寬度為準。所以,最完美的寫法應該是,兩者都寫上去,這樣就 initial-scale=1 解決了 iphone、ipad的毛病,width=device-width則解決了IE的毛病。



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

-Advertisement-
Play Games
更多相關文章
  • 第三章 DOM Scripting dom 文檔對象模型 類似的還有 bom 瀏覽器對象模型 。 要使用一個 對象首先要知道該對象存在的位置,比如 document 對象 它並不是被定義在 ECMAScript 中而是 dom 中。所以 本來你每次訪問 document就很慢。 引用: 文檔對象模型 ...
  • 瞭解移動web viewport的知識,主要是為了切圖時心中有數。本文主要圍繞一個問題:切圖時怎樣設置<meta name="viewport">相關參數?圍繞這個問題對viewport展開講解。 一、viewport【此處的viewport即layout viewport】概念 移動設備的view ...
  • var t='VARCHAR(5)' var pattern=/VARCHAR\(\d+\)/g pattern.test(t)//true test()返回false true 但是有哪位小伙伴能告訴我這個d是什麼意思嗎? 感謝感謝 ...
  • # 部署React+webpack工程的步驟ps:以Mac os系統做開發環境。因為npm現在使用灰常的慢,所以我使用淘寶境像cnpm。 1,準備工作: 先確保存已經安裝了node.js; 2,文件部署: (1),在終端中找到react-build項目的目錄,鍵入cnpm init初始化一個pack ...
  • 先貼出github地址:https://github.com/svgdotjs/svg.js(也就是原文檔的說明和文件的下載地址) 創建SVG文檔 此時已經可以運行,運行生成的html代碼如下: 也可以在生成SVG之前對該當前使用的瀏覽器進行判斷,是否支持SVG 此外關於鏈接還有N多個相關操作,可以 ...
  • Notification是在你的應用常規界面之外展示的消息。當app讓系統發送一個消息的時候,消息首先以圖表的形式顯示在通知欄。要查看消息的詳情需要進入通知抽屜(notificationdrawer)中查看。(notificationdrawer)都是系統層面控制的,你可以隨時查看,不限制於app。 ...
  • 1. ...
  • 組內非同步會與組外順序執行的事件爭搶資源 1)、創建一個組 2)、組內非同步ST1,DISPATCH_QUEUE_PRIORITY_DEFAULT 為預設優先順序 3)、組內非同步ST2,DISPATCH_QUEUE_PRIORITY_DEFAULT 為預設優先順序 4)、組內通知,獲取主線程。組內非同步全部執 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...