新提案,初识CSS的object-view-box属性

news2024/9/22 6:09:21

在开发时,一直希望有一种原生的css方式来裁剪图片,并将其定位在我需要的任何方向。这可以通过使用一个额外的html元素和不同的CSS属性来实现,后面解释。

在这篇文章中,将带领大家了解Jake Archibald在今年年初提出的新的CSS属性object-view-box。它允许我们裁剪或调整被替换的HTML元素,就像一个 </img> 或 <video>

问题

在下面的例子中,我们有一个需要裁剪的图像。请注意,我们只想要该图像的特定部分。

目前,我们可以通过以下方式之一来解决这个问题。

  • 使用 <img> 并将其包裹在一个额外的元素中

  • 使用图像作为 background-image 并修改位置和大小

包在一个额外的元素中

这是一个常见的解决这个问题的方法,步骤如下:

  • 将图像包裹在另一个元素中(在我们的例子中是 <figure>)。

  • 添加 position: relative 和 overflow: hidden

  • 为图片添加了 position: absolute,并对定位和尺寸值进行了调整,以实现这一结果。

<figure><imgsrc="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;
}

将图像作为背景

在这个解决方案中,我们使用一个 <div> 将图片作为背景,然后我们改变位置和大小值。

<divclass="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;
}

这很好,但如果我们想把上述内容应用于 <img> 呢?嗯,这就是 object-view-box 的作用。

引入Object-View-Box

属性 object-view-box 可能会在 Chrome 104 中支持。现在可以在 Chrome canary中使用。

根据CSS规范。

object-view-box属性在一个元素上指定了一个 "视图框",类似于<svg viewBox>属性,在元素的内容上进行缩放或平移。

该属性的值是 <basic-shape-rect> = <inset()> | <rect()> | <xywh()>。在本文的演示中,我将着重介绍inset()的用法。

我们回到这个问题上来。

有了 object-view-box,我们就能用inset从四边(上、右、下、左)画一个矩形,然后应用object-fit: cover来避免变形。

<imgsrc="img/brownies.jpg"alt="">
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()值。

使用 inset

inset()值将基于原始图像的宽度和高度,从而形成一个裁剪过的图像。它将帮助我们绘制一个嵌入的矩形并控制四个边缘,类似于处理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 值来缩小。

想象一下,这对于能够缩放图像是多么有用,而不需要用一个额外的元素来包装它。

事例

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

期待这个新的属于尽快来了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VisionBank AI实现4项技术突破----传统算法融合深度学习,重新定义“工业视觉检测大脑”

机器视觉经过长时间的发展&#xff0c;技术不断取得重大突破并被广泛应用&#xff0c;当前已遍布工业生产的各个环节。而且机器视觉易于实现自动化集成&#xff0c;软件集成&#xff0c;是实现智能制造的基础技术。据统计&#xff0c;中国的机器视觉市场需求近几年处于持续高速…

【目标检测】ROI Pool和ROI Align的区别

这里说一下ROI Pool和ROI Align的区别&#xff1a; 一、ROI Pool层 参考Faster RCNN中的ROI Pool层&#xff0c;功能是将不同size的ROI区域映射到固定大小的feature map上。 它的缺点&#xff1a;由于两次量化带来的误差&#xff1b; 将候选框边界量化为整数点坐标值将量化…

【Vue】后台管理系统

O 项目说明 1.脚手架 vitevue-cli 》 webpack 2.vite脚手架使用 官网&#xff1a;https://vitejs.cn/ Vue3 vite官网&#xff1a;https://cn.vitejs.dev/ Vite下一代的前端工具链&#xff0c;为开发者提供急速响应 # 安装 $ cnpm i vite -g $ vite -v vite/4.0.3 darwin…

Sentinel + Redis + Mysql + RabbitMQ 秒杀功能设计及后端代码实现

文章目录前言数据一致性高性能动静分离静态资源缓存流控缓存数据库消息队列RabbitMQ的优点高并发分布式锁后端代码实现中间件表结构添加依赖公共常量实体类Redission配置定时任务Controller下单接口付款接口接收通道消息完整代码前言 在开发秒杀系统功能的时候&#xff0c;需要…

MyBatis讲解,批量添加

一、批量添加 1.书写BookMapper 1.1先在navicat的新建查询里书写条件查询的sql语句 条件查询的sql语句 insert into book(book_name) values(三体); 1.2将sql语句复制到BookMapper里 用到foreach标签&#xff1b; collection&#xff1a;可以放数组&#xff0c;也可以放list集…

数据结构与算法-算法分析(2)

算法和算法分析 对于同一个问题可能由不同的算法。究竟来如何评价这些算法 一个算法首先要具备正确性&#xff0c;健壮性&#xff0c;可读性和有穷性&#xff0c;然后我们再比较其算法的效率&#xff0c;来评判算法的优劣。 主要从时间和空间上的效率进行评价算法&#xff0c…

对JSON的理解

