HTML 里 textarea 替代:可编辑内容的 “plaintext-only”属性
该HTML 特性现已在所有三个主要浏览器引擎中提供,并于 2025 年 3 月 4 日成为基线新功能。
当您想让用户输入纯文本信息时,您的第一反应可能是使用<textarea>
。这在很多情况下都行得通,而且不需要特别努力就能使其与表单配合使用,但也有局限性。
其中一个例子是随着内容动态增加<textarea>
,而无需使用黑客手段。还有field-sizing: content
,但浏览器对它的支持有限。这就是 contenteditable="plaintext-only"
属性值组合的用武之地。你可以将其添加到通用元素(如 <div>
)中,让元素自动调整大小。
另一个限制是样式。CSS 自定义高亮 API 提供了一种机制,通过使用 JavaScript 创建文本范围并使用 CSS 为其设置样式,从而为文档中的任意文本范围设置样式。在用户代理阴影根中,一个 <textarea>
内部使用的是一个 <div>
,这就是为什么使用 CSS 自定义高亮显示 API 来设置文本样式无法正常工作的原因。如果直接将 CSS 自定义高亮 API 用于像 <div>
这样的元素,并将其设置为contenteditable
,那么 CSS 自定义高亮 API 就能正常工作。
<style>
::highlight(highlight) {
background-color: yellow;
color: black;
}
</style>
<div contenteditable="plaintext-only">Edit me</div>
<script>
const parentNode = document.querySelector('div').firstChild;
const range = new Range();
range.setStart(parentNode, 0);
range.setEnd(parentNode, 3);
const highlight = new Highlight(range);
CSS.highlights.set('highlight', highlight);
</script>
下面的演示截图显示了这种限制。请注意,<textarea>
;中的文本没有样式化,但两个contenteditable
的通用<div>
元素中的文本有样式化。
你也许感兴趣的:
- HTML代码里的命令:command 和 commandfor
- 为什么 target=”_blank” 前面有下划线?
- HTML行为属于HTML
- 趣图:HTML and CSS
- HTML img tag 的进化:不是 GIF 动图,胜过 GIF 动图
- 即使不编程,你也应该学会HTML和CSS的9大理由
- 美国上诉法院拒绝人工智能艺术作品的版权申请
- “unsafe”是否会破坏 Rust 的保证?
- Rust 泛型 – 这是什么?
- GitHub 星级对您来说值多少?
你对本文的反应是: