在響應式佈局中,使用純 CSS 使塊元素等比縮放,主要依靠 padding
的百分比值特性,以及 aspect-ratio
屬性 (現代瀏覽器支援)。以下幾種方法可以實現:
1. 使用 padding-top
或 padding-bottom
:
這是最常用的方法,利用了 padding
百分比值是相對於父元素 寬度 計算的特性。
.container {
width: 50%; /* 或其他任何寬度設定 */
position: relative; /* 為絕對定位的子元素提供參考 */
}
.container .content {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
/* 1:1 比例 */
.container.ratio-1-1 .content {
padding-top: 100%;
}
/* 16:9 比例 */
.container.ratio-16-9 .content {
padding-top: 56.25%; /* 9/16 * 100% */
}
/* 4:3 比例 */
.container.ratio-4-3 .content {
padding-top: 75%; /* 3/4 * 100% */
}
- 原理:
padding-top: 100%;
表示頂部內邊距為父元素寬度的 100%,從而使元素高度等於寬度,實現 1:1 的比例。其他比例以此類推。 - 關鍵: 需要設定
position: relative;
給父元素,以及position: absolute; top: 0; left: 0; width: 100%; height: 100%;
給子元素,使子元素填充父元素的空間。
2. 使用 aspect-ratio
(現代瀏覽器支援):
這是更現代化和直接的方法,可以更方便地設定寬高比。
.container {
width: 50%; /* 或其他任何寬度設定 */
}
.container.ratio-1-1 {
aspect-ratio: 1 / 1;
}
.container.ratio-16-9 {
aspect-ratio: 16 / 9;
}
.container.ratio-4-3 {
aspect-ratio: 4 / 3;
}
- 原理:
aspect-ratio
屬性直接定義了元素的寬高比。 - 優勢: 更簡潔,無需額外的巢狀和定位。
- 相容性: 需要考慮瀏覽器相容性,對於不支援的瀏覽器,可以結合第一種方法作為 fallback。
3. 使用 vw
單位 (視口寬度):
這種方法可以根據視口寬度來設定高度,實現等比縮放,但比例是相對於視口的,而不是父元素。
.container {
width: 50%; /* 或其他任何寬度設定 */
}
.container.ratio-1-1 {
height: 50vw; /* 假設容器寬度也是 50vw */
}
- 原理:
vw
表示視口寬度的百分比。 - 限制: 比例是相對於視口的,如果父元素寬度不是視口寬度的某個固定比例,則無法實現精確的等比縮放。
選擇哪種方法?
- 優先使用
aspect-ratio
,因為它更簡潔和直接。 - 如果需要相容舊版瀏覽器,或者
aspect-ratio
無法滿足需求,則使用padding-top
方法。 - 避免使用
vw
單位,除非你明確需要根據視口寬度進行縮放。
示例 (使用 aspect-ratio
):
<!DOCTYPE html>
<html>
<head>
<title>Aspect Ratio Example</title>
<style>
.container {
width: 50%;
background-color: lightblue;
margin: 20px auto;
}
.ratio-1-1 {
aspect-ratio: 1 / 1;
}
.ratio-16-9 {
aspect-ratio: 16 / 9;
}
</style>
</head>
<body>
<div class="container ratio-1-1">1:1 Aspect Ratio</div>
<div class="container ratio-16-9">16:9 Aspect Ratio</div>