【问题标题】:How to layout differently sized images within a container with a constrained size?如何在大小受限的容器中布局不同大小的图像?
【发布时间】:2021-05-12 14:18:35
【问题描述】:

我有三个不同大小的图像,我想在一个具有最大宽度的响应式容器中并排布局。例如

Desired layout

图片的 HTML 如下:

<ul class="break-out ideation-sketches">
   <li><img src="images/work-blue-ideation1.jpg" alt="Ideation sketches"></li>
   <li><img src="images/work-blue-ideation2.jpg" alt="More ideation sketches"></li>
   <li><img src="images/work-blue-ideation3.jpg" alt="Yet more ideation sketches"></li>
</ul>

我尝试将 ul 设为 Flexbox 并使用 max-width 限制其大小,但图像会强制容器比页面宽。使用 display:grid 我能够限制容器的大小,但我无法让中心图像与两侧的第一个和最后一个图像的高度相匹配。

总结一下:

  1. 添加大量不同尺寸和纵横比的图片
  2. 让它们在容器中并排显示
  3. 容器应缩小到浏览器的宽度,并且不能超出其最大宽度
  4. 容器的高度事先是未知的 - 它会适应以适应图像
  5. 图像应按比例调整大小,以便在保持纵横比的同时填满容器。
  6. 每张图片都应与其同级图片具有相同的高度,并在必要时使用不同的宽度以保持其自己的纵横比。

【问题讨论】:

  • 不确定我是否完全掌握了场景,但是您是否提前知道每张图像的纵横比?
  • @AHaworth 理想情况下,我想在事先不知道的情况下使用任何纵横比的图像。我已经编辑了我的问题,试图澄清我想要实现的行为。
  • 有趣的问题,让我试一试。

标签: css flexbox css-grid


【解决方案1】:

我更接近使用以下内容尝试实现的目标。不过我希望有人可以提出更优雅的解决方案。

<style>
   .ideation-sketches {
   max-width: 700px;
   margin: 0 auto;
   }
   .outer {
   display: table;
   width: 100%;
   }
   .outer div {
   display: table-cell;
   }
   img {
   width: 100%;
   height: auto;
   }
</style>
<div class="break-out ideation-sketches">
   <div class="outer">
      <div><img src="images/work-blue-ideation1.jpg" alt="Ideation sketches"></div>
      <div><img src="images/work-blue-ideation2.jpg" alt="More ideation sketches"></div>
      <div><img src="images/work-blue-ideation3.jpg" alt="Yet more ideation sketches"></div>
   </div>
</div>

【讨论】:

    【解决方案2】:

    你可以像这样使用 flex:

    .ideation-sketches {
      max-width: 700px;
      margin: 0 auto;
    }
    
    .outer {
      display: flex;
    }
    
    .outer div {
      text-align: center;
      padding: 0px;
    }
    
    .center img {
      width: 300px;
    }
    
    img {
      width: 200px;
      height: 200px;
      object-fit: cover;
    }
    <div class="break-out ideation-sketches">
      <div class="outer">
        <!-- same size as third -->
        <div class="left"><img src="https://placekitten.com/200/300" alt="Ideation sketches"></div>
        <!-- different size -->
        <div class="center"><img src="https://placekitten.com/400/200" alt="More ideation sketches"></div>
        <div class="right"><img src="https://placekitten.com/440/300" alt="Yet more ideation sketches"></div>
      </div>
    </div>

    【讨论】:

    • 嗨,这是否假设了相对大小(例如,外部两个具有相同的纵横比?)
    • 试试新代码css。尽管给定的图像具有不同的尺寸,但它会强制图像达到一定的尺寸
    • 嗨,不幸的是,这似乎裁剪了图像,至少在我的 iPad/Safari 上
    • 图片的行为可以通过改变object-fit属性的值来修改。
    • 您可以阅读these 示例以了解更多关于您可能想要实现的目标。但是按比例缩小图像会使它的大小好像没有指定或包含指定(会导致更小的具体对象大小)。您可以使用these 尝试不同大小的占位符。
    猜你喜欢
    • 2013-12-28
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    相关资源
    最近更新 更多