防止子元素在 flexbox 中溢出其父元素 [英] Prevent a child element from overflowing its parent in flexbox
问题描述
我正在开发一个 Web 应用程序,该应用程序显示一个大的卡片网格,其高度本质上是可变的.
为了美观,我们使用了 jQuery 的 .matchHeight()
来均衡每行卡片的高度.
它的性能不能很好地扩展,所以今天我一直在迁移到基于 flex-box 的解决方案,它的速度要快得多.
但是,我丢失了一个行为 - 如果不适合,卡片标题的内容应该用省略号截断.
目标:
- 3 列
- 列宽因填充父级而异
- 列之间的恒定间距
- 高度在一行内均衡
我如何安排容器大小得到遵守,text-overflow: ellipsis;
和 white-space: nowrap;
得到尊重?
(没有 jQuery 标签,因为我们正在远离它)
我的当前形式的解决方案,除了截断之外,它实现了我的所有目标:
https://codepen.io/anon/pen/QvqZYY
#container {显示:弹性;弹性方向:行;flex-wrap: 包裹;justify-content: flex-start;/* 偏置卡片从左边缘堆叠 */对齐项目:拉伸;/* 在一行中,所有卡片高度相同 */边框:薄实心灰色;}.card-wrapper {宽度:33.33%;显示:弹性;背景:#e0e0ff;}.卡片 {弹性增长:1;边距:7px;显示:弹性;弹性方向:列;边框:薄实心灰色;背景:#e0ffff;}.card div {边框:薄实心灰色;}.card div:nth-child(1) {空白:nowrap;文本溢出:省略号;}.card div:nth-child(2) {弹性增长:2;}
<div class="card-wrapper"><div class="card"><div>标题</div><div>多行<br/>正文</div><div>页脚</div>
<div class="card-wrapper"><div class="card"><div>很长的漫无边际的标题,超出了容器的界限,除非你的屏幕真的很宽</div><div>正文</div><div>页脚</div></div></div><div class="card-wrapper"><div class="card"><div>Title</div><div>Body</div><div>Footer</div><;/div>
<div class="card-wrapper"><div class="card"><div>Title</div><div>Body</div><div>Footer</div><;/div>
<div class="card-wrapper"><div class="card"><div>Title</div><div>Body</div><div>Footer</div><;/div>