文本溢出省略号在嵌套的 flexbox 中不起作用

新手上路,请多包涵

我有一个用 flexboxes 创建的两列布局。

在右列中,我有两行,第一行包含标题,第二行包含页面内容。

在标题中,我有三列、一个按钮、一些文本和一个按钮。

我希望按钮位于列的左侧和右侧,文本占据任何额外的空间。

最后,我希望文本具有 white-space:nowraptext-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 许可协议

阅读 429
2 个回答

您的代码中有两个问题阻止省略号工作:

  1. div.right 包含 div.header ,它又包含按钮和文本。

div.right 是主容器中的弹性项目( .container )。

默认情况下, 弹性项目不能小于其内容的大小。弹性项目的初始设置是 min-width: auto

这意味着您的文本长度(不换行)将为父弹性项目设置最小尺寸。使弹性项目能够缩小超过其内容的一种方法是将弹性项目设置为 min-width: 0

您已经为 .content 弹性项目完成了此操作,但还需要在 .right 项目上进行设置。

  1. 您已将 .content 元素设置为 flex: 0 1 auto

这告诉弹性项目使用内容的大小( flex-basis: auto )。文本设置大小。

相反,将宽度设置为 0 并让 flex 容器根据需要分配空间。 您可以使用 --- 执行此操作,它与 flex: 1 1 0 flex: 1

 .container {
  display: flex;
  height: 100vh;
}
.left {
  width: 200px;
  background-color: yellow;
}
.right {
  flex: 1;
  background-color: blue;
  color: white;
  min-width: 0;             /* NEW */
}
.header {
  background: red;
  color: white;
  display: flex;
  flex-direction: row;
}
.header .content {
  white-space: nowrap;
  flex: 1;                  /* ADJUSTMENT */
  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>

修改后的小提琴

原文由 Michael Benjamin 发布,翻译遵循 CC BY-SA 3.0 许可协议

的值:

 white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;

仅当您的元素的内容超过其宽度时才会起作用。

您可以设置 .header .content 的宽度:

 .header .content {
    width: 50%;
}

它会像您期望的那样工作:

http://jsfiddle.net/t82pqks4/

原文由 Dekel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题