CSS object-view-box 視圖框 縮放或平移顯示圖片

object-view-box 屬性

Chen Amber 2023/04/25 10:00:00
628

2022年5月,Jake Archibald 提出的新的CSS属性object-view-box。它允許我們裁剪或調整替換的HTML元素,就像一个 </img> 或 <video>。

object-view-box 屬性在元素上指定一個“視圖框”,類似於<svg viewBox>在元素內容上縮放或平移的屬性。

該屬性的值是 <basic-shape-rect> = <inset()> | <rect()> | <xywh()>。後面將介紹inset()的用法。

顯示特定區域圖片範例:

目前,通常以以下方式之一來解決此問題。

方法一:使用<img> 並將其包含一個元素中。

方法二:使用圖像作為background-image 並修改位置和大小。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

方法一:使用<img> 並將其包含一個元素中。

將圖片包裹在另一個元素中(在我們的例子中是<figure>)。

使用 position: relative​ 和overflow: hidden

為圖片添加了position: absolute,並對定位和尺寸值進行了調整,以實現這一結果。

<figure>
    <img src="img/brownies.jpg" alt="">
</figure>
figure {
    position: relative;
    width: 300px;
    aspect-ratio: 1;
    overflow: hidden;
    border-radius: 15px;
}
img {
    position: absolute;
    left: -23%;
    top: 0;
    right: 0;
    bottom: 0;
    width: 180%;
    height: 100%;
    object-fit: cover;
}

 

方法二:使用圖像作為background-image 並修改位置和大小。

在這個解決方案中,我們使用一個 ​​<div>​​ 將圖片作為背景,然後我們改變位置和大小值。

<div class="brownies"></div>
.brownies {
  width: 300px;
  aspect-ratio: 3 / 2;
  background-image: url("brownies.jpg");
  background-size: 700px auto;
  background-position: 77% 68%;
  background-repeat: no-repeat;
}

 

最新方式:Object-View-Box

有了 object-view-box,我們就能用inset從四邊(上、右、下、左)畫一個矩形,然後應用object-fit: cover來避免變形。

inset屬性替換了其他四個屬性:top、right、bottom和left ,允許您同時在所有四個邊上指定定位元素的inset。

 

inset屬性就像是margin和padding屬性的簡寫。它允許您從頂部、右側、底部和左側指定定位元素的插入。

 

如下圖為例:將(圖A),顯示特定區塊,如(圖B)

圖A

 

圖B

 

<img src="img/brownies.jpg" alt="">

 

img {
    aspect-ratio: 1;
    width: 300px;
    object-view-box: inset(25% 20% 15% 0%);
}

 

圖片變形了,怎麼辦?

若使用object-view-box 裁切圖片後,與原圖比例不同,必須加上 object-fit: cover來避免變形。

img {
    aspect-ratio: 1;
    width: 300px;
    object-view-box: inset(25% 20% 15% 0%);
    object-fit: cover;
}

放大或缩小

透過inset屬性,也可顯示放大或縮小圖像。

但transition和animation效果是無法透過object-view-box製作

放大範例:

縮小範例:inset 輸入負值

 

 

瀏覽器支持率: 69.76%。

Chorme104 版本以上都可支援~~~

 

參考資料

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

https://codepen.io/shadeed/pen/yLvXJRd

線上工具推薦:https://object-view-box.vercel.app/

 

 

 

Chen Amber