meta viewport 是用來做什么的缅茉?怎么用?

題目同樣是 面試 會問到的一個常見問題之一男摧,同樣我們剛開始還是先 科普 一下 前置知識

  • 設(shè)備像素(device pixels):物理像素蔬墩,顯示器的最小物理單位。
    這里的一個像素耗拓,并不一定是一個小正方形區(qū)塊拇颅,也沒有標(biāo)準(zhǔn)的寬高,知識用于顯示豐富色彩的一個 “點(diǎn)” 而已乔询。
  • 設(shè)備獨(dú)立像素(device independent pixels):獨(dú)立于設(shè)備的像素樟插。
    有一個非嚴(yán)謹(jǐn)?shù)恼f法,分辨率指的就是設(shè)備獨(dú)立像素竿刁』拼福可以通過 window.screen.width / window.screen.height 查看。平時我們所說的 iPhone X 邏輯分辨率 375 × 812 指的就是設(shè)備獨(dú)立像素食拜。chrome 檢查元素模擬調(diào)試手機(jī)設(shè)備時顯示如 375x667 和 320x480 都是設(shè)備獨(dú)立像素鸵熟。
  • 像素分辨率:以手機(jī)屏幕為例,iPhone X 像素分辨率為 1125 × 2436负甸,是指屏幕橫向能顯示 1125 個物理像素點(diǎn)流强,縱向能顯示 2436 個物理像素點(diǎn)。通常所說的 4K 顯示屏指的是 4096 × 2160呻待。
  • PPI(pic per inch):每英寸的物理像素?cái)?shù)煮盼。以尺寸為 5.8 英寸(屏幕對角線長度)、分辨率為 1125 × 2436 的 iPhone X 為例带污, ppi = Math.sqrt(1125*1125 + 2436*2436) / 5.8僵控,值為 463 ppi。
  • CSS 像素:瀏覽器使用的單位鱼冀,用來精確度量網(wǎng)頁上的內(nèi)容报破,如:div { width: 100px; }悠就。在一般情況下(頁面縮放比為 1),1 個 CSS 像素等于 1 個設(shè)備獨(dú)立像素充易。
  • devicePixelRatio:設(shè)備物理像素和設(shè)備獨(dú)立像素的比例梗脾。window.devicePixelRatio = 物理像素 / 設(shè)備獨(dú)立像素
    當(dāng)設(shè)備像素比的比率不為 1 時盹靴,CSS 像素和設(shè)備獨(dú)立像素不再對應(yīng)炸茧。所以如果頁面放大 200%,1 個 CSS 像素等于 4 個設(shè)備獨(dú)立像素稿静。
  • 窗口尺寸(CSS 像素)
    包含滾動條:window.innerWidth and window.innerHeight
    不包含滾動條:document.documentElement.clientWidth and document.documentElement.clientHeight
  • 獲取 html 元素尺寸
    document.documentElement.offsetWidth and document.documentElement.offsetHeight
  • CSS 中的 1px 并不等于設(shè)備的 1px
    CSS 中的像素是一個抽象單位梭冠,在不同的設(shè)備或者不同的環(huán)境中,CSS 中的 1px 所代表的設(shè)備物理像素是不同的改备。在為桌面瀏覽器設(shè)計(jì)網(wǎng)頁時控漠,無需對此考慮太多(往往 CSS 中的一個像素就是對應(yīng)著電腦屏幕的一個物理像素),但是在移動設(shè)備上悬钳,必須搞清楚這一點(diǎn)盐捷。
    1.在早先的移動設(shè)備中,屏幕像素密度都比較低默勾,一個像素確實(shí)是等于一個屏幕物理像素碉渡;后來隨著技術(shù)的發(fā)展,移動設(shè)備的屏幕像素密度越來越高母剥,而我們的屏幕尺寸并沒有增大多少滞诺,這就意味著差不多同樣大小的屏幕上,像素多了一倍甚至不止一倍之多媳搪。
    2.會引起不同的原因還可能是因?yàn)橛脩艨s放铭段,當(dāng)用戶將頁面放大一倍,CSS 中的 1px 所代表的物理像素也會增加一倍秦爆。

viewport

