flex 项目不使用 flex-grow 扩展或收缩

Posted

技术标签:

【中文标题】flex 项目不使用 flex-grow 扩展或收缩【英文标题】:flex items not expanding or shrinking with flex-grow 【发布时间】:2020-04-24 12:55:05 【问题描述】:

我正在尝试创建一种效果,其中图像的多个垂直部分并排,并且当您将鼠标悬停在图像上时,容器会增长,而其他容器会缩小以“显示”完整图像。我希望图像的唯一缩放比例是当它完全“显示”时它适合浏览器窗口。

这里是这个效果的一个片段,没有任何图像:

* 
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;


.row 
  flex-basis: 0;
  display: flex;
  flex-direction: row;


.column 
  flex-grow: 1;
  border: 2px solid #000;
  transition: all 300ms ease-in-out;


.column:hover 
  flex-grow: 4.3;
<div class="row">
  <div class="column">
  </div>
  <div class="column">
  </div>
  <div class="column">
  </div>
</div>

但是现在,如果我保持一切不变,只是在“列”div 中添加 img 标签,那么任何缩小或增长都会完全停止。

* 
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;


.row 
  flex-basis: 0;
  display: flex;
  flex-direction: row;


.column 
  flex-grow: 1;
  border: 2px solid #000;
  transition: all 300ms ease-in-out;


.column:hover 
  flex-grow: 4.3;
<div class="row">
  <div class="column">
    <img src="https://images.pexels.com/photos/2194261/pexels-photo-2194261.jpeg" />
  </div>
  <div class="column">
    <img src="https://images.pexels.com/photos/1276553/pexels-photo-1276553.jpeg" />
  </div>
  <div class="column">
    <img src="https://images.pexels.com/photos/774731/pexels-photo-774731.jpeg" />
  </div>
</div>

我是 CSS 新手,所以我确信我只是不熟悉一些关于 flexbox 的明显概念,但我所有的谷歌搜索都是徒劳的。任何答案、方向或学习网站建议将不胜感激。

【问题讨论】:

【参考方案1】:

这个谜题缺少两块。

    您已将列宽设置为flex-grow: 1。这意味着flex-basis 仍为其默认值auto(基于内容)。因此,该列的大小取决于图像大小。您可以添加flex-basis: 0,或者直接使用flex: 1

    完整解释:Make flex-grow expand items based on their original size


    默认情况下,Flex 项目不能缩小到其内容大小以下。他们的初始设置是min-width: auto。您需要使用 min-width: 0 覆盖此默认值。

    完整解释:Why don't flex items shrink past content size?

.row 
  display: flex;
  height: 100vh;


.column 
  min-width: 0; /* new */
  flex: 1;      /* adjustment */
  border: 2px solid #000;
  transition: all 300ms ease-in-out;


.column:hover 
  flex-grow: 4.3;


body 
  margin: 0;
<div class="row">
  <div class="column">
    <img src="https://images.pexels.com/photos/2194261/pexels-photo-2194261.jpeg">
  </div>
  <div class="column">
    <img src="https://images.pexels.com/photos/1276553/pexels-photo-1276553.jpeg">
  </div>
  <div class="column">
    <img src="https://images.pexels.com/photos/774731/pexels-photo-774731.jpeg">
  </div>
</div>

【讨论】:

以上是关于flex 项目不使用 flex-grow 扩展或收缩的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 flex-grow 使图像填充 flex 项目?

Flex的成长预期不施胶弯曲项目

在 flexbox 中过渡 flex-grow 项目

Flex-grow 不尊重边界框。错误与否?以及有啥办法克服吗?

flex易忘部分

flex易忘部分