首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免firefox中的额外换行符从表中复制?

如何避免firefox中的额外换行符从表中复制?
EN

Stack Overflow用户
提问于 2018-07-04 09:57:49
回答 2查看 1.1K关注 0票数 2

我试图在html+css (没有javascript)中呈现源代码,以便:

  • 它用行号渲染。
  • 选择代码时不复制行号.
  • 内部空格/制表符/新的-线被保留。
  • 自动生成行号。

我找到的解决方案使用CSS计数器和一个表,其中最左边的列是一个数据-psuedo-内容(也被标记为不可选)。它在Firefox、Safari和Chrome中正确呈现,但是将文本复制到剪贴板上存在问题。

  • 在Chrome和Safari中,复制到剪贴板的文本与源代码匹配。
  • 在Firefox中,剪贴板中的行是双倍行距的:每一行之间都有额外的空行。

有一个演示弹琴显示了这个问题。试图将文本复制到Firefox中的剪贴板,在每一行(即额外的换行符)之间放置一个空行。

我如何解决这个问题(只使用html+css)?

代码语言:javascript
复制
.code {
  background-color: none;
  border: none;
  padding: 0;
}

pre.code {
  line-height: 1.6;
  white-space: pre-wrap;
  width: 100%;
  margin: 0 auto;
  font-size: 14px;
}

;
pre.code table {
  counter-reset: linenum;
}

pre.code td.lnum:before {
  content: attr(data-psuedo-content) counter(linenum);
}

pre.code td.content {
  font-size: 14px;
  background: #333740;
  color: #ffffff;
  white-space: pre-wrap;
  padding: 3px;
  border-right: solid 2px black;
}

td.lnum {
  background-color: #a7a8aa;
  color: #000000;
  border-right: 2px solid black;
  border-top: 1px solid black;
  border-bottom: 1px solid black;
  border-left: none;
  font-size: 12px;
}

pre.code tr {
  counter-increment: linenum;
}

.lnum {
  -moz-user-select: none;
  webkit-user-select: none;
  ms-user-select: none;
}
代码语言:javascript
复制
<pre class="code">
  <table style="width: 100%;border-collapse: collapse">
    <tr><td class="lnum"></td><td class="content">#include &lt;stdint.h&gt;</td></tr>
    <tr><td class="lnum"></td><td class="content">#include &lt;stdbool.h&gt;</td></tr>
    <tr><td class="lnum"></td><td class="content"></td></tr>
    <tr><td class="lnum"></td><td class="content">/*-</td></tr>
    <tr><td class="lnum"></td><td class="content"> | Support for x86 operations that are not exposed natively in C. Each of these</td></tr>
    <tr><td class="lnum"></td><td class="content"> | is a fragment of inline-assembly (a way of injecting assembly code into the</td></tr>
    <tr><td class="lnum"></td><td class="content"> | compiled program). Each one is wrapped in an inline procedure so that the </td></tr>
  </table>
</pre>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-04 11:47:31

不要添加这段代码

代码语言:javascript
复制
.lnum { 
      -moz-user-select: none;
      webkit-user-select: none;
      ms-user-select: none;
    }
票数 1
EN

Stack Overflow用户

发布于 2021-06-01 00:41:36

我使用JavaScript来挂起复制事件:

代码语言:javascript
复制
const source = document.querySelector('pre.code');

source.addEventListener('copy', (event) => {
    const selection = document.getSelection();
    event.clipboardData.setData('text/plain', selection.toString());
    event.preventDefault();
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51170894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档