css 長寬比 aspect-ratio

aspect-ratio 屬性介紹

Chen Amber 2023/05/03 11:00:00
2552

網頁製作時,都須注意到網頁中所使用的圖片、卡片、影片、iframe....等,需在各瀏覽器解析度下都能正常瀏覽,就會需要了解怎麼製作等比例縮放的區塊,這時候就可使用 aspect-ratio 屬性提供了一種簡單、方便和直接的方法來設置元素的縱橫比。

縱橫比屬性:aspect-ratio

它被定義為元素的寬度與其高度的比率,並根據已知元素的大小計算另一邊,只要直接定義分母分子就可以了,非常方便

對於圖像、卡片、影片、iframe 和其他在調整大小時保持縱橫比很重要的元素的自適應佈局很有用。

在這裡您可以看到兩個長寬比相同的塊。 一個是 600 x 900 像素,另一個是 200 x 300 像素——兩者的縱橫比都是 2:3

兩個長寬比相同的圖片(縱橫比都是 2:3)。一個是 600 x 900 像素,另一個是 200 x 300 像素 

Example:

.item {
  width: 100%
  aspect-ratio: 2 / 3;}

這樣就可以直接維持一個比例為 2:3 的矩形。

可將必須維持長寬比的元素,用以下方式寫CSS,這樣區塊就會隨著比例縮放了。

img,
input[type="image"],
video,
embed,
iframe,
marquee,
object,
table {
  aspect-ratio: attr(width) / attr(height);
}

瀏覽器支援度:

來自 caniuse.com 的主要瀏覽器對 mdn-css__properties__aspect-ratio 特性的支持數據

註:chrome 88 版本以上,在其他瀏覽器我們還可以使用以下做法。

 

------------------------------------------------------   長寬比的其他方式   ------------------------------------------------------

使用 vw

vw 指的是瀏覽器的寬度,100vw 代表的是我們所見的瀏覽器的寬度,放到手機上的話就代表螢幕寬。

但此方法建議適用在手機版,因電腦版很多時候會因為區塊不會跟頁面一樣寬,若此寫法區塊會太大無法控制。

Example(2:3比例):

.fix-ratio{
  width: 100vw;
  height: 150vw;
}

 

使用 position

利用 position relative 和 absolute 的關係製作長寬比的區塊。

<div class="box"> 
  <div class="box-in"></div>
</div> 

 

等比例縮放的正方形:

.box {
  background-color: red;
  width: 100%;
  padding-top: 100%; /* 1:1 Aspect Ratio */
  position: relative;
}
 
.box-in {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
}

 

16:9 區塊範例:

.box {
  padding-top: 56.25%; /* 16:9 Aspect Ratio (divide 9 by 16 = 0.5625) */
}

調整外面那層的 padding-top 就可以自由的設定區塊的比例了。

 

透過 css 變數

只要調整 w 跟 h 的值就可以自由的組出我們想要的比例了

.aspect-ratio {
  position: relative;
  width: 100%;
  --w: 4;
  --h: 3;
}
.aspect-ratio:before {
  content: '';
  width: 100%;
  padding-top: calc(var(--h) * 100% / var(--w));
  display: block;
}
.aspect-ratio .content {
  position: absolute;
  width: 100%;
  height: 100%
}

 

參考資料

https://www.halo-lab.com/blog/css-properties-you-should-try-to-use

https://developer.mozilla.org/zh-CN/docs/Web/CSS/aspect-ratio

https://tools.wingzero.tw/article/sn/220

 

 

Chen Amber