内联块中的换行文本溢出父 <pre> 标记

Wrapped text in inline-block overflows parent <pre> tag

我正在尝试找到一种方法来向 <pre> 标记中的文本添加行号,同时仍允许文本换行。这带来了一些挑战:

这让我找到了当前的解决方案,即用两个 <span> 元素扩充文本,一个包含行号,一个包含该行 [0] 上的文本。为了防止第二个 <span> 中的文本在第一个 <span> 下方换行,它的样式设置为 inline-block:

span {
    display: inline-block;
    white-space: pre-wrap;
}

<pre><span>12345 </span><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span>
</pre>

问题在于,第二个 <span> 确实允许其内容换行,但位置超过了父 <pre> 的末尾。 <span> 似乎将文本包装成宽度等于 <pre> 的 a,而不管它因为第一个 <span>.[=32 而向右移动了多远=]

这也是一个显示行为的最小示例:http://jsfiddle.net/fgdhyde6/1/

我的问题是:

更新

这种行为似乎并不像我最初认为的那样仅限于 <pre> 标签和 white-space 的特殊设置,如 pre-wrap<div> 中的两个 <span> 元素也会发生这种情况:http://jsfiddle.net/fgdhyde6/2/


[0]:最后行号会加上一个合适的:before { content: counter(...); },这样可以方便的避免行号结束剪贴板。两种方法都会出现文本溢出的问题。

只需在 <pre> 和绝对位置 .line-numbers 上使用填充。

请注意 HTML 标记中的更改。如果你总是要有一个行号跨度后跟一个文本跨度,你可以使用 pre>span:nth-child(2n-1) 而不是 .line-number:

pre {
  border-style: solid;
  padding-left: 3rem;
  vertical-align: top;
  display: inline-block;
  white-space: pre-wrap;
}
pre>span:nth-child(4n+4) {
  background-color: #e5e5e5; /* this is just so you can see the size of it */
}
.line-number {
  position: absolute;
  left: 1rem;
}
<pre><span class="line-number">12345</span><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span>
<span class="line-number">12346</span><span>Yr fap deep v pop-up occupy, pug mixtape lo-fi disrupt butcher. Keffiyeh umami yuccie disrupt cold-pressed migas. Fap offal pinterest, +1 retro squid tilde VHS street art thundercats tacos tote bag. </span>
<span class="line-number">12347</span><span>Cray direct trade photo booth, messenger bag taxidermy chillwave retro pitchfork kickstarter. Franzen echo park meggings photo booth cronut, swag cred chicharrones meh neutra dreamcatcher knausgaard church-key.</span>
<span class="line-number">12348</span><span>Gentrify forage chillwave hammock fashion axe bushwick, fap sartorial viral typewriter seitan squid health goth knausgaard selvage. Post-ironic intelligentsia kale chips blog.</span>
<span class="line-number">12348</span><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span>
</pre>