我正在尝试构建一个文本编辑器,在每行之前显示一个行号。借助“ 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>
我希望编辑器能够像当前一样工作,例如,它仍应为每个新行创建一个新跨度。但是,我不希望用户能够在每个跨度内找到之前可以编辑或删除:::
。答案 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>