使用“ contenteditable”时,如何防止用户编辑或删除:: before的内容?

时间:2019-02-04 10:37:28

标签: html css

我正在尝试构建一个文本编辑器,在每行之前显示一个行号。借助“ contenteditable” HTML属性,用户可以编辑内容。但是,这使用户可以删除::: before来渲染行号。

如果我必须编写一个解决方案,我应该使:: before不可编辑,它已经显示了“内联代码块”,因此它应该可以工作,但是,用CSS无法实现这一点。

代码:

.code-editor {
  background-color: #ffffff;
  border-radius: 0.25rem;
  counter-reset: line;
  font-family: monospace;
  line-height: 0;
  margin: 0 auto;
  padding: 0.5rem;
  width: 30rem;
}

.code-editor:focus {
  outline: none;
}

.code-editor span {
  display: block;
  line-height: 1.5rem;
}

.code-editor span::before {
  border-right: 1px solid #dddddd;
  color: #888888;
  content: counter(line);
  counter-increment: line;
  display: inline-block;
  margin-right: 0.5rem;
  padding-right: 0.5rem;
  text-align: right;
  width: 1.5rem;
}
<pre class="code-editor" contenteditable>
        <span>james</span>
    </pre>

我希望编辑器能够像当前一样工作,例如,它仍应为每个新行创建一个新跨度。但是,我不希望用户能够在每个跨度内找到之前可以编辑或删除:::

1 个答案:

答案 0 :(得分:0)

您是否尝试在跨度上使用contenteditable属性,而不是pre元素?

.code-editor {
  background-color: #ffffff;
  border-radius: 0.25rem;
  counter-reset: line;
  font-family: monospace;
  line-height: 0;
  margin: 0 auto;
  padding: 0.5rem;
  width: 30rem;
}

.code-editor:focus {
  outline: none;
}

.code-editor span {
  display: block;
  line-height: 1.5rem;
}

.code-editor span::before {
  border-right: 1px solid #dddddd;
  color: #888888;
  content: counter(line);
  counter-increment: line;
  display: inline-block;
  margin-right: 0.5rem;
  padding-right: 0.5rem;
  text-align: right;
  width: 1.5rem;
}
<pre class="code-editor" >
  <span contenteditable>james</span>
</pre>