移動設(shè)備上的 viewport 是設(shè)備屏幕上用來顯示網(wǎng)頁的那部分區(qū)域序愚,再具體一點(diǎn)就是瀏覽器上用來顯示網(wǎng)頁的那部分區(qū)域,但 viewport 又不局限于瀏覽器可視區(qū)域的大小等限,它可能比瀏覽器的可視區(qū)域大爸吮,也可能比瀏覽器的可視區(qū)域小。在默認(rèn)情況下望门,移動設(shè)備上的 viewport 都是大于瀏覽器可視區(qū)域的形娇,這是因?yàn)橐苿釉O(shè)備的分辨率相對于PC來說都比較小,所以為了能在移動設(shè)備上正常顯示那些為PC瀏覽器設(shè)計(jì)的網(wǎng)站筹误,移動設(shè)備上的瀏覽器都會把自己默認(rèn)的 viewport 設(shè)為 980px 或 1024px(也可能是其它值桐早,由設(shè)備本身決定),但后果是瀏覽器出現(xiàn)橫向滾動條,因?yàn)闉g覽器可視區(qū)域的寬度比默認(rèn)的 viewport 的寬度小哄酝。

荷蘭前端大神 PPK 關(guān)于三個 viewport 的理論

移動設(shè)備上的瀏覽器認(rèn)為自己必須能讓所有的網(wǎng)站都正常顯示友存,即使是那些并不為移動設(shè)備設(shè)計(jì)的網(wǎng)站。因?yàn)橐苿釉O(shè)備的屏幕都不是很寬陶衅,所以那些為桌面瀏覽器設(shè)計(jì)的網(wǎng)站放到移動設(shè)備上顯示時屡立,如果以瀏覽器的可視區(qū)域作為 viewport 的話,必然會因?yàn)橐苿釉O(shè)備的 viewport 太窄而擠作一團(tuán)搀军,甚至布局什么的都會亂掉膨俐。

現(xiàn)如今手機(jī)分辨率越來越高,比如:768×1024 甚至 1080×1920 等等罩句,分辨率這么高焚刺,用來顯示為桌面瀏覽器設(shè)計(jì)的網(wǎng)站有沒有問題呢?答案是肯定的的止,在前面科普前置知識的時候檩坚,我們已經(jīng)知道了着撩,1px CSS 像素并不一定代表屏幕上的 1px诅福,分辨率越大,CSS 中的 1px 代表的物理像素就會越多拖叙,devicePixelRatio 的值也越大氓润。以為分辨率增大了,但是屏幕尺寸并沒有變大多少薯鳍,必須讓 CSS 中的 1px 代表更多的物理像素咖气,才能讓 1px 的東西在屏幕上的大小與那些低分辨率的設(shè)備差不多,步然就會因?yàn)樘∨栋《床磺濉?/p>

如果把移動設(shè)備上的瀏覽器的可視區(qū)域設(shè)為 viewport 的話挖滤,某些網(wǎng)站就會因?yàn)?viewport 太窄而顯示錯亂崩溪。所以在默認(rèn)情況下,移動設(shè)備將 viewport 設(shè)為一個較寬的值斩松,比如 980px伶唯,這樣的話即使是那些為桌面瀏覽器設(shè)計(jì)的網(wǎng)站也能在移動設(shè)備瀏覽器顯示正常了,這個默認(rèn)的 viewport 值叫做 layout viewport惧盹。document.documentElement.clientWidth

layout viewport 的寬度是大于瀏覽器可視區(qū)域?qū)挾鹊娜樾遥晕覀冃枰粋€ viewport 來代表瀏覽器可視區(qū)域的大小:visual viewport钧椰。window.innerWidth Android 2,Oprea mini 和 UC 8 中無法獲取粹断。

移動網(wǎng)絡(luò)普及大眾,現(xiàn)在越來越多的網(wǎng)站都會為移動設(shè)備進(jìn)行單獨(dú)的設(shè)計(jì)嫡霞,此時必須有一個能夠完美適配移動設(shè)備的 viewport瓶埋。

完美適配:

  • 不需要用戶縮放以及滾動橫向滾動條就能正常查看網(wǎng)站內(nèi)容;
  • 顯示的文字大小合適,不會因?yàn)樵谝粋€高密度像素的屏幕顯示得太小而無法看清(圖片亦是如此)养筒。

瀏覽器所需要的完美適配 viewport狡汉,PPK 將它稱之為 ideal viewport(移動設(shè)備的理想 viewport)。它沒有固定尺寸闽颇,因?yàn)樗膶挾染褪且苿釉O(shè)備的屏幕寬度盾戴,不同的設(shè)備擁有不同的 ideal viewport。

