【问题标题】:`text-overflow: ellipsis;` behaves different in <a> than in <p>`text-overflow: ellipsis;` 在 <a> 中的行为与在 <p> 中的行为不同
【发布时间】:2014-07-22 13:59:41
【问题描述】:

我有这样的文字:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.

通常text-overflow: ellipsis;... 放在文本行的末尾,如下所示:

Lorem ipsum dolor sit amet, consetetur sadipscing elit...

但在我的情况下,查看的文本是这样的:

Lore... dolore magna aliquyam erat, sed diam voluptua.

当我使用这个 CSS 时:

p, a {
  max-width: 400px;

  overflow: hidden;
  text-overflow: ellipsis;

  display: block;
  display: -webkit-box;

  -webkit-line-clamp: 1;
  -webkit-box-orient: vertical;

  font-weight: normal;
  font-family: "Arial", sans-serif;
  text-decoration: none;
}

我在 CodePen (http://codepen.io/DerZyklop/pen/cDKFh) 中重新构建它,并发现省略号在 &lt;a&gt; 中的行为与在 &lt;p&gt; 中的行为不同。使用最新版本的 Chrome,我从我的 CodePen 中看到了这个结果:

知道为什么会这样吗?

【问题讨论】:

  • 您还应该在您的问题中发布您的 CSS,因为它对正在发生的事情至关重要。
  • 问题是这种现象只存在于 chrome 中还是其他浏览器中?
  • 好问题 - 确认这不会在 IE11 中发生,但是溢出省略号根本不起作用!
  • @CBauer,我通过调整 max-width 得到了在 IE10 中显示的省略号
  • @j08691 这就是我在 CodePen 中添加它的原因。

标签: html css ellipsis


【解决方案1】:

造成显示差异的属性是

display: -webkit-box;

由于该属性仅存在于older version of the Flexbox specification 中,因此您应该删除它。除非你有特定的原因吗?

编辑:看起来您正试图限制块 using an unsupported Webkit property 中的行数。这可能是个坏主意,因为不受支持的属性可以随时更改其行为,恕不另行通知。

也就是说,aren't many good ways to achieve that effect 没有 Javascript

【讨论】:

  • 你说得对。这是由-webkit-box 引起的。我在示例中使用它的原因是,在同一页面上存在完全相同的应用程序案例,但只有 3 行。所以,我可以使用 Sander Koedood 的示例,带 white-space: nowrap; 和不带 display: -webkit-box; 的单线。感谢您的 css-tricks.com 链接,我发现 this solution 用于多线。我会试试这个。谢谢!
  • 哦,太好了! ...我只是想通了,显然它只发生在单行中。而且由于-webkit-box 是规范的旧版本,我什至不想再理解单行问题;)
【解决方案2】:

虽然我不完全确定原因,但我确实有解决方案。

我认为因为p 标准是块元素,而a 是内联元素,所以overflow: ellipsis 的处理方式不同。

要解决这个问题,只需添加white-space: nowrap;,使文本保留在 1 行。使用 webkit-only css 势必在其他浏览器中出现问题。

p, a {
  max-width: 400px;

  overflow: hidden;
  text-overflow: ellipsis;

  display: block;

  white-space: nowrap;

  font-weight: normal;
  font-family: "Arial", sans-serif;
  text-decoration: none;
}

编辑:在对其进行了更多研究之后,我首先发现了它为什么不同。当文本溢出它的容器(因此得名)时,文本溢出起作用。只有块元素可以有固定的宽度和高度,使得只有块元素容易发生任何形式的溢出。

这就是为什么当它们获得显示块时它在两个元素上的工作方式相同(因此它们都是块元素,a 元素不是默认情况下),并且它们得到它们的宽度和高度放。在这种情况下,高度没有设置,但由于white-space: nowrap;,元素知道它不应该转到下一行,并且所有文本都在右侧溢出,因为它不能转到新行。

除此之外,并引用@Gareth(请参阅我的回答下的 cmets,以及他自己的回答):

“为什么会发生”是因为您使用的是属性 display: -webkit-box ,它没有任何固定的行为。没有关于它的文档,因为它来自旧规范并且不是应该使用的属性。

【讨论】:

  • 你的权利。它通过添加white-space: nowrap; 和删除display: -webkit-box; 来工作。顺便说一句。使-webkit-line-clamp: 1; -webkit-box-orient: vertical; 过时。为此非常感谢!但不幸的是,这只是解决方法,而不是我的问题“为什么会发生这种情况?”的答案。我试图找出的是:这仅仅是 webkit 的错误,还是省略号的定义,或者它背后是否有任何逻辑,不知何故..
  • 如第一行所述:我不完全确定为什么。如果我发现,我会更新我的答案。几乎总是有一个合乎逻辑的解释,所以我会尝试找到它。
  • 我已经更新了我的答案。这对您来说足够解释问题了吗?
  • 正如我在回答中提到的,“为什么会发生”是因为您使用的属性 display: -webkit-box 没有任何固定行为。没有关于它的文档,因为它来自旧规范并且不是应该使用的属性。
  • 我把display: -webkit-box; 给了

    ... 所以我希望在这两个元素上看到至少相同的不需要的行为。无论如何..它有效,@Gareth explained that there is no fixed behaviour-webkit-box。我在这里完成了。非常感谢您的帮助!

【解决方案3】:

&lt;a&gt; 中使用&lt;span&gt;

<a href="#"><span>Raspberry Pi and Synology NAS for XBMC and BitTorrent. The tv-show automation plans.</span></a>

see the code

虽然,不确定display: -webkit-box; 做了什么。但它似乎有一种奇怪的行为。尝试改用display: block

【讨论】:

  • 谢谢兰特!它和Sander Koedood’s answer 一样有效。但不幸的是,这不是“为什么?”问题的答案。但我现在知道,这个问题只发生在我使用-webkit-box 时。您的示例有效,因为 span 没有得到 -webkit-box
猜你喜欢
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 2011-02-19
  • 2012-04-25
  • 2010-11-07
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多