html - 在不知道图像方向的情况下,将图像以较小的一侧适合容器
问题描述
我有一个给定绝对尺寸的容器(例如一个正方形)。现在我想将容器内的图像通过其较小的一侧适合其父容器,而较大的一侧会溢出容器。换句话说:较小的一侧应该完全匹配 100%,但两者都应该 >= 100% 的容器。这一切都没有挤压图像。
它应该独立于横向或纵向的图像方向,因为我想在不知道图像具有哪个方向的情况下涵盖这两种情况。
是否可以通过说图像的最小宽度和最小高度等于父容器的高度和宽度来解决它?或者任何人有任何其他简单的解决方案?
感谢任何提示谢谢,塞巴斯蒂安
解决方案
仅使用 CSS 即可,但不支持跨浏览器。你好,IE:
img {
object-fit: cover;
max-width: 100%;
max-height: 100%;
min-width: 100%;
min-height: 100%;
}
看到它工作:
.sized-container {
width: 25vw;
height: 25vw;
display: inline-block;
float: left;
}
.sized-container img {
object-fit: cover;
max-width: 100%;
max-height: 100%;
min-width: 100%;
min-height: 100%;
}
body {margin :0;}
<div class="sized-container">
<img src="https://loremflickr.com/640/360">
</div>
<div class="sized-container">
<img src="https://loremflickr.com/360/640">
</div>
<div class="sized-container">
<img src="https://loremflickr.com/100/100">
</div>
<div class="sized-container">
<img src="https://loremflickr.com/1000/1000">
</div>
对于跨浏览器解决方案,您必须依赖 JavaScript。
隐藏<img>
元素,同时获取它们的src
值来设置容器背景。容器必须background-size:cover
提供您正在寻找的确切尺寸和裁剪行为。
该解决方案还放大小图像以适应大小父级的宽度/高度:
let containers = document.querySelectorAll('.sized-container');
for (let i = 0; i < containers.length; i++) {
var container = containers[i],
image = container.querySelector('img');
if (image)
container.style.backgroundImage = 'url(' + image.getAttribute('src') + ')'
}
.sized-container {
width: 25vw;
height: 25vw;
background: transparent 50% 50% no-repeat /cover;
float: left;
}
.sized-container img {
display: block;
width: 100%;
height: 100%;
opacity: 0;
}
body { margin: 0;}
<div class="sized-container">
<img src="https://loremflickr.com/640/360">
</div>
<div class="sized-container">
<img src="https://loremflickr.com/360/640">
</div>
<div class="sized-container">
<img src="https://loremflickr.com/100/100">
</div>
<div class="sized-container">
<img src="https://loremflickr.com/1000/1000">
</div>
如果使用 jQuery,脚本会更短一些:
$('.sized-container').each((i,e) => {
let img = $('img', e);
if (img.is('img'))
$(e).css({backgroundImage:'url(' + img.first().attr('src') + ')'});
})
重要提示:显然,如果您可以控制标记,则应background-image
在生成标记时设置父级的 ,这样您就不必使用 JavaScript 从图像中获取它。但是,<img>
出于可访问性目的(想想屏幕阅读器、标题属性等),我会将元素保留在其中,仍然隐藏。
推荐阅读
- python - numpy:FutureWarning:元素比较失败
- firebase - 如何在一台机器上运行两个 firebase 实例来测试 Unity 中的多人构建?
- turing-machines - 从 ALLtm 减少到 Etm
- flutter - Dart/Flutter:没有为“搜索”类型定义吸气剂“长度”
- python - easymc.io 网络抓取绑定以提取值
- xpath - 在两个特定元素之间选择元素
- hugo - Hugo 错误模板:_default/single.html:20:16:在 <$img.Fill> 处执行“main”:调用填充时出错:*resources.genericResource 不是图像
- swift - swiftUI 使用 firstResponder() 隐藏文本字段
- asp.net-core - 当我想在 blazor 服务器中使用 httpclient 时出现错误
- algorithm - 解决运算符优先级的函数