什么是JSON? JSON全名是JavaSpript Object Notation。 JSON是轻量级的文本数据交换格式。 JSON是存储和交换文本信息的语法&#xff0c;类似XML,比XML更小&#xff0c;更快&#xff0c;更易解析。 JSON可以将Java对象转换为特殊格式的字符串&#xff08;JSON串&#xff09…

矿井水深度除总氮

工艺原理 选择性去除硝酸盐氮 项目背景 近年来高矿化度和含特殊组分矿井水逐年增多&#xff0c;以及环保政策的趋严给矿井水处理带来新挑战。 随着《水污染防治行动计划》 &#xff08;水十 条&#xff09;的深入开展和新的煤矿环境影响评价制度的执行&#xff0c;山西、陕…

CSS权威指南(三)特指度

文章目录1.特指度的定义2.继承3.层叠1.特指度的定义 ​ 我们都知道&#xff0c;当同一元素被设置了两个相同属性的时候&#xff0c;只会生效其中的一个属性值。至于到底生效哪一个属性值&#xff0c;自然是有一套计算规则的。在CSS中&#xff0c;选择符的特指度由选择符本身的…

模板学堂丨数据大屏配色设计指南

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场&#xff08;https://dataease.io/templates/&#xff09;。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板&#xff0c;方便用户根据自身的业务需求和使用场景选择对应的仪表板模板&#xff0c;并…

[MySQL]-双主+keepalived实现高可用

[MySQL]-双主keepalived实现高可用 梁森 | 2023年1月 本文旨在记录学习主从时的拓展内容&#xff0c;怎么借助keepalived实现简单的高可用。 一、环境介绍 1.1 keepalived keepalived的作用是检测服务器的状态&#xff0c;若某一台服务器宕机&#xff0c;会通过VIP&#xff08;…

【人工智能】基于五笔字型规范和人工神经网络的简中汉字识别【六】

识别网络训练与测试 一、配置文件的修改二、修改训练模型参数三、训练自己的识别模型四、测试识别模型一、配置文件的修改 前期工作铺垫了这么久,终于可以正式进正题了。 训练目标检测模型需要修改几个文件,我们这里为了不破坏原本项目结构,采用在相同目录下复制一份不同名文…

linux下后台运行python脚本

这几天工作中遇到一个问题&#xff0c;后台运行python脚本&#xff0c;存储输出日志到linux系统中&#xff0c;因为在脚本中用了大量的print&#xff0c;导致输出很多信息&#xff0c;服务器内存占满了光是log就有120G&#xff0c;因此写下这篇博客&#xff0c;记录后台运行pyt…

数据防篡改之主机加固篇

​ 随着物联网技术和互联网技术的日益发展&#xff0c;勒索病毒、工控安全、产线作业都面领着极大的威胁。智慧互联正在成为各个行业未来的发展方向&#xff0c;智慧互联包括物联网、万物互联&#xff0c;机器与机器&#xff0c;工业控制体系&#xff0c;信息化&#xff0c;也…

Redis之乱七八糟

redis过期时间 注意事项 DEL/SET/GETSET等命令会清除过期时间   在使用 DEL、SET、GETSET 等会覆盖key对应value的命令操作一个设置了过期时间的key的时候&#xff0c;会导致对应的key的过期时间被清除。 INCR/LPUSH/HSET等命令则不会清除过期时间   而在使用 INCR/LPUSH…

【Git】 常用命令速查

一、 Git 常用命令速查git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r 查看远程所有分支git commit -am "init" 提交并且加注释 git remote add origin git192.168.1.119:ndshowgit push origin ma…

人工智能 - 朴素贝叶斯、案例:文本情感分析

朴素贝叶斯&#xff1a;用概率去预测 1、朴素贝叶斯介绍 朴素&#xff1a;指的是&#xff0c;特征之间相互独立 拉普拉斯平滑系数&#xff0c;每个种类都加k&#xff0c;避免条件概率出现0 区分情书与作业的例子&#xff0c;用关键词&#xff1a; 是情书的概率更高&#xf…

基于Transformer的多变量风电功率预测TF2

Transformer目前大火&#xff0c;作为一个合格的算法搬运工自然要跟上潮流&#xff0c;本文基于tensorflow2框架&#xff0c;构建transformer模型&#xff0c;并将其用于多变量的风电功率负荷预测。 实验结果表明&#xff0c;相比与传统的LSTM&#xff0c;该方法精度更高&…

干货 | 背熟这些 Docker 命令,面试再也不怕啦~

我们下载 Docker 镜像的时候&#xff0c;默认会访问 Docker 网站&#xff0c;而 Docker 网站是在国外部署的&#xff0c;距离比较远下载速度特别慢。我们可以通过设置加速器的方式来加速 Docker 镜像下载的速度。下面将描述一下使用加速器的步骤&#xff1a;1.我们这里选择的是…

ORB-SLAM2 --- MapPoint::Replace函数

目录 1.函数作用 2.code 3.函数解析 1.函数作用 替换地图点&#xff0c;更新观测关系。 2.code void MapPoint::Replace(MapPoint* pMP) {// 同一个地图点则跳过if(pMP->mnIdthis->mnId)return;//要替换当前地图点,有两个工作:// 1. 将当前地图点的观测数据等其他数…