当前位置: 首页 > 知识库问答 >
问题:

flex子级上的文本溢出省略号不工作[重复]

吕子真
2023-03-14

我的容器带有flex。我希望中间的孩子将占据整个空间,因此我将其设置为flex:1。到现在为止,一直都还不错。

下一个级别是中间的孩子有2个孩子,所以我也想设置它flex(如果你失去了我,就跳到片段)和第一个孩子我设置省略号样式。现在,省略号停止工作。

如果你会点击按钮,你会看到一切都好短的文字;

有什么想法吗?

function toggle() {
  var el = document.querySelector('.el');
  el.textContent = el.textContent === 'short' ? 'long long long text' : 'short';
}
.wrapper {
  display: flex;
  width: 200px;
  align-content: stretch;
  padding: 5px;
  min-width: 0;
  border: 1px solid
}

.wrapper .child2 {
  flex-grow: 1;
}

.flex {
  display: flex;
  min-width: 0;
}

.el {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.child1 {
  background: red;
}

.child2 {
  background: blue;
}

.child3 {
  background: green;
}

.wrapper>* {
  padding: 5px;
}
<div class="wrapper">
  <div class="child1">child1</div>
  <div class="child2">
    <div class="flex">
      <div class="el">long long long text</div>
      <div>a</div>
    </div>
  </div>
  <div class="child3">child3</div>
</div>

<button onclick="toggle()">Toggle ellipsis text</button>

共有3个答案

隆康平
2023-03-14

显然,如果我设置中间子级(.child2)的最小宽度:0,它会神奇地工作。

根据@LGSon更新它在IE上不起作用。

function toggle() {
  var el = document.querySelector('.el');
  el.textContent = el.textContent === 'short' ? 'long long long text' : 'short';
}
.wrapper {
  display: flex;
  width: 200px;
  align-content: stretch;
  padding: 5px;
  min-width: 0;
  border: 1px solid
}

.wrapper .child2 {
  flex-grow: 1;
  min-width: 0;
}

.flex {
  display: flex;
}

.el {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.child1 {
  background: red;
}

.child2 {
  background: blue;
}

.child3 {
  background: green;
}

.wrapper>* {
  padding: 5px;
}
<div class="wrapper">
  <div class="child1">child1</div>
  <div class="child2">
    <div class="flex">
      <div class="el">long long long text</div>
      <div>a</div>
    </div>
  </div>
  <div class="child3">child3</div>
</div>

<button onclick="toggle()">Toggle ellipsis text</button>
巫马淳
2023-03-14

这就是你想要的吗?

我只是把overflow:隐藏的;text-overflow:省略号;到你的. Chil2

function toggle() {
  var el = document.querySelector('.el');
  el.textContent = el.textContent === 'short' ? 'long long long text' : 'short';
}
.wrapper {
  display: flex;
  width: 200px;
  align-content: stretch;
  padding: 5px;
  min-width: 0;
  border: 1px solid
}

.wrapper .child2 {
  flex-grow: 1;
}

.flex {
  display: flex;
  min-width: 0;
}

.el {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.child1 {
  background: red;
}

.child2 {
  background: blue;
  overflow:hidden;
  text-overflow: ellipsis;
}

.child3 {
  background: green;
}

.wrapper>* {
  padding: 5px;
}
<div class="wrapper">
  <div class="child1">child1</div>
  <div class="child2">
    <div class="flex">
      <div class="el">long long long text</div>
      <div>a</div>
    </div>
  </div>
  <div class="child3">child3</div>
</div>

<button onclick="toggle()">Toggle ellipsis text</button>
潘宪
2023-03-14

添加溢出:隐藏 。包装纸。儿童2

实际上,正如Mosh Feu在他的回答中所建议的那样,minwidth:0也应该可以跨浏览器工作,而且确实可以,尽管IE有缺陷,需要overflow

子2需要它的原因也是,因为它也是一个flex项,在这种情况下,flex项的默认值为auto,并且不允许它小于它的内容,所以通过添加溢出:隐藏(或任何值,但可见的),或最小宽度: 0,将让它。

function toggle() {
  var el = document.querySelector('.el');
  el.textContent = el.textContent === 'short' ? 'long long long text' : 'short';
}
.wrapper {
  display: flex;
  width: 200px;
  align-content: stretch;
  padding: 5px;
  min-width: 0;
  border: 1px solid
}

.wrapper .child2 {
  flex-grow: 1;
  overflow: hidden;
}

.flex {
  display: flex;
  min-width: 0;
}

.el {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.child1 {
  background: red;
}

.child2 {
  background: lightblue;
}

.child3 {
  background: green;
}

.wrapper>* {
  padding: 5px;
}
<div class="wrapper">
  <div class="child1">child1</div>
  <div class="child2">
    <div class="flex">
      <div class="el">long long long text</div>
      <div>a</div>
    </div>
  </div>
  <div class="child3">child3</div>
</div>

<button onclick="toggle()">Toggle ellipsis text</button>

 类似资料:
  • 问题内容: 我有的容器。我希望中间的孩子能占据整个空间,所以我定了它。到目前为止,一切都很好。 下一个级别是中间的孩子有2个孩子,因此我也希望将其设置为flex(如果您迷路了,请跳到摘要),第一个孩子设置省略号样式。现在,省略号停止工作。 如果您单击该按钮,您会看到所有带有短文本的内容都很好; 有任何想法吗? 问题答案: 添加到。 其实,MOSH Feu的建议在他的回答,也应该工作,确实,跨浏览器

  • 我知道这些帖子: 在flexbox中防止子元素溢出其父元素 flex子节点上的文本溢出省略号不工作 为什么flex项不缩小过去的内容大小? 没有答案从那里修复我在下面的代码片段中的问题。这是html树: 父柔性柱 子柔性行 标签flex(因此我可以垂直对齐文本) 我能让它工作的唯一方法是将标签设为,但我真的希望保留flex。 我已经做了: 关于儿童: 设置 设置 设置溢出:隐藏 设置

  • 我不知道为什么这个简单的CSS不起作用... null null 应该在第4次“测试”前后切断

  • 问题内容: 我不知道为什么这个简单的CSS无法正常工作… 应该切断第四次“测试” 问题答案: 仅在满足以下条件时起作用: 元素的宽度必须限制为(像素)。宽度(百分比)无效。 元素必须具有并设置。 您在这里遇到问题的原因是因为您的元素的不受限制。您确实有一个设置,但是因为该元素设置为(即默认值),所以它忽略了它,并且也没有其他任何约束其宽度的方法。 您可以通过执行以下任一操作来解决此问题: 将元素设

  • 我无法让工作,我希望有人能发现我找不到的错误。这是我的代码: HTML: CSS: JSFIDLE(JSIDLE):http://jsfiddle.net/59m5e6ex/ 我找到了这个,但据我所知,我的满足了所有要求。

  • 问题内容: 我有一条路径列表(由于缺少更好的词,也许面包屑痕迹可以更好地描述它们)。有些值太长而无法在其父项中显示,因此我正在使用。问题在于重要信息在右侧,因此我希望省略号出现在左侧。像这样的ASCII艺术: 请注意,第一行足够短,因此仍保持左对齐,而其他两行又太长,因此省略号出现在左侧。 我更喜欢仅CSS的解决方案,但是如果无法避免,JS很好。如果该解决方案仅适用于Firefox和Chrome,