【问题标题】:div wrapper width by min content按最小内容的 div 包装器宽度
【发布时间】:2020-12-05 15:23:11
【问题描述】:

我用物品排成一行。每个项目都包含一个标题、图像和按钮。图像保持其纵横比。 我不明白为什么 wrapper 会添加空格。

沙盒: https://codepen.io/krosert/pen/QWNNVxg

现在结果:

预期结果:

代码:

    <div class="panel">
      <div class="item">
        <span class="title">first item</span>
        <img src="https://i.ibb.co/JQMJ3BW/2311f3c1-2802-417f-9b7e-2147f066e260.jpg">
        <div class="btns">
          <button>1</button>
          <button>2</button>
          <button>3</button>
        </div>
      </div>
      <div class="item">
        <span class="title">second item</span>
        <img src="https://i.ibb.co/wMyyz1n/934tvi5uykv2.jpg">
        <div class="btns">
          <button>1</button>
          <button>2</button>
          <button>3</button>
        </div>
      </div>
    </div>
    .panel{
      position: fixed;
      background-color: #685;
      top: 30px;
      height: 200px;
      display: flex;
      width: 100%;
    }
    .item{
      margin: 6px;
      border: 2px solid black;
      background-color: #553;
      display: flex;
      flex-direction: column;
      align-items: flex-start;
      box-shadow: 0 0 5px;
      max-width: 300px;
    }
    img {
      max-height: 100%;
      max-width: 100%;
      height: auto;
      width: auto;
      min-height: 0;
      min-width: 0;
    }

【问题讨论】:

  • flex-direction: column; 这将关心高度,并让宽度成为变量 chrome 解决了这个问题,因为它重新计算 FF 并不是因为它可能导致无限循环,问题是这三个中的哪一个元素应该定义.item 的宽度?因为现在它是最大的项目,即调整大小之前的图像,为什么还有剩余空间
  • 定义宽度 .item 应该是最大宽度(标题或图像或 btns)。我明白你在说什么。图像缩小后如何强制计算宽度 .item?
  • 它不能是最大图像,因为在这种情况下浏览器只会考虑第一个尺寸,你必须在使用它们之前自己调整图像大小,并且你不能在 FF 中强制计算,在 chrome如果需要,您可以使用动画来完成
  • 1) mb 如果在img属性中设置原始尺寸宽度\高度可以吗?它可以帮助浏览器正确计算 for .item 吗? 2) 你能否修复我在 chrome 中工作的示例('如果需要,你可以使用动画来完成 chrome')
  • 它在 Windows Chrome 83(64 位)中对我来说已经很好了

标签: html css layout flexbox


【解决方案1】:

删除 align-items: flex-start; 并添加 object-fit: cover; object-position: top; 到img

【讨论】:

  • 结果:图像被裁剪。与“预期结果”不匹配i.ibb.co/sQgzMp0/a3.png
  • 因为你的图片有不同的尺寸,所以没有办法在不裁剪和填充整个空白区域的情况下显示图片。
【解决方案2】:

删除这一行:

.items {
align-items: flex-start;
}

您正在做的是告诉 items 元素是将图像推送到其父容器列的开头。将宽度的其余部分留作空白。

要解决图像尺寸溢出其容器的问题,请为 .items div 设置最大高度:

.items{
  max-height: 95%;
}

然后将图像的高度设置为不会导致溢出:

img {
  max-height: 140px;
  object-fit: contain;
}

【讨论】:

  • 我明白了:i.ibb.co/sCnpYBG/a1.png 图像不合时宜。与“预期结果”不匹配
  • 我已编辑我的帖子以解决您遇到的问题。我的回答是直接回答您关于 flex 对齐创建的额外空间的问题。在我的辩护中,我没有继续为你完成你的工作,因为那不是被要求的。如果您对我的回答投了反对票,我会恳请您改变主意。谢谢
  • 非常糟糕的解决方案,带有幻数,恒定大小... ps。我不反对
  • 这不是一个理想的解决方案,不。但问题是你有不同纵横比的图像。因此,如果您将一组 css 样式应用于所有图像,它就不会像您的“预期结果”那样工作。您可以期望图像的原始尺寸会在固定的“面板”容器之外扩展,或者您必须根据固定的宽度或高度将它们设置为具有相同的比例:example
猜你喜欢
  • 2022-07-26
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多