自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在移動(dòng)端別再用 100vh 了!試試這些全新的 CSS 單位

開發(fā) 前端
很多開發(fā)者不得不采用 JavaScript 的方式,如使用?window.innerHeight?來動(dòng)態(tài)修正布局,這種做法不僅繁瑣,還容易出錯(cuò),難以維護(hù)。幸運(yùn)的是,CSS 現(xiàn)在提供了更合適的解決方案。

開發(fā)者在設(shè)計(jì)移動(dòng)端布局時(shí),經(jīng)常遇到這樣的問題:

在桌面瀏覽器上一切正常,但當(dāng)頁(yè)面打開到手機(jī)上時(shí),精心設(shè)計(jì)的頁(yè)面卻總會(huì)出現(xiàn)奇怪的截?cái)?、異常滾動(dòng),甚至布局在瀏覽器工具欄隱藏或出現(xiàn)時(shí)發(fā)生位移。

這類問題的元兇通常都是 CSS 中的 height: 100vh。

雖然大多數(shù) CSS 教程都會(huì)推薦使用這個(gè)單位,但實(shí)際上,在移動(dòng)設(shè)備上,100vh 并不能提供理想的用戶體驗(yàn)。

問題到底出在哪?

在桌面環(huán)境下,100vh 很簡(jiǎn)單,代表瀏覽器視窗的全部高度。

但移動(dòng)端瀏覽器則不同,其頂部的地址欄和底部工具欄(瀏覽器 UI)是動(dòng)態(tài)變化的。當(dāng)用戶首次打開頁(yè)面時(shí),工具欄顯示;當(dāng)用戶開始滾動(dòng)時(shí),工具欄可能隱藏,視窗高度隨之變化。

然而,100vh 并不考慮這個(gè)動(dòng)態(tài)變化,它總是以瀏覽器最大可能的高度為基準(zhǔn),導(dǎo)致頁(yè)面實(shí)際顯示內(nèi)容可能被截?cái)?、溢出,用戶體驗(yàn)因此嚴(yán)重受損。

很多開發(fā)者不得不采用 JavaScript 的方式,如使用 window.innerHeight 來動(dòng)態(tài)修正布局,這種做法不僅繁瑣,還容易出錯(cuò),難以維護(hù)。

幸運(yùn)的是,CSS 現(xiàn)在提供了更合適的解決方案。

CSS 提供的新單位:svh、lvh 和 dvh

CSS 的 Values and Units Module Level 4 引入了專門應(yīng)對(duì)移動(dòng)端布局問題的新單位,分別為:

svh(Small Viewport Height,小視窗高度)

svh 代表視窗的最小高度,即瀏覽器工具欄完全展開并顯示時(shí)的高度。

適用于:

  • 必須確保始終在視窗內(nèi)的內(nèi)容,比如固定在頁(yè)面內(nèi)的按鈕、表單或底部導(dǎo)航。

使用示例:

height: 100svh;

lvh(Large Viewport Height,大視窗高度)

lvh 則表示視窗的最大高度,也就是瀏覽器工具欄完全隱藏時(shí)的高度。

適用于:

  • 希望用戶獲得完全沉浸式體驗(yàn)的頁(yè)面或交互設(shè)計(jì),比如全屏啟動(dòng)頁(yè)、歡迎界面等。

使用示例:

height: 100lvh;

dvh(Dynamic Viewport Height,動(dòng)態(tài)視窗高度)

dvh 是三者中最靈活實(shí)用的單位,會(huì)隨著瀏覽器工具欄的隱藏與出現(xiàn)自動(dòng)調(diào)整:

  • 工具欄顯示時(shí),接近 svh;
  • 工具欄隱藏時(shí),則接近 lvh。

換句話說,dvh 才是真正意義上在移動(dòng)端實(shí)現(xiàn)了開發(fā)者期待的動(dòng)態(tài)“100vh”功能。

使用示例:

height: 100dvh;

