html - 使用文本溢出 : ellipsis and flexbox align-items: center in combination

标签 html css flexbox ellipsis

我有一个 div,它是一个包装器,里面有一些子 div。我正在使用 flexbox 将它们放置在彼此下方。现在,子 div 有一个文本。文本通过 align-items: center; 垂直对齐。子 div 的宽度取决于它的文本。当文本与 wrapper 一样长时,div 应该停止增长并且其中的文本应该被剪掉。为此,我尝试使用 text-overflow: ellipsis;。它没有按预期工作。我知道我可以在 flexbox 的情况下使用 display: inline-block;,但我想使用 flexbox 来组合对齐文本使用 text-overflow: ellipsis; 但它似乎不适用于我的示例。目前,带有长文本的元素与包装重叠,也没有省略号。该元素具有固定高度。

我为这个主题找到的唯一答案是这个,但答案对我没有帮助:Ellipsis in flexbox container

希望它足够清楚。

.wrapper {
  display: flex;
  flex-direction: column;
  background-color: lightcoral;
  padding: 10px;
  flex-wrap: wrap;
}

.wrapper__item {
  min-width: 0;
  flex-basis: 50%;
  align-self: flex-start;
  flex-direction: row;
  width: auto;
  max-width: 100%;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 5px 10px;
  border: 1px solid black;
  border-radius: 5px;
  margin-bottom: 10px;
  background-color: white;
  height: 50px;
}
<div class="wrapper">
  <div class="wrapper__item">Proin eget tortor risus. Cras ultricies ligula sed magna dictum porta. Vivamus magna justo, lacinia eget consectetur sed, convallis at tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec rutrum congue leo eget malesuada. Vivamus suscipit
    tortor eget felis porttitor volutpat. Nulla porttitor accumsan tincidunt. Curabitur aliquet quam id dui posuere blandit. Vivamus magna justo, lacinia eget consectetur sed, convallis at tellus. Donec rutrum congue leo eget malesuada. Curabitur arcu
    erat, accumsan id imperdiet et, porttitor at sem. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a. Nulla porttitor accumsan tincidunt. Cras ultricies ligula sed magna dictum porta.</div>

  <div class="wrapper__item">Proin eget tortor ri.</div>

  <div class="wrapper__item">Proin eget tortor ri.Proin eget tortor ri.</div>
</div>

最佳答案

text-overflow: ellipsis 不适用于 flex 容器(display: flex)。

主要原因是文本节点变成了一个匿名的 flex 子节点并且需要 min-width: 0 来表现(否则它不会缩小到超出它的内容大小),但是正如一个可以'使用 CSS 定位文本节点,我们需要包装它,这里使用 span 完成。

这是一篇对 The Automatic Minimum Size of Flex Items 有很好解释的帖子


注意 1:父溢出是由 width + padding 引起的,box-sizing: border-box 将解决这个问题。

注意 2:要让 align-items: center 生效,item 需要一个高度,这里给定 50px。

堆栈片段

.wrapper {
  display: flex;
  flex-direction: column;
  background-color: lightcoral;
  padding: 10px;
}

.wrapper__item {
  align-self: flex-start;
  max-width: 100%;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  padding: 5px 10px;
  border: 1px solid black;
  border-radius: 5px;
  margin-bottom: 10px;
  background-color: white;
  height: 50px;
}
.wrapper__item span {
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}
<div class="wrapper">
  <div class="wrapper__item"><span>Proin eget tortor risus. Cras ultricies ligula sed magna dictum porta. Vivamus magna justo, lacinia eget consectetur sed, convallis at tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec rutrum congue leo eget malesuada. Vivamus suscipit
    tortor eget felis porttitor volutpat. Nulla porttitor accumsan tincidunt. Curabitur aliquet quam id dui posuere blandit. Vivamus magna justo, lacinia eget consectetur sed, convallis at tellus. Donec rutrum congue leo eget malesuada. Curabitur arcu
    erat, accumsan id imperdiet et, porttitor at sem. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a. Nulla porttitor accumsan tincidunt. Cras ultricies ligula sed magna dictum porta.</span></div>

  <div class="wrapper__item">Proin eget tortor ri.</div>

  <div class="wrapper__item">Proin eget tortor ri.Proin eget tortor ri.</div>
</div>

关于html - 使用文本溢出 : ellipsis and flexbox align-items: center in combination,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48545178/

相关文章:

html - 使两个 div 位于同一条边距线上,即使浏览器的大小发生变化也保持在那里

javascript - 图像序列动画只加载一次而不是无限次

javascript - 使用 javascript 从文本文件中获取值

ruby-on-rails - 如何在我的 Nokogiri 文档中检索一组唯一的父节点?

html - 固定 flex 导航栏后面的内容而不是下面的内容

css - 如何将 flex-direction 和 flex-wrap 添加到同一行?

css - 图像作为 flex 元素在 Chrome 中不随最大宽度缩放

html - IE 和 Chrome/Mozilla 中的 Img 大小不同

html - 在其他 div 上方的行表中显示下拉列表

html - 导航菜单出现在其父项的底部