【问题标题】:Firefox stretching an element centered with FlexboxFirefox 以 Flexbox 为中心拉伸元素
【发布时间】:2015-12-22 10:27:15
【问题描述】:

我正在尝试将任意大小的元素(在我的情况下为图像)居中放置在一个框内。在 Webkit 浏览器中一切正常,但 Firefox 会拉伸长而不是宽的图像。

为了说明这个问题,我创建了 3 个div 框,每个框都包含不同大小的图像。这些框都设置为固定的宽度和高度,并且应用了一些 flexbox 规则来垂直和水平居中图像。

* {
  box-sizing: border-box;
}

.box {
  display: flex;
  width: 100px;
  height: 100px;
  border: 1px solid black;
  justify-content: center;
  align-items: center;
  float: left;
  margin-right: 50px;
}

.box img {
  max-width: 100%;
  max-height: 100%;
}
<div class="box">
  <img src="http://dummyimage.com/150x150/eeeeee.png">
</div>
<div class="box">
  <img src="http://dummyimage.com/300x150/eeeeee.png">
</div>
<div class="box">
  <img src="http://dummyimage.com/150x300/eeeeee.png">
</div>

img 应该缩小,以便它们完全填满框(水平或垂直,哪一边更长),但保持纵横比。这正是 Webkit 浏览器中发生的情况。然而,Firefox 只是在垂直方向上拉伸了一个长于高的图像。如何使 Firefox 的行为方式与所有 Webkit 浏览器一样?

【问题讨论】:

  • 对我来说,Firefox 和 Chrome 的效果是一样的。
  • 对不起,我包含了错误的代码 sn-p。现在已经修复了。
  • 我可以确认这种奇怪的行为。似乎 FF 忽略了“align-items: center”,而是使用了“stretch”(这是默认设置)。删除该行(默认)或显式设置“拉伸”时,Chrome 中会实现相同的行为。奇怪的是,[在此消息中](lists.w3.org/Archives/Public/www-style/2012Apr/0719.html)提到了类似的东西,但那是很久以前的......

标签: html firefox flexbox


【解决方案1】:

对图像使用“object-fit: contains”似乎可以解决问题:)

.box img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}

http://jsfiddle.net/xjwguxs6/

【讨论】:

    【解决方案2】:

    设置flex-basis: 100% 解决了这个问题,因为它设置了弹性项目的初始主尺寸。如果 flex-direction 是反向的,即列,您将需要使用 flex-basis: 100% on nth-child(3)

    .box:nth-child(2) img {
      flex-basis: 100%;
    }
    

    * {
      box-sizing: border-box;
    }
    .box {
      display: flex;
      width: 100px;
      height: 100px;
      border: 1px solid black;
      justify-content: center;
      align-items: center;
      float: left;
      margin-right: 50px;
    }
    .box img {
      max-width: 100%;
      max-height: 100%;
    }
    .box:nth-child(2) img {
      flex-basis: 100%;
    }
    <div class="box">
      <img src="http://dummyimage.com/150x150/eeeeee.png">
    </div>
    <div class="box">
      <img src="http://dummyimage.com/300x150/eeeeee.png">
    </div>
    <div class="box">
      <img src="http://dummyimage.com/150x300/eeeeee.png">
    </div>

    【讨论】:

    • 如果您知道图像的尺寸,那就可以了。但是,我正在寻找一个通用的解决方案。在我的示例中设置flex-basis: 100% 解决了第二张图片的问题,但它对第三张图片造成了问题(然后在Firefox 中它被拉伸到100% 宽度)。
    • 由于这里无法创建sn-p,所以我做了一个jsfiddle:jsfiddle.net/m4r73n/17e1fm1o/4。它不适用于 Firefox (v41.0)。
    猜你喜欢
    • 2017-06-10
    • 2017-05-21
    • 2016-05-04
    • 2021-07-03
    • 2016-03-18
    • 2017-05-09
    • 2012-07-25
    • 2015-10-18
    • 1970-01-01
    相关资源
    最近更新 更多