基本概念:
螢幕尺寸:
螢幕對角線長度(英寸) 1英寸=2.54cm
螢幕分辨率:
橫縱向上像素點數(實體像素)
螢幕密度:
每英寸上實體像素個數
高清屏:
- 一種具備超高像素密度的液晶屏;
- 同樣大小螢幕上顯示實體像素點數由一個變為多個,
- 高清屏和普通屏相比,相同區域的實體像素點,高清屏是普通屏的4倍
視口尺寸:
代表橫縱向上css像素個數
4個像素 3個視口 2個操作 1個比例
4個像素:
實體像素:
(螢幕分辨率)裝置成像最小機關,橫縱向上像素點數
一個實體像素占據的實際螢幕尺寸,在不同裝置上是不一樣的。
css像素:
浏覽器的最小機關,抽象機關(css像素->實體像素)
一個css像素最終會轉換成實體像素在螢幕成像。
一個css像素到底占多少個實體像素,和誰有關?
螢幕特性 使用者縮放行為
* 不考慮使用者縮放:
沒有viewport:
這塊螢幕橫向上占據多少個實體像素
這塊螢幕橫向上占據多少個css像素
有viewport:
像素比=一個方向上占據一塊螢幕所需要的實體像素的個數 /
一個方向上占據一塊螢幕所需要的css像素的個數
* 考慮使用者縮放:
放大:1個css像素占據更多的實體像素
縮小:1個css像素占據更少的實體像素
裝置獨立像素:(也稱密度無關像素)
可認為計算機坐标系中的一個點,
這個點代表一個可以由程式使用的虛拟像素,然後由相關系統轉換為實體像素。
裝置對接css像素接口,一旦css像素與裝置獨立像素挂上鈎(width=device-width),
此時像素比才能發揮作用。
位圖像素:
圖像的最小機關
位圖像素與實體像素1:1時,螢幕才能清晰展示圖像
3個視口
布局視口:
(layout viewport)決定頁面布局
可以通過document.documentElement.clientWidth來擷取
視覺視口:
(visual viewport)決定使用者能看到什麼
一個css像素占據多少個實體像素和視覺視口有極大的關系
一個視覺視口包含的實體像素個數是确定的(分辨率)
一個視覺視口包含的css像素個數是不确定的,和使用者縮放行為有關
視覺視口的寬度可以通過window.innerWidth 來擷取,
但在Android 2, Oprea mini 和 UC 8中無法正确擷取。
理想視口:
裝置獨立像素所代表的值(加meta标簽之後);
隻有是專門為移動裝置開發的網站,才有理想視口這一說。
而且隻有當在頁面中加入viewport的meta标簽,理想視口才會生效。
<meta name="viewport" content="width=device-width" />
這一行代碼告訴我們,布局視口的寬度應該與理想視口的寬度一緻
2個操作(放大和縮小)
使用者的:隻影響視覺視口
系統的:影響視覺視口和布局視口
放大:
放大一個css像素的面積,視覺視口尺寸變小,
一個css像素包含的實體像素個數變多
縮小:
縮小一個css像素的面積,視覺視口尺寸變大,
一個css像素包含的實體像素個數變少
1個比例(像素比)
像素比:
(DPR)(devicePixelRatio)
實體像素/裝置獨立像素
可通過window.devicePixelRatio擷取(相容性問題嚴重)
像素比 =
一個方向上占據一塊螢幕所需要的實體像素的個數 /
一個方向上占據一塊螢幕所需要的裝置獨立像素的個數 ;
當寫上<meta width='device-width'>時,
css像素與裝置獨立像素連接配接起來。
即:
像素比 = 一個方向上占據一塊螢幕所需要的實體像素的個數 /
一個方向上占據一塊螢幕所需要的css像素的個數
3個意外
1.太大的元素
使用完美視口解決太大的元素超過視覺視口後不出滾動條的問題
完美視口:width=device-width initial-scale=1.0
2.width=device-width和initial-scale的沖突,誰大聽誰的
3.等比問題:
沒有加name為viewport的meta标簽
一個相同css像素大小的區域在不同的裝置是等比的,(像素比)
在不同的裝置上占據的實際實體大小(英寸)不一樣
頁面展示太小,使用者體驗不好
加name為viewport的meta标簽
一個相同css像素大小的區域在不同的裝置是不等比的,
在不同的裝置上占據的實際實體大小(英寸)是一樣的
等比是不是一個必須的需要?
百分百還原設計圖
---> 在不同裝置上要等比(文字要完美清晰的展示)
----> 必須加meta标簽(不等比)
---> 适配!!!!(加上meta标簽後也得等比)
了解
css像素能不能代表一個裝置的大小?如果能代表,這個值确不确定?
能 不确定
螢幕大小之間的比較應該使用絕對機關:螢幕尺寸(對角線長度)
實體像素與css像素比例的維護是誰在維護?維護規則是什麼?
視覺視口(1.決定使用者能看到什麼;2.包住整個布局視口)
實體像素:螢幕的分辨率
css像素: 布局視口尺寸
加name為viewport的meta标簽
像素比
沒有加name為viewport的meta标簽
布局視口尺寸 / 螢幕的分辨率
四個像素之間的關系
裝置獨立像素
實體/裝置像素
css像素
位圖像素
* 實體像素和裝置獨立像素:
像素比: 一個方向上占據一塊螢幕所需要的實體像素的個數 /
一個方向上占據一塊螢幕所需要的裝置獨立像素的個數 =2;
* 實體像素和位圖像素:1:1的時候才能完美清晰的展示
* 實體像素和css像素
普通屏:1比1
高清屏:
加name為viewport的meta标簽
像素比
沒有加name為viewport的meta标簽
布局視口尺寸 / 螢幕的分辨率
* css像素和裝置獨立像素
沒有加name為viewport的meta标簽:沒有關系
加name為viewport的meta标簽:可以認為css像素就是裝置獨立像素
* 注意@2x 和 @3x圖的使用
像素比 到底是什麼
* 像素比: 一個方向上占據一塊螢幕所需要的實體像素的個數 /
一個方向上占據一塊螢幕所需要的裝置獨立像素的個數 ;
* 當寫上<meta width='device-width'>時,
css像素與裝置獨立像素連接配接起來。即
像素比=一個方向上占據一塊螢幕所需要的實體像素的個數 /
一個方向上占據一塊螢幕所需要的css像素的個數
理想視口什麼時候出現? 像素比什麼時候有用?
加name為viewport的meta标簽
理想視口與裝置之間的關系
理想視口的尺寸:裝置獨立像素所代表的值
不同浏覽器在同一裝置上理想視口的尺寸可能會不一樣
一款浏覽器在不同裝置上理想視口的尺寸可能會不一樣
思考視口的主線
本質上三個視口的實體尺寸就是螢幕尺寸
在不一樣的情況下,各個視口所包含的css像素的個數是不一樣的
布局視口包含的css像素的個數
980 1024 (浏覽器不一樣)
視覺視口包含的css像素的個數
預設情況(css像素和實體像素1:1)---> 螢幕的分辨率
移動端浏覽器初始化的時候(視覺視口必須要包住布局視口)
---> 布局視口包含的css像素的個數就是視覺視口所包含的
使用者縮放(隻影響視覺視口)
放大---> 視覺視口包含的css像素的個數變少
縮小---> 視覺視口包含的css像素的個數變多
理想視口包含的css像素的個數
裝置獨立像素所代表的值
縮放
* pc端的縮放:會改變元素的布局(布局視口)
* 移動端(縮放隻改變視覺視口内css像素的個數)
* 放大
使css像素變大,一個css像素所包含的實體像素的個數變多,元素變的更大
視覺視口内,css像素的個數變少
* 縮小
使css像素變小,一個css像素所包含的實體像素的個數變少,元素變的更小
視覺視口内,css像素的個數變多
怎麼擷取三個視口的值
* 布局視口:(基本沒有相容性問題)
document.documentElement.clientWidth
* 視覺視口:(有一點相容性問題)
window.innerWidth
* 理想視口:(相容性問題極大)
screen.width
完美視口以及meta标簽
過大的元素--->完美視口
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
哪些操作會影響布局視口
width=device-width
initial-scale
重力感應(橫豎屏切換)
等比問題
沒有加name為viewport的meta标簽
一個相同css像素大小的區域在不同的裝置是等比的,
在不同的裝置上占據的實際實體大小(英寸)不一樣
加name為viewport的meta标簽
一個相同css像素大小的區域在不同的裝置是不等比的,
在不同的裝置上占據的實際實體大小(英寸)是一樣的
等比是不是一個必須的需要?
百分百還原設計圖 ---> 在不同裝置上要等比(文字要完美清晰的展示)
----> 必須加meta标簽(不等比)
---> 适配!!!!(加上meta标簽後也得等比)
meta标簽
<meta name="viewport" content="width=device-width,initial-scale=1.0,
minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />