【问题标题】:Image rounded corners issue with object-fit: contain对象拟合的图像圆角问题:包含
【发布时间】:2018-09-09 01:27:40
【问题描述】:

我想展示一张圆角的图片。所以图像必须拉伸到容器但不裁剪任何部分,如object-fit: contain。但是,border-radius 适用于图像元素,而不是图片内容。这是一个例子(也是JSFiddle):

body {
  width: 100vw;
  height: 100vh;
  margin: 0;
}

div {
  width: 100%;
  height: 100%;
}

img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  border-radius: 20%;
}
<div>
  <img src="https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885__480.jpg">
</div>

您可以在调整视口大小时检查它的工作原理。

那么,有没有办法让图像元素在双向调整其边框以适应容器,就像object-fit 一样?

或者也许是一种在图像内容上应用“crop-by-rounded-rect filter”的方法?

【问题讨论】:

  • 我不清楚您希望它如何工作。当视口与图像的纵横比不同时会发生什么?
  • “图片”是指图片内容还是html IMG元素边框?我不关心 html 结构,我只想达到与示例中相同的结果,但带有圆角。类似于如果我从上面的代码中删除border-radius并且图像JPG内容本身会带有圆角裁剪会发生什么。
  • 这里的答案 - stackoverflow.com/a/9994936/951745 - 说“没有 CSS 方法可以在两个方向上做到这一点”,这意味着填充 IMG 元素就像 object-fit 使用内容一样。否则我会这样做并在该 IMG 上应用边界半径。

标签: html css


【解决方案1】:

经过一些研究,这似乎在纯 CSS 中是不可能的。答案here 也证实了这一点。

在这个问题的other answer 中,图像视图没有增长到“触摸”父容器,因此在所有 4 个方向上在它周围留下了空白区域,并且在容器中心的某个地方保持很小。这意味着它的行为方式不同,因为问题中的代码 img 元素占据了整个父区域,然后图片内容“拉伸”以触及最近的边界与 object-fit: contain

【讨论】:

    【解决方案2】:

    我也遇到过这个问题,我找到了解决方法。如果将高度和宽度设置为自动,则 img 元素会保持其纵横比,并且图像会接触边框。然后,您可以使用 max-width 和 max-height 而不是 width 和 height。

    img {
      width: auto;
      height: auto;
      max-width: 100%;
      max-height: 100%;
      object-fit: contain;
      border-radius: 20%;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }

    您可能还必须像现在一样将 img 放在父 div 上,如果它小于将移动到左上角的最大尺寸。

    【讨论】:

    • 正如我在问题中所写 - “图像必须拉伸到容器”。您自己提到图像“将移至左上角”,这不是我想要的。即使你把它居中,它也不会占据整个容器。当您将 css sn-p 粘贴到我的问题中的 JSFiddle 中时,您可以自己看到它。
    猜你喜欢
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多