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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...