【问题标题】:flexbox adding newline to clipboardflexbox向剪贴板添加换行符
【发布时间】:2018-05-15 04:00:51
【问题描述】:

我正在使用使用 flexbox 的布局。到目前为止效果很好,但我在将文本复制到剪贴板时遇到问题。

显然,使用 flexbox 似乎是在每个子节点之后添加一个换行符

在下面的demo中可以看到,复制文本“LabelMessage”正常工作(粘贴它,它仍然是一行)。但是,如果您将 display:flex 添加到容器中,则会在复制到剪贴板时在“标签”之后添加一个换行符

这是什么原因造成的?有什么办法吗?

小提琴:http://jsfiddle.net/zv4mamtm/

$('.toggleFlex').on('click', function() {
  $('.container').toggleClass('flex')
})
.container.flex {
  display: flex;
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="toggleFlex">toggle</span>
<hr>
<div class="container">
  <span class="label">Label</span>
  <span class="label">Message</span>
</div>
<hr>
<textarea></textarea>

【问题讨论】:

  • 这个问题在这里已经有了答案stackoverflow.com/q/43846713/1926369
  • @vals 哦,有那么一刻我以为我比 Michael_B 聪明,我在做梦:p
  • @vals “已经” - 2 年后被问到:P 但是谢谢,它确实回答了这个问题

标签: css clipboard flexbox


【解决方案1】:

如上一个答案和this post中所述:

在弹性容器中,子元素(“弹性项目”)会自动“阻塞”(more details

根据您的用例,如果您只想复制/粘贴文本,使用 display: contents 会很有帮助,

见:how display contents works

理解使用 display: contents 时会发生什么的最简单方法是想象元素的开始和结束标记从标记中省略。

来自the specification

出于框生成和布局的目的,必须将元素视为已在元素树中被其内容替换

(您可能需要检查它的兼容性,因为它在 IE 和 Edge 中不起作用)

$('.toggleFlex').on('click', function() {
  $('.container').toggleClass('flex')
})
.container.flex {
  display: flex;
  color: red;
}

.container.flex span {
  display: contents;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="toggleFlex">toggle</span>
<hr>
<div class="container">
  <span class="label">Label</span>
  <span class="label">Message</span>
</div>
<hr>
<textarea></textarea>

这将覆盖由flex 容器引起的spandisplay:block

【讨论】:

  • 注意这一点,它不会删除显示块,它会删除容器并只保留内容......For the purposes of box generation and layout, the element must be treated as if it had been replaced in the element tree by its contents --> 所以就像你有这个&lt;div class="container"&gt; Label Message &lt;/div&gt;。没有更多的跨度所以没有更多的问题,你不再能够单独设置每个单词的样式
  • 这使得在 Firefox 60 上启用 flex 时文本不可复制。
  • @TemaniAfif ,它被 处理 那样,DOM 不受影响,您不会丢失任何标签,因此您可以设置每个单词的样式,请检查:@ 987654328@,除非我误解了你的评论
  • 检查一下:jsfiddle.net/zv4mamtm/9 你不能再给它们设置样式(没有边距、居中等)这就是我的意思。我知道 DOM never 受 CSS 影响,但它被处理为 like 没有包装器,所以由于没有更多的包装器,你失去了所有常见样式的能力跨度>
  • @TemaniAfif 我明白你的意思,如果你想设置span ( flex-items ) 的样式,这不是一个合适的解决方案,但这就是为什么我添加了 取决于你的用例 i> ,解决换行问题,有趣的是你只能改变颜色(以及字体大小和粗细..)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2022-01-17
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多