【问题标题】:Positioned spans being clipped in Chrome定位跨度在 Chrome 中被剪裁
【发布时间】:2015-09-06 05:33:18
【问题描述】:

我试图在包含一组跨度的内联部分上方放置一个标签,但我发现 Chrome 似乎正在奇怪地剪裁标签。看看这两张截图:

在 Firefox 中:

在 Chrome 中:

如果您查看 Chrome 的屏幕截图,您可以看到标签正在根据下一个标签的起点进行剪辑。所需的结果将与 Firefox 屏幕截图相同,其中标签一直到行尾。

这是用于这两个示例的代码:

.section {
  position: relative;
  border-right: solid 1px #000;
}
.section-title {
  display: inline-block;
  position: absolute;
  top: -10px;
  left: 5px;
  right: 5px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-family: sans-serif;
  font-size: 0.8em;
}
.pieces {
  font-family: monospace;
}
.pieces span {
  display: inline-block;
  padding: 10px 5px 0 5px;
}
<span class="section">
    <span class="section-title">Really long title is really long</span>
<span class="pieces">
        <span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span>
</span>
</span>
<span class="section">
    <span class="section-title">Really long title is really long</span>
<span class="pieces">
        <span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span>
</span>
</span>
<span class="section">
    <span class="section-title">Really long title is really long</span>
<span class="pieces">
        <span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span>
</span>
</span>
<span class="section">
    <span class="section-title">Really long title is really long</span>
<span class="pieces">
        <span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span><span>00</span>
</span>
</span>

这是一个已知的 Chrome/WebKit 错误吗?是否可以在不大幅修改 HTML 的情况下进行修复?

【问题讨论】:

  • 在我的浏览器(Chrome)中运行良好
  • @MegaMind 您是否尝试过调整窗口大小以使它们重叠?我在 Chrome 和 nw.js(最新版本)中都遇到过这个问题。
  • 是的,我调整了 chrome 的大小。文本被剪掉了。但同样的情况也发生在 Firefox 上。
  • @MegaMind 是吗?这对我来说没有发生..我并不是说当文本到达行尾时发生的剪辑..那很好。我的意思是出现在下一节的起点的剪辑。
  • @MegaMind 如果你看一下 CSS,section-title 确实有这个规则,但它被绝对定位有效地覆盖了。

标签: html css google-chrome webkit


【解决方案1】:

这不是 Chrome 中的错误......这是代码的问题,Chrome 以一种它认为合乎逻辑的方式解释了代码。

首先,请注意,您的.section-title 是绝对定位和设置的leftright。这意味着:

  1. 自动变成display:block
  2. 它尝试从左边界 5 像素,从父边界右边界 5 像素。

然后,请注意您的父 .section 是一个内联元素,因为默认情况下所有 span 标记都是内联的。因此,它需要容纳其子项所需的宽度。您的00 长行溢出到下一行,因此“右边界”也溢出到下一行。

作为一个听话的元素,.section-title 尽最大努力与右边的边界保持 5px 的距离,现在已经非常接近了。因此,text-overflow: ellipsis 正确启动。

修复您的代码:

  1. display: inline-block 用于绝对定位的元素是没有用的。它令人困惑。拿出来。
  2. 不要将其设置为right:5px。把它拿出来。 (实际上,这是唯一重要的解决方法)。
  3. 请向编写此 HTML 的作者反馈 HTML 词汇表不仅仅是 &lt;span&gt;。当&lt;section&gt;&lt;h1&gt;-&lt;h6&gt; 等逻辑标签更适合内容时,只对所有内容使用&lt;span&gt; 是荒谬的。

【讨论】:

  • right:5px 规则的存在是有原因的:如果两个部分彼此相邻,它可以防止文本溢出到下一个部分(为了证明这一点,您可以尝试删除一些 00 跨度到使该部分比标题文本短),并防止溢出父项的边缘。 display:inline-block 可能只是过去测试的遗留样式..
  • 实际上,right:5px 本身并不能防止溢出,只是因为元素总是将自身定位在距右边框 5px 的位置。您可以通过将width 设置为 100% 或更少来实现相同的效果,这确保它永远不会溢出父级。当然,它不会解决你的问题。您必须选择:要么让.section-title 的宽度溢出其父级,要么不让其宽度溢出。
  • 这就是我的意思.. 我想知道的(以及这个问题的重点实际上是什么)是是否/如何不让它溢出父母,而不是以这种方式剪辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 2016-05-05
相关资源
最近更新 更多