有梦想,有干货,微信搜索 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。在开发时,一直希望有一种原生的CSS方式来裁剪图片,并将其定位在我需要的任何方向。这可以通过使用一个额外的HTML元素和不同的CSS属性来实现,后面解释。
本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。
在这篇文章中,将带领大家了解Jake Archibald在今年年初提出的新的CSS属性
object-view-box
。它允许我们裁剪或调整被替换的HTML元素,就像一个
或
问题 在下面的例子中,我们有一个需要裁剪的图像。请注意,我们只想要该图像的特定部分。
文章图片
目前,我们可以通过以下方式之一来解决这个问题。
- 使用
文章图片
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; }
将图像作为背景
在这个解决方案中,我们使用一个将图片作为背景,然后我们改变位置和大小值。
.brownies { width: 300px; aspect-ratio: 3 / 2; background-image: url("brownies.jpg"); background-size: 700px auto; background-position: 77% 68%; background-repeat: no-repeat; }
这很好,但如果我们想把上述内容应用于
文章图片
img { aspect-ratio: 1; width: 300px; object-view-box: inset(25% 20% 15% 0%); }
这是怎么做到的呢?我们往下看。
图像的内在尺寸 内在大小是默认的图像宽度和高度。我处理的图像大小为1194 × 1194 px
.
img { aspect-ratio: 1; width: 300px; }
使用上述CSS,图片的渲染尺寸将是300×300px
。
文章图片
我们的目标是在固有图像上画一个矩形。要做到这一点,我们使用inset()
值。
使用 insetinset()
值将基于原始图像的宽度和高度,从而形成一个裁剪过的图像。它将帮助我们绘制一个嵌入的矩形并控制四个边缘,类似于处理margin
或padding
。
inset
值定义了一个嵌入的矩形。我们可以控制四个边缘,就像我们处理margin
或padding
一样。在下面的例子中,卡片的所有边缘都有一个20px
的嵌入。
文章图片
回到object-view-box
:
img { aspect-ratio: 1; width: 300px; object-view-box: inset(25% 20% 15% 0%); }
以下是上述内容的背后的样子,值25%、20%、15%
和0%
的值分别代表顶部、右侧、底部和左侧。
文章图片
修复图像失真 如果图像的尺寸是正方形的,那么裁剪后的结果将是变形的。
文章图片
这可以使用object-fit
属性来解决。
img { aspect-ratio: 1; width: 300px; object-view-box: inset(25% 20% 15% 0%); object-fit: cover; }
文章图片
放大或缩小 我们可以使用inset
来放大或缩小图像。根据我的测试,过渡或动画不能与object-view-box
工作。
文章图片
我们也可以用一个负的inset
值来缩小。
文章图片
【前端|新提案,初识CSS的object-view-box属性】想象一下,这对于能够缩放图像是多么有用,而不需要用一个额外的元素来包装它。
事例 地址:https://codepen.io/shadeed/pen/yLvXJRd
期待这个新的属于尽快来了!
作者:ishadeed > 来源:ishadeed
原文:https://ishadeed.com/article/css-object-view-box/
交流 文章每周持续更新,可以微信搜索「 大迁世界 」第一时间阅读和催更(比博客早一到两篇哟),本文 GitHub https://github.com/qq449245884/xiaozhi 已经收录,整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,另外关注公众号,后台回复福利,即可看到福利,你懂的。
推荐阅读
- 前端|注意避坑,Vue Router 4: 路由参数在 created/setup 时不可用
- 前端|停止像这样使用 “async/await“,改用原版
- 微信小程序|微信小程序学习之旅--第一个页面的制作
- 微信小程序|微信小程序云开发快速入门手册-告别切图仔的时刻到了
- Jquery|4.jquery(函数)
- 前端学习日志|JavaScript基础语法_JavaScript简单类型和复杂类型
- vue后台管理|vue 详情页返回列表,过滤查询条件保留
- javascript|three.js案例解析之代码实现morph动画
- 极客日常|【极客日常】vue3中实现Array数组更新的方法