如何使用 CSS 使 div 標籤的高度佔據瀏覽器視窗的 100%?


在進行 Web 開發專案時,經常會遇到需要使 div 標籤的高度佔據整個瀏覽器視窗的情況。這在建立全頁面佈局、英雄區域或需要跨越整個垂直空間的元素時尤其有用。

但是,由於 CSS 盒模型的特性以及高度屬性的預設行為,使用 CSS 實現此效果可能有點棘手。

在本文中,我們將探討使用 CSS 使 div 標籤高度佔據瀏覽器視窗 100% 的不同方法。我們將討論各種 CSS 方法,併為每種方法提供實用的程式碼示例。

使用 Height: 100%

使 div 標籤高度達到 100% 的一種方法是使用 `height: 100%` 屬性。但是,需要注意的是,這種方法存在某些挑戰和侷限性。

透過在 div 元素上設定 `height: 100%`,你是在指示它佔據其父元素高度的 100%。當父元素在 CSS 中顯式定義了固定高度時,這很好用。但是,當涉及到瀏覽器視窗本身時,html 和 body 元素(div 標籤的父元素)預設情況下沒有固定高度。

要使 div 標籤填充整個瀏覽器視窗的高度,你需要確保父元素 (html 和 body) 的高度為 100%。你可以透過應用以下 CSS 來實現:

示例

<!DOCTYPE html>
<html>
<head>
   <style>
      html, body {
         height: 100%;
         margin: 0;
         padding: 0;
      }   
      .container {
         height: 100%;
         background-color: lightgray;
         display: flex;
         align-items: center;
         justify-content: center;
      }   
      .content {
         width: 300px;
         height: 200px;
         background-color: white;
         border: 1px solid gray;
      }
   </style>
</head>
<body>
   <div class="container">
      <div class="content">
         <!-- Content goes here -->
      </div>
   </div>
</body>
</html>

一旦父元素的高度為 100%,在目標 div 標籤上設定 `height: 100%` 將使其擴充套件到填充整個瀏覽器視窗的高度。

但是,使用此方法時需要考慮以下幾點:

  • 滾動如果 div 內的內容超過瀏覽器視窗的高度,將出現捲軸以允許滾動瀏覽內容。

  • 巢狀元素如果 div 標籤巢狀在其他具有百分比高度的元素中,則需要確保所有父元素的高度都為 100%,才能使該方法正常工作。

  • 相容性較舊版本的 Internet Explorer (IE) 可能無法正確支援 `height: 100%` 方法,因此務必在不同瀏覽器中測試你的實現。

雖然 `height: 100%` 方法在某些情況下可以是一個簡單的解決方案,但它有其侷限性,可能需要額外的考慮。在接下來的部分中,我們將探討提供更多靈活性和更好瀏覽器支援的替代技術。

方法一:使用 Height: 100vh

使 div 標籤高度佔據瀏覽器視窗 100% 的另一種方法是使用 `height: 100vh` 屬性。vh 單位表示視口高度的百分比。

透過在 div 元素上設定 `height: 100vh`,你是在指示它佔據視口高度的 100%,而不管其父元素如何。這種方法提供了一種更直接的解決方案,無需顯式設定父元素的高度。

示例

這是一個演示此技術的完整程式碼片段:

<!DOCTYPE html>
<html>
<head>
   <style>
      .container {
         height: 100vh;
         background-color: lightgray;
         display: flex;
         align-items: center;
         justify-content: center;
      }   
      .content {
         width: 300px;
         height: 200px;
         background-color: white;
         border: 1px solid gray;
      }
   </style>
</head>
<body>
   <div class="container">
      <div class="content">
         <!-- Content goes here -->
      </div>
   </div>
</body>
</html>

在此程式碼片段中,我們有一個與之前類似的 HTML 結構,一個父 div 具有 "container" 類,一個目標 div 具有 "content" 類。應用 CSS 樣式以達到預期效果。

主要區別在於我們在 "container" 類上設定了 `height: 100vh`。這使得容器 div 擴充套件到視口的全高。"content" div 繼承該高度,並將延伸以填充視口的整個高度。

透過使用 `height: 100vh` 方法,你可以輕鬆地實現全高 div,而無需顯式設定父元素的高度。

方法二:使用 Flexbox

Flexbox 是一個功能強大的 CSS 佈局模組,它提供了一種靈活的方式來分配和對齊容器內的元素。它也可以用來為 div 標籤實現 100% 的高度。

利用 Flexbox 屬性,我們可以建立一個擴充套件以填充可用垂直空間的容器。這是一個演示此技術的完整程式碼片段:

示例

<!DOCTYPE html>
<html>
<head>
   <style>
      .container {
         display: flex;
         flex-direction: column;
         height: 100vh;
         background-color: lightgray;
      }   
      .content {
         flex-grow: 1;
         background-color: white;
         border: 1px solid gray;
         margin: 20px;
      }
   </style>
</head>
<body>
   <div class="container">
      <div class="content">
         <!-- Content goes here -->
      </div>
   </div>
</body>
</html>

在此程式碼片段中,我們有一個父 div 元素,其類為 "container",以及一個子 div,其類為 "content"。應用 CSS 樣式以利用 Flexbox 實現 100% 的高度。

