html - 如何在 flexbox 中创建裁剪后的可缩放图像容器?

标签 html css flexbox

我想在我的网站上使用 3 列 flexbox 布局,顶部有 3 个图像,然后是 3 个正文。我希望图像是一个固定宽高比的容器,如果图像对于容器来说太大,图像需要在高度方向上填充整个容器。

如果窗口缩小,图像应该缩小以保持与 flexbox 的纵横比,而现在它只是缩小宽度。

我的问题是,无论我研究过什么解决方案,我都找不到能够提供具有固定纵横比的裁剪图像的解决方案,并且还可以缩放以保持该比例。它总是要么让整个图像缩放,要么只缩放宽度,进一步裁剪图像。

有没有我可以使用的解决方案?

html {
  height: 100%;
}

body {
  text-wrap: normal;
  text-align: center;
  position: relative;
  padding-bottom: 5.5em;
  margin: 0;
  min-height: 100%;
}

.homeinfo-flex {
  margin: 0px;
  padding: 0px;
  float: left;
  width: 100%;
  position: absolute;
  transform: translateX(-50%);
  left: 50%;
  display: flex;
  max-width: 67em;
  justify-content: space-around;
  background: #CCC;
}

.homeinfo-flex .col {
  width: 30%;
  margin: 0 1%;
  text-align: left;
}

.homeinfo-flex .container {
  text-align: center;
  overflow: hidden;
  padding-bottom: 2em;
}

.homeinfo-flex img {
  position: relative;
  left: 100%;
  margin-left: -200%;
  height: 15.62em;
  max-width: 15.62em;
}
<body>
  <div class="homeinfo-flex">
    <div class="col">
      <div class="container"><img src="images/street_ph.jpg" alt="Street" /></div>
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
      sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
      rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
    </div>
    <div class="col">
      <div class="container"><img src="images/resturaunt_ph.jpg" alt="Street" /></div>
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
      sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
      rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
    </div>
    <div class="col">
      <div class="container"><img src="images/event_ph.jpg" alt="Street" /></div>
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
      sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
      rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
    </div>
  </div>
</body>

最佳答案

选项 1:附加图像作为背景图像。 div class="container"style="background-image: url(images/resturaunt_ph.jpg);"

.container {
    background-image: url()
    background-size:cover;
    padding-bottom: 80%; // 5:4 ratio
}

选项 2:用您的宽高比填充容器并将图像设置为 object-fit:cover。

.container {
    position:relative;
    padding-bottom: 80%; // 5:4 ratio
}
.container img {
    position:absolute;
    top:0;
    left:0;
    min-height: 100%;
    min-width:100%;
    object-fit: cover // check browser support
}

关于html - 如何在 flexbox 中创建裁剪后的可缩放图像容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47687903/

相关文章:

css - 无论原始大小如何,我都需要一个图像来占据它可以占用的最大空间

css - 占位符中的 Font Awesome 图标不会显示,除非字体粗细设置为 600

javascript - 如何防止关闭的 </option> 标签被删除?

html - 如果一个区域卡在包含 block 之外,如何防止滚动条?

php - 在其他 Blade 中包含导航栏 Blade 会使 "CSS"与 "Laravel"发生冲突!

html - 浏览器窗口横向收缩时正文背景图片不横向移动

html - 将 flexbox 与绝对位置子项一起使用?

css - Angular 响应式表单模板

javascript - 如果我选择索引值大于当前颜色索引的颜色,则只能覆盖通过 mousedown 应用的颜色

jquery - 在 bootstrap-multiselect 中显示选择所有复选框并自定义 "None Selected"文本