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

标签 css word-wrap pre

我正在尝试找到一种方法来将行号添加到 <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> 而向右移动了多远.

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

我的问题是:

  • 为什么会这样?该行为在 Safari 9.0.1 和 Firefox 42.0 中是等效的,因此它看起来不像是实现错误/怪癖。

  • 如果这不是错误,我如何通过通用解决方案(例如,不需要我对第一个 <span> 的宽度进行硬编码)来防止它发生?

更新

这种行为似乎并不局限于<pre> white-space 的标签和特殊设置喜欢pre-wrap ,正如我最初的想法。它也发生在两个 <span> 上。 <div> 中的元素: 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>

关于css - 内联 block 中的换行文本溢出父 <pre> 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34191997/

相关文章:

jquery弹出图像居中

css - 使用预包装证明内容合理

html - 为什么 CSS 中的绝对单位在不同的屏幕上显示的不是真正的绝对单位?

javascript - 制作点击播放视频的 YouTube 视频标题卡

css - Fancybox 加载时从父窗口移除滚动条

c++ - Vim 在 C++ 中自动硬包装长注释?

c# - 如何在文本框中重用自动换行算法?

css - `word-break: break-all` 和 `word-wrap: break-word` 有什么区别?

html - 如何在 HTML 中居中​​对齐预标记

html - 试图在 html 中显示元素符号文本