html - 图像纵横比填充模式 : CSS

标签 html css

我是一名 iOS 开发者。我们在 imageview 上有 aspect fill 属性。此属性让图像填充目标视口(viewport)或容器但保持纵横比。

现在填充以某种我无法使用纯 css 实现的方式工作。我要写下下面的代码。解释我的需要很难用英语表达,所以请尽量忍受并耐心等待。所以这里是:

Aspect Fill:这只填充所需的比例因子。例如:如果图像大于视口(viewport)大小,则图像将按比例缩小以保持宽高比,直到它变得小于视口(viewport),否则它将是“适合”效果。它必须填充视口(viewport)。超出视口(viewport)边界的额外部分将被剪掉。

如果图像小于视口(viewport),则图像将保持宽高比放大,直到刚好填满视口(viewport)。超出视口(viewport)边界的额外部分将被剪掉。

填充的比例因子很重要。我希望我解释了我的需要。在尝试通过网络学习实现之后,我想出了以下代码。这段代码没有按照我想要的方式填写。它保持纵横比但以 100% 缩放或比例填充。

.page-container, .page {
  width: 320px;
  height: 480px;
}

.page {                     
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

.page-image {
  flex-shrink: 0;
  min-width: 100%;
  min-height: 100%;
}
<div class="page-container">
  <div class="page">
     <img class="page-image" src="https://images.unsplash.com/photo-1495974887311-a817001ebd74" alt="">
  </div>
</div>

您可以在 unsplash 链接中查看该原始图像。 您可以在较小的图像上进行测试:https://upload.wikimedia.org/wikipedia/commons/5/50/Salta-VallesCalchaquies-P3140151.JPG

这种模式能否在纯 css 中实现,或者我是否需要 javascript 来根据我的要求为每个图像操纵新尺寸,这些图像根据我的要求进行纵横比填充视口(viewport)?

最佳答案

您可以在图像类中使用 object-fit: cover;

您还需要为图像添加宽度高度。 (注意:它在 Internet Explorer 上不起作用,但您可以添加一个 polyfill like this ! 以使其在 Internet Explorer 上也能正常工作)。

这是基于您的代码的示例:

.page-container, .page {
  width: 320px;
  height: 480px;
}

.page {                     
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

.page-image {
  flex-shrink: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
<div class="page-container">
  <div class="page">
     <img class="page-image" src="https://images.unsplash.com/photo-1495974887311-a817001ebd74" alt="">
  </div>
</div>

关于html - 图像纵横比填充模式 : CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50853466/

相关文章:

javascript - 如何设置与容器相同的嵌套DIV高度?

css - 在所有网络浏览器中保持图片正确旋转

php - 在 Wordpress 子主题中更改类/id

html - CSS 背景没有显示(我之前有背景)

css - 为什么视频在 Twitter bootstrap 中不显示海报图片?

javascript - HTML 表 JQuery 自动小时总计

html - Bootstrap 容器后面的全屏视频

css - 线性渐变在 body 标签上重复

html - 创建一个具有自动宽度 <td> 的表格

javascript - 根据里面的文字改变文本框的宽度