【问题标题】:Move to newline when tabbing/spacing to end of contenteditable div制表符/间距到 contenteditable div 的末尾时移动到换行符
【发布时间】:2017-08-18 01:59:43
【问题描述】:

最近,我在使用内容可编辑 div 作为我一直在从事的项目的文本框时遇到了一些问题。该项目是在前端使用 Angular2 构建的。

我一直遇到的问题是,当我一直到选项卡/空格直到内容可编辑 div 的末尾,而不是移动到下一行时,它反而不断添加似乎在文本内容中累积的选项卡的div。我的意思是,如果我在到达末尾时按了 4 次制表符/空格键,那么我将不得不退格 4 次以清除它们。

<div class="text-box" contenteditable="true"></div>

body
{
  background-color: black;
}

.text-box
{
  background-color: white;
  color: black;
  height: 200px;
  width: 200px;
  margin: auto;
  white-space: pre-wrap;
}

https://codepen.io/anon/pen/YxYNYW

我包含的代码笔演示了这个问题。如果您只是在框内单击然后按住空格键,一旦光标到达末尾,它将不会移动到换行符。我意识到这与我与内容可编辑 div 一起使用的 white-space: pre-wrap 属性有关。有没有办法让它在仍然能够使用该属性的同时工作?

我想保留 pre-wrap 属性,因为它保留了从数据库中带有文本的对象引入的所有空白。我在 pre-wrap 上使用 pre-line 属性进行了尝试,但这导致文本在单击可编辑 div 时跳转。我也尝试过使用 word-break: break-all ,这似乎可行,但文本有点混乱。

顺便说一句,有没有人遇到过在突出显示文本后无法在字符之间单击的问题?这是一个描述起来很奇怪的问题,而且显然是一个很难追查的问题。发生的情况是我将在 div 中键入一些文本,用光标突出显示它,然后如果我尝试通过单击字符之间来取消选择文本,它将不起作用。我将不得不单击当前未突出显示或完全在元素之外的行以取消选择任何突出显示的文本。

我原本以为可能是内容可编辑问题,但在我链接的代码笔中似乎工作正常,所以现在我不确定它是什么。

提前感谢您的帮助!

【问题讨论】:

  • 您是否尝试添加“word-wrap: break-word;”?
  • @Jehoshuah 我确实尝试过使用 word-wrap: break-word,不幸的是,仍然遇到同样的问题。我想我尝试了每个自动换行属性,但无法让它们中的任何一个工作。下面的答案说使用 word-break: break-all 确实可以解决问题,但是当它们到达容器末尾时它也会破坏所有单词,这是我不想要的。

标签: html css angular


【解决方案1】:

您必须使用分词来解决您的问题。修改您的 css,如下所示

body
{
  background-color: black;
}



  .text-box
{
  background-color: white;
  color: black;
  height: 200px;
  width:150px;
  margin: auto;
  white-space: pre-wrap;
white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
     white-space: -pre-wrap;      /* Opera 4-6 */
     white-space: -o-pre-wrap;    /* Opera 7 */
     white-space: pre-wrap;       /* css-3 */
     word-wrap: break-word;       /* Internet Explorer 5.5+ */
     word-break: break-word;
     white-space: normal;
}

这解决了你的问题。这是工作笔pen

更多信息请参考this ans

【讨论】:

  • 这确实解决了制表符/空格不换行的问题,但是当它们到达容器末尾时它也会破坏单词,这是我希望避免的。无论如何要同时使用 white-space: pre-wrap 和 word-break: break-word 属性,同时让制表符/空格在到达容器末尾时换行?
  • 不幸的是,没有。通过同时使用 pre-wrap 和 break-word,我遇到了与以前相同的问题,即到容器末尾的间距不会换行。虽然使用 'white-space: pre-line' 似乎有效,但如果我在具有 pre-line 属性的内容可编辑 div 中选择文本,它会导致它跳转。我正在尝试找到一种方法来继续同时使用 pre-wrap 和 break-word,但也可以强制空格字符在到达容器末尾时跳转到新行。
  • 成功了!但是,该解决方案的奇怪之处在于,如果您切换 'white-space: pre-wrap' 和 'white-space: -moz-pre-wrap !important' 它将不再起作用。感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 2018-11-05
  • 2017-06-18
  • 2021-10-04
  • 1970-01-01
相关资源
最近更新 更多