Content (内容)

渲染可信 HTML(支持剧透与内联图片灯箱)。不做 sanitize —— 不可信 HTML 请自行处理。

KunContent 不会 sanitize HTML

它原样渲染你传入的内容。绑定到 content 之前,请自行 sanitize 任何不可信 / 用户提供的 HTML(例如用 DOMPurify)。

基础用法

Rich content

KunContent renders trusted HTML, with spoiler and inline-image lightbox support.

Basic.vue

Markdown 排版

排版:一门隐形的艺术

好的排版应当克制而有节奏。当它做得足够好时,读者甚至不会注意到它的存在,只会觉得"这篇文章读起来很舒服"。本页用一段示例内容展示 KunContent 的 Markdown 排版。

层级与节奏

标题与正文之间保持清晰的对比与呼吸感:标题的上间距明显大于下间距,从而和紧随其后的内容自然成组。正文行高 1.8,对中文与中西混排都更友好。

字体排印的最高境界,是让文字本身退后一步,把舞台让给意义。

列表

  • 无序列表项,用于并列的要点
  • 支持嵌套:
    • 次级要点一
    • 次级要点二
  • 列表项之间有舒适的间距
  1. 有序步骤:先确定测量(每行字符数)
  2. 再调行高与段间距
  3. 最后打磨标题比例

代码

行内代码如 const kun = createKunUI(),与正文区分但不喧宾夺主;块级代码用于成段展示:

function greet(name) {
  // 一句问候
  return `你好,${name}!`
}

表格

组件用途关键特性
KunContent渲染受信富文本剧透 · 灯箱 · 排版
KunMarkdownMarkdown 字形内联 SVG
KunLightbox图片查看器缩放 · 旋转 · 飞散

分割线之上是正文的结尾。按 Esc 可关闭大多数浮层。

Typography.vue

剧透

剧透警告:凶手其实是管家(点击揭示)。

English: the butler did it in the library (click to reveal — each word is masked separately).

Spoiler.vue

超长多段剧透

以下是完整剧情走向,涉及关键剧透(点击展开):

故事开篇,主角在一座被常年浓雾笼罩的海港小镇醒来,失去了过去三年的全部记忆。他唯一记得的,是一枚刻着陌生纹章的铜质怀表,以及一个反复出现在梦里的、背对着他的白衣少女的身影。镇上的人对他异常熟络,仿佛他从未离开过,这种熟悉感却让他遍体生寒。

随着调查深入,他发现镇上每个居民都在隐瞒同一件事:三年前的那场大火。所有记录都被人为抹去,教堂的地下室里藏着一本写满名字的册子,而他自己的名字,赫然被一道墨线划去。怀表在靠近灯塔时会无端发烫,指针逆向转动,像是在指引,又像是在警告。

真正的转折发生在第二幕:那位白衣少女并非梦境的产物,而是他亲手送走的妹妹。三年前的大火不是意外,而是他为了销毁某个足以颠覆整座小镇的秘密,亲自点燃的。失忆不是创伤的结果,而是他向镇上的“守夜人”交换来的——用记忆换取妹妹活下去的机会。

而那枚怀表,是契约的信物。当指针归零的那一刻,被交换的记忆会连本带利地归还,代价则是,他必须替代守夜人,永远留在这座小镇,维持浓雾不散。所谓的“守夜人”,正是历代做出同样选择的人,一个接一个,困在循环里。

结局有两条分支。其一,他选择再次遗忘,把怀表埋回灯塔之下,雾散人安,小镇恢复平静,但下一个失忆者将在某个清晨醒来,重复他的命运。其二,他砸碎怀表,直面归还的全部记忆与随之而来的崩塌,雾彻底散去,小镇暴露在真相之下,而他与妹妹得以并肩走出港口——代价是,这里的一切都将不复存在。

游戏在最后一个镜头停在那枚停摆的怀表上,表盖内侧刻着一行小字:“记得的人,才是被困住的人。”至此,标题的双关含义才真正揭晓。

(点击上方区块即可揭示;再长的段落也会被整块遮住。)

LongSpoiler.vue

内联图片灯箱

点击任意图片打开灯箱(可左右切换):

渐变 1渐变 2
Lightbox.vue

正文图模糊占位(ThumbHash)

正文图是后端渲染的原始 <img>(不是组件)。只要标签带 width/height(浏览器据此原生预留空间、消除加载抖动)与 data-thumbhash,KunContent 就会自动把解码出的模糊占位画到图片背景上,加载完成后清除—— 零 DOM 改动,与灯箱、剧透共存。

后端把图片的宽高与 ThumbHash 直接写进标签,正文图便和封面一样享受占位:

banner

宽高让浏览器按比例预留空间(不再加载跳动),ThumbHash 提供加载前的模糊预览。

BlurUp.vue

属性

属性类型默认值说明
content *string
classNamestring""
compactbooleanfalse