我有一个用 flexboxes 创建的两列布局。
在右列中,我有两行,第一行包含标题,第二行包含页面内容。
在标题中,我有三列、一个按钮、一些文本和一个按钮。
我希望按钮位于列的左侧和右侧,文本占据任何额外的空间。
最后,我希望文本具有 white-space:nowrap
和 text-overflow:ellipsis
属性以截断长标题。
我的问题是: 我无法让文本换行在嵌套在另一个 flexbox 中的 flexbox 中正常工作,如此小提琴所示:
http://jsfiddle.net/maxmumford/rb4sk3mz/3/
.container {
display: flex;
height: 100vh;
}
.left {
width: 200px;
background-color: yellow;
}
.right {
flex: 1;
background-color: blue;
color: white;
}
.header {
background: red;
color: white;
display: flex;
flex-direction: row;
}
.header .content {
white-space: nowrap;
flex: 0 1 auto;
text-overflow: ellipsis;
overflow: hidden;
min-width: 0;
}
.header .buttons {
background: green;
flex: 1 0 auto;
}
.header .content:hover {
white-space: normal;
}
<div class="container">
<div class="left">
content left
</div>
<div class="right">
<div class="header">
<div class="buttons">buttons</div>
<div class="content">
This content is really long and should wrap with ellipses, but for some reason it doesn't work when it's nested in a container with display: flex
</div>
<div class="buttons">buttons</div>
</div>
content right
</div>
</div>
但是,当标题未嵌套在弹性框内时,完全相同的代码有效:
http://jsfiddle.net/maxmumford/p7115f2v/1/
.header {
background: red;
color: white;
display: flex;
flex-direction: row;
}
.header .content {
white-space: nowrap;
flex: 0 1 auto;
text-overflow: ellipsis;
overflow: hidden;
min-width: 0;
}
.header .buttons {
background: green;
flex: 1 0 auto;
}
<div class="header">
<div class="buttons">buttons</div>
<div class="content">
This content is really long and is wrapped correctly... This content is really long and is wrapped correctly... This content is really long and is wrapped correctly... This content is really long and is wrapped correctly... This content is really long
and is wrapped correctly... This content is really long and is wrapped correctly... This content is really long and is wrapped correctly...
</div>
<div class="buttons">buttons</div>
</div>
我怎样才能在第一小提琴中实现我想要的?
谢谢
原文由 Max Mumford 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的代码中有两个问题阻止省略号工作:
div.right
包含div.header
,它又包含按钮和文本。div.right
是主容器中的弹性项目(.container
)。默认情况下, 弹性项目不能小于其内容的大小。弹性项目的初始设置是
min-width: auto
。这意味着您的文本长度(不换行)将为父弹性项目设置最小尺寸。使弹性项目能够缩小超过其内容的一种方法是将弹性项目设置为
min-width: 0
。您已经为
.content
弹性项目完成了此操作,但还需要在.right
项目上进行设置。.content
元素设置为flex: 0 1 auto
。这告诉弹性项目使用内容的大小(
flex-basis: auto
)。文本设置大小。相反,将宽度设置为 0 并让 flex 容器根据需要分配空间。 您可以使用 --- 执行此操作,它与
flex: 1 1 0
flex: 1
。修改后的小提琴