富文本模糊了内容与样式的边界,用户常混淆两者
别名: 所见即所得混淆 · WYSIWYG content versus style · 把加粗当内容
概念解释
富文本(rich text)把字符和它们的外观画在同一块画布上:加粗、颜色、标题看起来都是「字」的一部分。人因此分不清哪一层会被下游当数据用、哪一层只是显示。把一段标题样式当成「这段是标题数据」,或把空格排版当成结构,下游一换样式就全塌。内容与样式纠缠(content-style entanglement)说的就是这层混淆。它不管工具栏有多少按钮,也不管从 Word 贴进来脏不脏。
机制
所见即所得把结构(标题、列表、链接)渲染成外观,又把纯外观(这一句红、这一句斜体)做进同一套选区命令。人的编辑模型是「我看见的就是我会提交的」。系统内部却是两层:DOM/标记里的语义,和叠在上面的 span 样式。选「看起来像标题的大号加粗」并不会打上标题标签,搜索、目录、朗读都当普通段落。反过来,真正的标题标签换了主题就换外观,用户以为内容被改了。纠缠在「看起来对」时成立,在「数据要对」时破裂。
怎么研究
给一篇要用下游结构的任务(生成目录、只导出纯文本、按标题跳转),让人用富文本完成,再检查标记里是否真有标题/列表,还是只有字号和加粗。自变量:工具栏是否区分「结构」与「装饰」、是否显示隐藏标记。因变量:语义正确率、换主题后的崩溃。眼动可看人是否在检查标记还是只看渲染。不要用「好不好看」当成功。
边界
纯展示、不再进入别的管道的短评,纠缠没有后果,外观就是全部。Markdown 一类显式标记把两层分开,混淆下降,但要会写标记。协作批注、修订模式把「别人的样式」再叠一层,纠缠更难拆。屏幕阅读器读的是结构,视觉上看起来正确的装饰标题对它们等于没有标题。
怎么落地
- 把标题、列表、链接做成结构命令,与颜色、斜体分开,不要只用「大号加粗」冒充标题。
- 在需要结构的场景提供「显示标记」或选区信息(「这是标题 2,不是大号字」)。
- 换主题或导出纯文本时预览一次,让人看见哪些「样子」会丢掉。
- 验证:让人做出一篇带小节的文,关掉样式只看结构树或导出纯文本。小节消失,标题就还只是外观。