【问题标题】:Flexbox ellipsize first child before secondFlexbox在第二个之前椭圆化第一个孩子
【发布时间】:2016-05-13 15:49:56
【问题描述】:

我有一个 flex-box 容器 (.search-bar),里面有两个包含文本的 div (.title)。我希望第二个孩子占用所有额外的空间,并在空间有限时成为最后一个椭圆形的孩子。即第一个孩子应该根据需要椭圆化以保持第二个孩子完全显示,并且第二个孩子应该只有在第一个孩子不再可见时才椭圆化。

演示:

.search-bar {
  flex: 1;
  display: flex;
  align-items: center;
  overflow: hidden;
  width: 500px;
  background: white;
}

.title {
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
  flex-shrink: 1;
}

.title:last-of-type {
  flex: 1;
  flex-shrink: 0;
}

.title + .title::before {
  content: '>';
  margin: 0 10px;
}
<div class='search-bar'>
  <div class='title'>
  Doop Doop Doop Doop Doop Doop Doop
  </div>
  <div class='title'>
  Doge Doge Doge Doge Doge Doge Doge
  </div>
</div>

last-of-type 标题上的 flex-shrink: 0 似乎没有任何作用,最后一个子元素始终是椭圆形的。

有没有办法让第一个标题在第二个之前变成椭圆形?

这是一个小提琴https://jsfiddle.net/6fs9gc00/

【问题讨论】:

  • 第二个.title.search-bar中其类型的最后一个标签吗? :*-type 选择器仅适用于标签,不适用于类名。
  • 请包含一个 MCVE,Andrew。迭代和帮助你会更容易。
  • @Shaggy,是的,选择器已正确应用于最后一个 .title
  • 想不出任何可以在 flexbox 中“优先考虑”收缩/省略的设置/属性......事实上,flexbox 的全部意义。
  • @TylerH 添加了一个带有基本示例的 jsFiddle。

标签: css flexbox ellipsis


【解决方案1】:

这似乎可以做到

.title {
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
}
.title.first {
  flex: 0 1 auto;
}
.title.last {
  flex: 1 0 auto;
}

小提琴:https://jsfiddle.net/6nbzkkjg/4/

编辑:更新了 @Andrew 在 cmets 中的修改

【讨论】:

  • 唯一的问题是第二个标题永远不会省略:jsfiddle.net/6nbzkkjg/3
  • 我能够修改您的示例以获得我正在寻找的内容:jsfiddle.net/6nbzkkjg/4
  • 看起来并没有实际更新。如果您使用我的更改对其进行更新,我会将您的答案标记为已接受:)
  • 谢谢。将链接添加到您的 jsfiddle。
【解决方案2】:

似乎您可以通过将flex: 1; 添加到.title {} 来实现此目的。如果将宽度更改为 400px(例如),您可以看到第二个 div 仍然会以省略号截断,但第一个 div 会先截断。

.search-bar {
    display: flex;
    overflow: hidden;
    width: 500px;
    background: #cfcfcf; /* Changed for visibility in Stack Snippet */
}

.title {
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
    flex: 1;
    flex-shrink: 1;
}

.title:last-of-type {
    flex: 1;
    flex-shrink: 0;
}

.title + .title::before {
    content: '>';
    margin: 0 10px;
}
<div class='search-bar'>
    <div class='title'>
        Doop Doop Doop Doop Doop Doop Doop
    </div>
    <div class='title'>
        Doge Doge Doge Doge Doge
    </div>
</div>

我从.search-bar {} 中删除了flex: 1;align-content: center;,因为它们没有做任何事情。

【讨论】:

  • 这不太像我想要的那样工作。当将.search-bar 设置为 400px 的宽度时,它会同时省略两个孩子。我能够根据以下 C14L 的回答提出一个解决方案:jsfiddle.net/6nbzkkjg/4
  • @Andrew 啊,我明白了。在演示之前,我错过了您问题的最后一行。看来你已经明白了!
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 2017-06-06
  • 1970-01-01
  • 2017-03-11
  • 2023-01-26
  • 1970-01-01
  • 2012-08-16
  • 2015-11-02
相关资源
最近更新 更多