實(shí)際效果示例:可在移動(dòng)設(shè)備上打開以下示例鏈接,嘗試不同頁(yè)面間的滾動(dòng)交互:

?? 移動(dòng)端高度單位示例 https://v0-create-navigation-app.vercel.app/

實(shí)際項(xiàng)目案例

在一個(gè)實(shí)際的產(chǎn)品登陸頁(yè)項(xiàng)目中,開發(fā)者原本將 hero 部分設(shè)置為 height: 100vh。桌面效果完美,但在移動(dòng)端卻遇到了明顯問題:

  • 背景圖片溢出;
  • 關(guān)鍵的按鈕被 Safari 工具欄遮擋;
  • 滾動(dòng)過程中布局發(fā)生明顯位移。

當(dāng)開發(fā)者將 CSS 改為:

height: 100dvh;

上述問題即刻消失,無需任何 JavaScript 輔助或復(fù)雜的布局調(diào)整。這種方式已經(jīng)逐漸成為移動(dòng)端全屏布局的主流選擇。

為什么應(yīng)該盡快采用新單位?

  • 避免與瀏覽器 UI 反復(fù)博弈;
  • 減少工具欄顯示或隱藏時(shí)布局的抖動(dòng)與位移;
  • 無需再使用 JavaScript 輔助修復(fù)布局;
  • 提供更穩(wěn)定、可預(yù)測(cè)的用戶體驗(yàn),尤其在真實(shí)設(shè)備上尤為明顯。

瀏覽器兼容性情況

截至 2025 年,大部分主流瀏覽器(Chrome、Safari、Firefox 等)都已支持上述單位。

圖片圖片

什么時(shí)候用哪個(gè)單位?

  • 如果頁(yè)面內(nèi)容必須始終可見,確保布局永遠(yuǎn)不會(huì)被工具欄遮擋,使用:
height: 100svh;
  • 如果追求完全沉浸式全屏體驗(yàn)(如歡迎頁(yè)、啟動(dòng)屏),使用:
height: 100lvh;
  • 如果需要布局能在工具欄隱藏或顯示時(shí)動(dòng)態(tài)適應(yīng),自動(dòng)調(diào)整高度,最推薦使用:
height: 100dvh;

?? 立即實(shí)踐這些新單位吧!

移動(dòng)端布局再也無需忍受 100vh 帶來的種種問題。

開發(fā)者在新項(xiàng)目中立即采用上述單位,便能感受到立竿見影的體驗(yàn)提升——用戶也將明顯感受到差異。

責(zé)任編輯:武曉燕 來源: 大遷世界
相關(guān)推薦

2022-05-31 12:26:50

移動(dòng)響應(yīng)css

2022-08-24 10:03:18

CSS文本按鈕

2022-03-08 13:46:22

httpClientHTTP前端

2020-12-04 10:05:00

Pythonprint代碼

2020-12-02 11:18:50

print調(diào)試代碼Python

2021-06-09 06:41:11

OFFSETLIMIT分頁(yè)

2020-02-05 14:17:48

Python數(shù)據(jù)結(jié)構(gòu)JavaScript

2020-02-05 16:37:06

方括號(hào)Python方法

2020-07-17 07:15:38

數(shù)據(jù)庫(kù)ID代碼

2023-10-26 16:33:59

float 布局前段CSS

2021-05-25 09:30:44

kill -9Linux kill -9 pid

2021-01-29 11:05:50

PrintPython代碼

2020-12-03 09:05:38

SQL代碼方案

2020-12-15 08:06:45

waitnotifyCondition

2019-03-12 14:48:29

路由器XBOXPS4

2024-12-26 07:47:20

2022-01-27 07:48:37

虛擬項(xiàng)目Django

2022-03-10 10:12:04

自動(dòng)化腳本Bash

2024-06-12 13:54:37

編程語言字符串代碼

2022-10-27 21:34:28

數(shù)據(jù)庫(kù)機(jī)器學(xué)習(xí)架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)