前言
Ahmad Shadeed 的文章css-object-view-box写得很好,他可以让我们对object-view-box
属性的有一定的了解,他将其描述为在浏览器中使用 CSS 裁剪图像的原生方式。
如何使用
使用案例呢?好吧,Ahmad 开头展示了如何在没有css-object-view-box
的情况下来完成一些图片裁剪需求。
- codepan例子1:一个带有隐藏溢出的包装元素,该元素围绕一个尺寸和定位在该元素内的图像或
- codepan例子2:背景图
background-image
。
如果使用 object-view-box
,我们基本上可以像使用 SVG 的 viewbox
一样绘制图像边界。因此,我们可以使用普通的 <img>
标签并调用 object-view-box
以使用 inset
函数修剪边缘。我把Ahmad的例子放这里。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| img { width: 220px; aspect-ratio: 3 / 2; object-fit: cover; }
.img-0 { aspect-ratio: 1 / 2; }
.img-1 { object-view-box: inset(0% 19% -33% 57%); }
.img-2 { object-view-box: inset(0% 15% -52% 3%); }
.img-3 { object-view-box: inset(0% 0% 17% 0%); }
.group { display: flex; flex-wrap: wrap; justify-content: center; gap: 1rem 1.5rem; }
.item { text-align: center; margin-bottom: 2rem;
p { padding: 0.5rem; }
code { font-size: 14px; } } .alert { display: block; max-width: 70ch; padding: 1rem; text-align: center; margin: 0 auto 1rem; background-color: #ffeeee; border: 1px solid red; border-radius: 5px; font-size: 0.75rem; }
@supports (object-view-box: inset(0)) { .alert { display: none; } }
body { font-family: "system-ui"; padding: 1rem; line-height: 1.45; }
img { max-width: 100%; box-shadow: 0 8px 15px 0 rgba(#000, 0.1), 0 2px 5px 0 rgba(#000, 0.2); border-radius: 12px; }
*, *:before, *:after { box-sizing: border-box; }
|
结尾
可惜css-object-view-box
现在只支持Chrome Canary。 但是谷歌计划在[Chrome 104]中(https://chromestatus.com/feature/5213032857731072)支持!