透過在 "container" 類上設定 `display: flex`,我們建立了一個 Flexbox 容器。新增 `flex-direction: column` 可確保子元素垂直堆疊。`height: 100vh` 屬性使容器擴充套件到填充視口的全高。

為了使 "content" div 佔據剩餘的垂直空間,我們設定 `flex-grow: 1`。這指示 "content" 元素增長並填充 Flexbox 容器內的可用空間。

方法三:使用 CSS Grid

CSS Grid 是另一個功能強大的佈局模組,它允許你輕鬆建立複雜的基於網格的佈局。它也可以用來為 div 標籤實現 100% 的高度。

利用 CSS Grid,我們可以建立一個擴充套件以填充可用垂直空間的網格容器。這是一個演示此技術的完整程式碼片段:

示例

<!DOCTYPE html>
<html>
<head>
   <style>
      .container {
         display: grid;
         grid-template-rows: 1fr;
         height: 100vh;
         background-color: lightgray;
      }   
      .content {
         background-color: white;
         border: 1px solid gray;
         margin: 20px;
      }
   </style>
</head>
<body>
   <div class="container">
      <div class="content">
         <!-- Content goes here -->
      </div>
   </div>
</body>
</html>

在此程式碼片段中,我們有一個父 div 元素,其類為 "container",以及一個子 div,其類為 "content"。應用 CSS 樣式以利用 CSS Grid 實現 100% 的高度。

透過在 "container" 類上設定 `display: grid`,我們建立了一個 CSS Grid 容器。`grid-template-rows: 1fr` 屬性將行模板設定為 1fr,這意味著可用空間在行之間平均分配。這確保 "content" div 佔據容器的全高。

`height: 100vh` 屬性使容器擴充套件到填充視口的全高。

方法四:使用絕對定位

使 div 標籤高度佔據瀏覽器視窗 100% 的另一種方法是使用絕對定位。透過絕對定位 div 元素並將其 `top`、`bottom`、`left` 和 `right` 屬性設定為 0,我們可以使其擴充套件到填充整個視口的高度。

示例

這是一個演示此技術的完整示例程式碼片段:

<!DOCTYPE html>
<html>
<head>
   <style>
      .container {
         position: relative;
         height: 100vh;
         background-color: lightgray;
      }   
      .content {
         position: absolute;
         top: 0;
         bottom: 0;
         left: 0;
         right: 0;
         background-color: white;
         border: 1px solid gray;
         margin: 20px;
      }
   </style>
</head>
<body>
   <div class="container">
      <div class="content">
         <!-- Content goes here -->
      </div>
   </div>
</body>
</html>

在此程式碼片段中,我們有一個父 div 元素,其類為 "container",以及一個子 div,其類為 "content"。應用 CSS 樣式以利用絕對定位實現 100% 的高度。

透過在 "container" 類上設定 `position: relative`,我們為子 div 建立了一個定位上下文。這允許我們相對於其父元素絕對定位 "content" div。

`top: 0`、`bottom: 0`、`left: 0` 和 `right: 0` 屬性分別將 "content" div 定位在其父元素的頂部、底部、左側和右側邊緣。這導致它拉伸並填充容器的整個高度。

方法五:結合使用 Flexbox 和 Overflow

在某些情況下,你可能會遇到 div 內的內容超過視口高度的情況。在這種情況下,你可以結合使用 Flexbox 和 overflow 屬性來確保 div 保持 100% 的高度,同時允許為溢位的內容滾動。

示例

這是一個演示此技術的完整執行示例程式碼片段:

<!DOCTYPE html>
<html>
<head>
   <style>
      .container {
         display: flex;
         flex-direction: column;
         height: 100vh;
         background-color: lightgray;
      }   
      .content {
         flex-grow: 1;
         background-color: white;
         border: 1px solid gray;
         margin: 20px;
         overflow: auto;
      }
   </style>
</head>
<body>
   <div class="container">
      <div class="content">
         <!-- Content goes here -->
      </div>
   </div>
</body>
</html>

在此程式碼片段中,我們有一個父 div 元素,其類為 "container",以及一個子 div,其類為 "content"。應用 CSS 樣式以利用 Flexbox 並處理溢位。

與方法二類似,我們在 "container" 類上設定 `display: flex` 以建立一個 Flexbox 容器。`flex-direction: column` 屬性確保子元素垂直堆疊。

透過設定“content”類的`flex-grow: 1`,div會擴充套件以佔據容器中剩餘的垂直空間。此外,我們使用`overflow: auto`,如果內容超過div的高度,則可以啟用垂直滾動。

結論

在CSS中實現`

`標籤的100%高度可以使用多種技術。透過使用CSS屬性,如`height: 100vh`、Flexbox、CSS Grid和絕對定位,我們可以建立響應式佈局,以填充瀏覽器視窗的整個高度。

每種技術都有其優點,根據專案的具體需求,可能更適合不同的技術。在選擇合適的方法時,務必考慮內容溢位和瀏覽器相容性等因素。

透過理解和實現這些技術,您可以確保您的`

`標籤動態適應視口高度,提供流暢且視覺上令人愉悅的使用者體驗。您可以嘗試這些方法,並選擇最適合您需求的方法。

更新於:2023年8月7日

瀏覽量:175

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.