- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到一张 JPEG 图像,需要使用 CSS 对其进行裁剪,然后将其展开以适应 1200px x 1000px
框。
这是我目前所拥有的:
#top-image {
display: block;
clip-path: inset(0px 103px 45px 105px);
margin-left: auto;
margin-right: auto;
width: 1200px;
height: 1000px;
}
<img src="https://via.placeholder.com/750x500" id="top-image">
clip-path
属性裁剪 750px x 500px
的原始图像。当我将宽度和高度设置为上面代码段中提到的值时,会出现两个问题:
clip-path
中使用的像素值基于新的 1200 x 1000
框,而不是原始图像。
原始(未交叉)图像(包括裁剪部分)扩展到方框。但是,我想扩大裁剪后的图像以填充框。
使用纯 CSS 执行此操作的最佳方法是什么?
更新 1:我可以使用百分比而不是像素来解决第一个问题。
最佳答案
为此使用背景并调整background-size
/background-position
:
#top-image {
display: block;
/*clip-path: inset(0px 103px 45px 105px);*/
width: 1200px;
height: 1000px;
background-image:url(https://picsum.photos/1200/1000?image=0);
background-size:
calc(100% + 103px + 105px) /*100% of the width + the cropped part*/
calc(100% + 45px); /*100% of the height + the cropped part*/
background-position:
-103px /*we shift to the left to crop the 103px*/
0; /*we keep at the top and the bottom will be cropped*/
}
<div id="top-image"></div>
上面的将根据容器裁剪像素。如果您需要根据图像尺寸进行裁剪,请执行以下操作:
#top-image {
display: block;
/*clip-path: inset(0px 103px 45px 105px);*/
width: 1200px;
height: 1000px;
background-image:url(https://picsum.photos/750/500?image=1069);
background-size:
calc(750px*(1200/(750 - 103 - 105)))
calc(500px*(1000/(500 - 45)));
background-position:
calc(-103px*(1200/(750 - 103 - 105)))
0;
}
<div id="top-image"></div>
您的图像的高度为 500px
,您想要裁剪 45px
因此我们将有 455px
需要覆盖 1000px
所以我们需要乘以 1000/455
。与宽度相同的逻辑。考虑到相同的乘法,我们需要将位置移动 103px
crop。
我们也可以用不同的方式来写。
我将使用下图 (300x150
),我将从左边裁剪 100px
,从右边裁剪 60px
,距顶部 10px
,距底部 45px
。然后它将覆盖一个尺寸为 400x200
的容器。我们应该只看到黄色部分。
.image {
display: block;
margin:5px;
width: 400px;
height: 200px;
background-image:url(/image/Xde45.png);
background-size:
calc(300px*(400/(300 - 100 - 60)))
calc(150px*(200/(150 - 10 - 45)));
background-position:
calc(-100px*(400/(300 - 100 - 60)))
calc(-10px *(200/(150 - 10 - 45)));
}
.alt {
background-size:
calc(100% + (100 + 60)*(400px/(300 - 100 - 60)))
calc(100% + (45 + 10) *(200px/(150 - 10 - 45)));
background-position:
calc(-100*(400px/(300 - 100 - 60)))
calc(-10 *(200px/(150 - 10 - 45)));
}
.alt2 {
--c-left:100; /*crop left*/
--c-right:60; /*crop right*/
--c-bottom:45; /*crop bottom*/
--c-top:10; /*crop top*/
--c-x:calc(var(--c-right) + var(--c-left));
--c-y:calc(var(--c-top) + var(--c-bottom));
background-size:
calc(100% + var(--c-x)*(100%/(300 - var(--c-x))))
calc(100% + var(--c-y)*(100%/(150 - var(--c-y))));
background-position:
calc(-1*var(--c-left)*(400px/(300 - var(--c-x))))
calc(-1*var(--c-top) *(200px/(150 - var(--c-y)))) ;
}
<div class="image"></div>
<div class="image alt"></div>
<div class="image alt2"></div>
我们可以采用最后一种语法并考虑更多变量以获得更动态和更灵敏的:
.image {
display: block;
margin:5px;
width: var(--w,400px);
height: var(--h,200px);
background-image:url(/image/Xde45.png);
--c-left:100; /*crop left*/
--c-right:60; /*crop right*/
--c-bottom:45; /*crop bottom*/
--c-top:10; /*crop top*/
--c-x:calc(var(--c-right) + var(--c-left));
--c-y:calc(var(--c-top) + var(--c-bottom));
background-size:
calc(100% + var(--c-x)*(100%/(300 - var(--c-x))))
calc(100% + var(--c-y)*(100%/(150 - var(--c-y))));
background-position:
calc(-1*var(--c-left)*(var(--w,400px)/(300 - var(--c-x))))
calc(-1*var(--c-top) *(var(--h,200px)/(150 - var(--c-y)))) ;
}
<div class="image"></div>
<div class="image" style="--w:200px;--h:100px;"></div>
<div class="image" style="--w:150px;--h:150px;"></div>
关于css - 如何将裁剪后的图像扩展到盒子中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54272230/
如何将浮点 10 字节十六进制字符串(Delphi 中的扩展数据类型)转换为 C# 数据类型? 例如:00 00 00 00 00 00 00 80 ff 3f 在 Delphi 1 最佳答案 涉及同
我正在阅读 this page上面写着 If one of the strings has an encoding prefix and the other doesn't, the one that
我有以下代码(作为示例),我想对其进行调整,以使功能区扩展到整个 xrange,如 geom_hline()做。功能区指示哪些值在可接受的范围内。在我的实际应用程序中,有时没有上限或下限,因此 hli
去年,斯科特·格思里 stated “如果您想要对执行的 SQL 进行绝对控制,您实际上可以覆盖 LINQ to SQL 使用的原始 SQL”,但我找不到描述可扩展性方法的文档。 我想修改以下 LIN
我尝试在我的应用中创建一个抽屉导航。我有 3 个当前选项(查看、声明、报告),当然这 3 个 Activity 已扩展到 fragment。在View 中,它有一个next 按钮,该按钮将转到另一个页
很抱歉,如果我的问题被重复,但我无法(或不知道如何谷歌)找到答案。我想使用 rxlifecycle-navi 库来将 rxjava 绑定(bind)到生命周期,所以我需要扩展 NaviActivity
有这个html: aaa 做的时候: $('#hi1').sayHi(); 我想收到一条“嗨”提醒 有人知道这是怎么做到的吗? 最佳答案 了解更多关于jQuery plugin authoring
我有一个 UIImageView 和一个 UITextView。当点击 UITextView 时,我需要 UITextView 在 UIImageView 上展开。我不知道该怎么做。 从这里 为此 最
以下语句: URLClassLoader ucl = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class uclc = ucl.get
以下语句: URLClassLoader ucl = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class uclc = ucl.get
$的意思是什么!在 shell 或 shell 脚本中?我正在尝试理解具有以下内容的脚本。 local@usr> a=1 local@usr> echo $a 1 local@usr> echo $!
我正在 GWT 中设计一个简单的应用程序,并且在客户端有不同的 View 。每个 View 都从 SimplePanel 扩展而来,并将根据需要添加到 RootPanel。 我的第一个 View 是
我尝试在 SQL Azure 选项卡中从 S2 扩展到 S3,但 S3 似乎不可用,尽管它已被引入。另外,我还有大量可用的 DTU,即 1900 左右。是否无法扩展到 S3?我是否需要导出数据库,然后
我有一个带有 JS、html 和 css 的自定义视频播放器。我的问题的关键是我没有预料到将其从一个视频扩展到两个视频,我希望重构它,以便我可以在一个页面上播放多个视频。我尝试将所有内容重写为 for
我当前正在开发的应用程序需要可扩展的实时通信。我们一直在研究并尝试 Firebase 实时数据库和 firestore。看来Firebase实时数据库更加成熟并且经过测试,而firestore仍处于测
当 pod 被 daemonset 控制时,pod 会出现一些错误,状态会是 CrashLoopBackOff ,我想删除这些 Pod 但不想删除 DaemonSet。 所以我想把daemonset缩
我有 Jframe 表单并创建了从中绘制图形的类,为此我需要将该 void 类扩展为 jframe 表单 package grafiktest; import java.awt.Color; impo
在布局和尺寸策略方面,我从来都不是太出色,所以这可能是一个简单的答案,但就是这样。 当我向 QTabWIdget 添加新选项卡并将小部件设置为 QSplitter 时,拆分器将使用给定的全部空间量。但
我在将我的 S4 对象转换回列表时遇到了一些问题。例如,以下嵌套的 S4 类: setClass("nssItem", representation(value = "numeric
在阅读了 DDD 的一些页面后,我了解了存储库模式,然后在应用程序中成功使用了它(我真的很喜欢它);然后我注意到 EntityManager 是 generic-repository-like,但是当
我是一名优秀的程序员,十分优秀!