html - flex 项目不使用 flex-grow 扩展或收缩
问题描述
我正在尝试创建一种效果,其中图像的多个垂直部分并排放置,并且当您将鼠标悬停在图像上时,容器会增长,而其他容器会缩小以“显示”完整图像。我希望图像的唯一缩放是当它完全“显示”时它适合浏览器窗口。
这是此效果的片段,没有任何图像:
* {
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 的明显概念,但我所有的谷歌搜索都是徒劳的。任何答案、方向或学习网站推荐将不胜感激。
解决方案
这个谜题中缺少两块。
您将列宽设置为
flex-grow: 1
。这意味着它flex-basis
仍然是默认值,auto
(基于内容)。因此,该列的大小取决于图像大小。您可以添加flex-basis: 0
,也可以只使用flex: 1
.
默认情况下,Flex 项目不能缩小到其内容的大小以下。它们的初始设置是
min-width: auto
。您需要使用 覆盖此默认值min-width: 0
。完整解释:为什么弹性项目不缩小超过内容大小?
.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>
推荐阅读
- android - 要创建哪些 Android 模拟器以获得不同屏幕尺寸的代表性样本?
- javascript - 为 React TypeScript 中的 ...props 中的 onClick 属性添加类型
- javascript - 如何停止更漂亮以自动添加新行?
- laravel - 如何在laravel中加入查询不同的表
- python - 错误:进程以退出代码 132 完成(被信号 4:SIGILL 中断)
- nestjs - 如何在嵌套数组中设置时间戳
- google-apps-script - 如何运行 Google 表格应用脚本,如果出现错误,则调用电子表格函数 IMPORTXML() 来填充单元格?
- python - Pandas:创建 1 个函数来读取 json,然后创建另一个函数来创建数据框
- python-3.x - GCP - 无法访问 main.py 中 GCP 存储桶中保存的模型文件
- kubernetes - K8s 节点标签,有键,没有值