html - CSS 文本溢出省略号在 Grid/Flex 中不起作用

标签 html css flexbox grid css-grid

我无法让 text-overflow 省略号在 CSS 网格中工作。文本被截断但省略号点不显示。这是我的 CSS:

.grid {
  display: grid;
  margin: auto;
  width: 90%;
  grid-template-columns: 2fr 15fr
}

.gridItem {
  border: 1px solid red;
  display: flex;
  height: calc(50px + 2vw);
  align-items: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
<div class="grid">
  <div class="gridItem">Why no ellipsis on this div?</div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
</div>

最佳答案

要使省略号起作用,您需要定位文本而不是容器

在您的代码中,您在 flex 容器(网格项)上设置省略号:

.gridItem {
    display: flex;
    align-items: center;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    height: calc(50px + 2vw);
    border:1px solid red;
}

容器的子元素是文本。除非你不能将任何 CSS 直接应用于文本,因为它是一个匿名 flex 元素(即,一个周围没有定义标签的 flex 元素)。因此,您需要将文本包装到一个元素中,然后应用省略号代码。

来自这里:

<div class="gridItem">Why no ellipsis on this div?</div>

对此:

<div class="gridItem"><span>Why no ellipsis on this div?</span></div>

然后您必须应对 flex 元素的最小大小调整算法。此规则默认设置,规定 flex 元素不能小于其沿主轴的内容。这个问题的解决方案是将 flex 元素设置为 min-width: 0,这会覆盖默认的 min-width: auto

.grid {
  display: grid;
  margin: auto;
  width: 90%;
  grid-template-columns: 2fr 15fr;
}

.gridItem {
  display: flex;
  align-items: center;
  height: calc(50px + 2vw);
  border: 1px solid red;
  min-width: 0;
}

.gridItem > span {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
<div class="grid">
  <div class="gridItem"><span>Why no ellipsis on this div?</span></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
  <div class="gridItem"></div>
</div>

revised codepen

这些帖子提供了更详细的解释:

关于html - CSS 文本溢出省略号在 Grid/Flex 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51351137/

相关文章:

javascript - 将鼠标悬停在图像上,图像下方的图像不透明度和标题颜色发生变化......当标题变成两行时,它会破坏格式

html - float :Right on one list item not working

HTML/CSS - 在第一个元素之后滚动快照,之后继续定期滚动

html - 使用 Flex 尝试根据图像获取框

css flexbox按屏幕宽度打破父级

javascript - 如何从 AJAX 请求中解析 HTML?

javascript - Div 相对于视口(viewport)顶部的位置

jquery - 在 DIV 中加载的网站的宽度和高度属性

html - 非常基本的 HTML 页面不会显示

css - 以像素为单位的最大允许高度,CSS