無論在何種分辨率的屏幕下兵多,針對 ideal viewport 設(shè)計(jì)的網(wǎng)站尖啡,不需要用戶手動縮放,也不需要出現(xiàn)橫向滾動條剩膘,都可以完美得將頁面呈現(xiàn)給用戶衅斩。

meta viewport

要實(shí)現(xiàn) ideal viewport ,需要用到 meta 標(biāo)簽怠褐。

在 head 標(biāo)簽中加入 viewport 的 meta 標(biāo)簽:

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

該meta標(biāo)簽的作用是讓當(dāng)前viewport的寬度等于設(shè)備的寬度畏梆,同時不允許用戶手動縮放。當(dāng)然maximum-scale=1.0, user-scalable=0不是必需的奈懒,是否允許用戶手動播放根據(jù)網(wǎng)站的需求來定奠涌,但把width設(shè)為width-device基本是必須的,這樣能保證不會出現(xiàn)橫向滾動條磷杏。

meta viewport 的六個屬性

  • width:控制 viewport 的大小溜畅,可以給它指定一個值(正整數(shù)),或者是一個特殊的值(如:device-width 設(shè)備獨(dú)立像素寬度极祸,單位縮放為 1 時)慈格;
  • initial-scale:初始縮放比例,即當(dāng)頁面第一次加載時的縮放比例遥金,為一個數(shù)字(可以帶小數(shù))浴捆;
  • maximum-scale:允許用戶縮放到的最大比例,為一個數(shù)字(可以帶小數(shù))稿械;
  • minimum-scale:允許用戶縮放到的最小比例选泻,為一個數(shù)字(可以帶小數(shù));
  • user-scalable:是否允許用戶手動縮放溜哮,值為 "no"(不允許) 或 "yes"(允許)滔金;
    • height:與 width 相對應(yīng)(很少使用)。

總結(jié)

meta viewport 是用于適配移動設(shè)備的茂嗓,為了使不管是什么寬度的頁面都能在移動設(shè)備端得到完美適配(不需要用戶縮放和滾動橫向滾動條并且字體圖片等顯示正常)餐茵。

如果不知道設(shè)備的理想寬度就用特殊值 device-width,同時 initial-scale=1 來的到一個理想的 viewport (ideal viewport)述吸。

實(shí)際上忿族,現(xiàn)在市面上雖然有那么多不同種類不同品牌不同分辨率的手機(jī)锣笨,但它們的理想viewport寬度歸納起來無非也就 320、360道批、384错英、400等幾種,都是非常接近的隆豹,理想寬度的相近也就意味著我們針對某個設(shè)備的理想viewport而做出的網(wǎng)站椭岩,在其他設(shè)備上的表現(xiàn)也不會相差非常多甚至是表現(xiàn)一樣的。


參考:

移動前端開發(fā)之viewport的深入理解

meta viewport 是做什么用的璃赡,怎么寫判哥?

viewport

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碉考,隨后出現(xiàn)的幾起案子塌计,更是在濱河造成了極大的恐慌,老刑警劉巖侯谁,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锌仅,死亡現(xiàn)場離奇詭異,居然都是意外死亡墙贱,警方通過查閱死者的電腦和手機(jī)热芹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫩痰,“玉大人剿吻,你說我怎么就攤上這事窍箍〈模” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵椰棘,是天一觀的道長纺棺。 經(jīng)常有香客問我,道長邪狞,這世上最難降的妖魔是什么祷蝌? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮帆卓,結(jié)果婚禮上巨朦,老公的妹妹穿的比我還像新娘。我一直安慰自己剑令,他們只是感情好糊啡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吁津,像睡著了一般棚蓄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天梭依,我揣著相機(jī)與錄音稍算,去河邊找鬼。 笑死役拴,一個胖子當(dāng)著我的面吹牛糊探,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播河闰,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侧到,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淤击?” 一聲冷哼從身側(cè)響起匠抗,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎污抬,沒想到半個月后汞贸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡印机,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年矢腻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片射赛。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡多柑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楣责,到底是詐尸還是另有隱情竣灌,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布秆麸,位于F島的核電站初嘹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沮趣。R本人自食惡果不足惜屯烦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望房铭。 院中可真熱鬧驻龟,春花似錦、人聲如沸缸匪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豪嗽。三九已至谴蔑,卻和暖如春豌骏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隐锭。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工窃躲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钦睡。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓蒂窒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荞怒。 傳聞我的和親對象是個殘疾皇子洒琢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容