省略号在flex容器中不起作用

时间:2016-10-15 21:52:07

标签: html css css3 flexbox

我试图用flex创建一个布局(将是一个音乐播放器)。

我有3个按钮(上一个,上一个,下一个,由红色方块表示),我总是想要在同一条线上。

然后,我想要在按钮右侧显示一些歌曲信息(当前时间,歌曲标题和总时间)。

我几乎总是希望总时间在最右边,而歌曲标题要填满剩余的宽度(使用flex-grow),但要在窗口变小时用省略号截断。

有没有人知道如何调整它以使其正常工作?



.wrapper {
  display: flex;
  align-items: center;
}
ul {
  display: inline-block;
  list-style: none;
  flex-shrink: 0;
}
li {
  display: inline-block;
  width: 30px;
  height: 30px;
  background: red;
  margin-right: 3px;
}
.song-wrapper {
  background: beige;
  display: flex;
  flex-grow: 1;
}
.song-title {
  background: blue;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  flex-grow: 1;
}

<div class="wrapper">
  <ul>
    <li></li>
    <li></li>
    <li></li>
  </ul>
  <div class="song-wrapper">
    <span>1:23</span>
    <span class="song-title">This is the song title and I want it to ellipsize if the screen shrinks</span>
    <span>4:22</span>
  </div>
</div>
&#13;
&#13;
&#13;

https://jsfiddle.net/13ohs7jx/

1 个答案:

答案 0 :(得分:7)

解决方案

您已将overflow: hidden应用于.song-title

它也需要在父母身上:

.song-wrapper {
   overflow: hidden; /* NEW */
   background: beige;
   display: flex;
   flex-grow: 1;
}

.wrapper {
  display: flex;
  align-items: center;
}
ul {
  display: inline-block;
  list-style: none;
  flex-shrink: 0;
}
li {
  display: inline-block;
  width: 30px;
  height: 30px;
  background: red;
  margin-right: 3px;
}
.song-wrapper {
  background: beige;
  display: flex;
  flex-grow: 1;
  overflow: hidden;
}
.song-title {
  background: aqua;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  flex-grow: 1;
}
<div class="wrapper">
  <ul>
    <li></li>
    <li></li>
    <li></li>
  </ul>
  <div class="song-wrapper">
    <span>1:23</span>
    <span class="song-title">This is the song title and I want it to ellipsize if the screen shrinks</span>
    <span>4:22</span>
  </div>
</div>

revised fiddle

说明

.song-wrapper.song-title都是弹性项目。

.song-wrapper是主要Flex容器(.wrapper)的子项,.song-title是嵌套Flex容器(.song-wrapper)的子项。

默认情况下,弹性项目不能小于其内容的大小。弹性项目的初始设置为min-width: auto。这意味着flex项目中的文本正在设置最小宽度。

要覆盖此设置,您可以使用min-width: 0overflow: hidden

虽然您已将overflow: hidden应用于.song-title,但您在min-width: auto上没有覆盖.song-wrapper的任何内容。

有关更详细的说明,请参阅此帖: