javascript - 如果图像高度超过图像宽度,通过裁剪图像的顶部和底部来垂直居中图像 - 仅使用 CSS 可能吗?

标签 javascript jquery css

假设您事先不知道图像元素的高度和宽度,假设在图像高度大于图像宽度的情况下,您希望通过裁剪相同的量使图像垂直居中的像素形成它的顶部和底部,这样新的图像高度与图像宽度相匹配。例如,如果图片的宽度为 200 像素,高度为 250 像素,则从其顶部和底部裁剪 25 像素。

这是一个示例设置:

HTML:

<div class = 'cell'>
  ...
  <div class = 'image_container'> 
     ... 
     <img ...> 
  </div>
</div>

CSS:

.cell {
    display: inline-block;
    float: left;
    /* width will be changed by use of '@media screen'.
       Smaller browser window -> larger width */
    width: 31%;
}

.image_container {
    position: relative;
    float: left;
    width: 100%;
}

.image_container > img {
    width: 100%;
}

是否可以仅使用 CSS 来完成上述居中/裁剪操作,还是必须为此使用 javascript/jquery?

最佳答案

您可以使用 object-fit CSS 属性。它的行为很像 background-size 属性。

.image_container > img {
    object-fit: contain;
}

请注意,截至目前(2016 年 10 月),这还没有完整的浏览器支持,因此您可能需要考虑将图像设置为 div 上的背景并使用 background-positionbackground-size来处理这个而不是 <img>标签。

.image_container {
  height: 300px;
  background-color: cornflowerblue;
  image-rendering: pixelated;

  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALklEQVQoU2NkgID/UBqdYmSESoJobOA/sgKQKTCFMDaKAuqYAHMs3CqiHInXmwDZGBMDEmk6SQAAAABJRU5ErkJggg==');
  background-repeat: no-repeat;
  background-position: center center;
  background-size: 200px;
}
<div class="image_container"></div>

关于javascript - 如果图像高度超过图像宽度,通过裁剪图像的顶部和底部来垂直居中图像 - 仅使用 CSS 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40074372/

相关文章:

css - 如何找出 Selenium 元素的 DOM 和 CSS 地址?

javascript - 如何通过javascript禁用ajax缓存而不使用jquery?

javascript - 获取 JSON 到 HTML JavaScript 表

javascript - 使函数的值成为全局函数,以便在任何其他函数中调用

javascript - window.location.href.match 不工作

javascript - dataTables 从格式化数字中搜索数字

html - 我是否以错误的方式让我的网站响应?

css - 当图像很小时,在 Bootstrap 模式中垂直对齐中心

javascript - ReactJS - 从主文件导出模块

javascript - 在 casper.click() 上捕获网络资源请求