图像弹性项目不会在弹性盒中缩小高度

Oli*_*Ash 6 html css image flexbox

我有一个包含img弹性项目的弹性容器。

我希望它img忽略其固有高度(90px),以便高度可以缩小以匹配同级的 flex 项目高度(根据默认align-items: stretch样式)。

.container {
    border: 1px solid;
    display: flex;
}

.item {
    border: 1px solid;
}

.content {
    width: 200px;
    height: 50px;
    background-color: hotPink;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
    <img class="item" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu-3yBSd2b6JCOMcGVSOFf8X49QB3Ik-OI87gKEMwWLrdJxP5qOErmZQ">
    <div class="item">
        <div class="content"></div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

如果我们交换imga ,我们可以看到所需的行为div

.container {
    border: 1px solid;
    display: flex;
}

.item {
    border: 1px solid;
}

.dynamicHeightContent {
    width: 120px;
    height: 100%;
    background-color: green;
}

.content {
    width: 200px;
    height: 50px;
    background-color: hotPink;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
    <div class="item">
        <div class="dynamicHeightContent"></div>
    </div>
    <div class="item">
        <div class="content"></div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我已经试过min-height: 0img,无济于事。

  • 适用于img但不适用的特殊行为是div什么?
  • 我们如何选择退出img的特殊行为,使其表现得像其他弹性项目(例如div)?如果没有办法选择退出,是否有推荐的解决方法?

请注意,虽然img不会缩小其高度,但它似乎会增长

.container {
    border: 1px solid;
    display: flex;
}

.item {
    border: 1px solid;
}

.content {
    width: 200px;
    height: 300px;
    background-color: hotPink;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
    <img class="item" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu-3yBSd2b6JCOMcGVSOFf8X49QB3Ik-OI87gKEMwWLrdJxP5qOErmZQ">
    <div class="item">
        <div class="content"></div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

注意:我很高兴忽略img的纵横比。我计划避免歪斜imgvia object-fit: cover

kuk*_*kuz 3

请注意,在您的示例中,item弹性项目而不是content- 您应该检查此处的拉伸行为item


我们如何选择退出 img 的特殊行为,使其表现得像其他 Flex 项目(例如 div)?

它的行为类似于其他弹性项目-作为弹性项目<img>可能不是很有用,但拉伸行为工作正常:

  • 如果图像的高度大于item,则item 拉伸到图像的高度
  • 如果图像的高度小于item,则图像将拉伸到打破其纵横比的高度content

请参阅下面的演示:

.container {
  border: 1px solid;
  display: flex;
}

.item {
  background: cadetblue;
}

.content {
  width: 200px;
  background-color: hotPink;
}

img {
  display: block;
}
Run Code Online (Sandbox Code Playgroud)
<h2>Small content</h2>
<div class="container">
  <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu-3yBSd2b6JCOMcGVSOFf8X49QB3Ik-OI87gKEMwWLrdJxP5qOErmZQ">
  <div class="item">
    <div class="content">some text here some text here some text here </div>
  </div>
</div>
<br/>
<h2>Large Content</h2>
<div class="container">
  <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu-3yBSd2b6JCOMcGVSOFf8X49QB3Ik-OI87gKEMwWLrdJxP5qOErmZQ">
  <div class="item">
    <div class="content">some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我已经尝试min-height: 0img,没有成功。

min-height: 0沿着弯曲方向赋予列弹性覆盖默认的自动行为(对于行方向,该属性是) - 这在横轴上不起作用。min-width

您可以在下面查看详细信息和一些示例:


将图像包装在容器中

现在将 包裹<img>在 div 中并看到相同的情况 -拉伸行为再次良好:

.container {
  border: 1px solid;
  display: flex;
}

.item {
  background: cadetblue;
}

.content {
  width: 200px;
  background-color: hotPink;
}

img {
  display: block;
}
Run Code Online (Sandbox Code Playgroud)
<h2>Small content</h2>
<div class="container">
  <div class="item">
    <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu-3yBSd2b6JCOMcGVSOFf8X49QB3Ik-OI87gKEMwWLrdJxP5qOErmZQ"></div>
  <div class="item">
    <div class="content">some text here some text here some text here </div>
  </div>
</div>
<br/>
<h2>Large Content</h2>
<div class="container">
  <div class="item">
    <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu-3yBSd2b6JCOMcGVSOFf8X49QB3Ik-OI87gKEMwWLrdJxP5qOErmZQ"></div>
  <div class="item">
    <div class="content">some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

现在的区别是,您object-fit现在可以在图像上成功使用(如果它是弹性项目,则无法正常工作):

.container {
  border: 1px solid;
  display: flex;
}

.item {
  background: cadetblue;
}

.content {
  width: 200px;
  background-color: hotPink;
}

img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
Run Code Online (Sandbox Code Playgroud)
<h2>Small content</h2>
<div class="container">
  <div class="item">
    <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu-3yBSd2b6JCOMcGVSOFf8X49QB3Ik-OI87gKEMwWLrdJxP5qOErmZQ"></div>
  <div class="item">
    <div class="content">some text here some text here some text here </div>
  </div>
</div>
<br/>
<h2>Large Content</h2>
<div class="container">
  <div class="item">
    <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu-3yBSd2b6JCOMcGVSOFf8X49QB3Ik-OI87gKEMwWLrdJxP5qOErmZQ"></div>
  <div class="item">
    <div class="content">some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)


我希望这个 img 忽略其固有高度(90px),以便高度可以缩小以匹配同级的弹性项目高度

忽略图像高度的唯一方法是在图像包装器上使用定位:

  • 相对于其包装器绝对定位图像,
  • 您可以为图像包装器指定宽度,也可以指定flex: 1水平item方向可用宽度的一半。

请参阅下面的演示:

.container {
  border: 1px solid;
  display: flex;
}

.item {
  background: cadetblue;
  flex: 1; /* equal width for items */
}

.content {
  width: 200px;
  background-color: hotPink;
}

.item:first-child { /* image container */
  position: relative;
}

img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  position: absolute; /* position absolutely */
  top: 0;
  left: 0;
}
Run Code Online (Sandbox Code Playgroud)
<h2>Small content</h2>
<div class="container">
  <div class="item">
    <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu-3yBSd2b6JCOMcGVSOFf8X49QB3Ik-OI87gKEMwWLrdJxP5qOErmZQ"></div>
  <div class="item">
    <div class="content">some text here some text here some text here </div>
  </div>
</div>
<br/>
<h2>Large Content</h2>
<div class="container">
  <div class="item">
    <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu-3yBSd2b6JCOMcGVSOFf8X49QB3Ik-OI87gKEMwWLrdJxP5qOErmZQ"></div>
  <div class="item">
    <div class="content">some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here some text here </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)