组件规范
本页定义公开视觉组件、共享文本流层和核心交互规格。整体设计入口见 设计导览,所有数值型 Token 见 Token 系统。
职责模型
共享文本流层
以下能力存在于实现层,但不要求在设计稿中作为独立视觉组件逐个出图。
LinkRenderer和InlineCode仍保留为独立组件,因为它们具备明确的交互或独立视觉样式,需要单独验收。
组件分组总览
当前公开视觉组件共 18 个,不含 MarkdownRenderer 与共享文本流层。
壳层与状态
DocumentShell
- 背景使用
--scribdown-color-bg - 正文文本列最大宽度
840px - 左右内边距最少
48px - 页面留白为顶部
64px、底部96px - 浅色主题可加入低噪声纸感纹理和轻量纸张外框;纹理只能作为背景层,不能降低正文、代码、表格的可读性
LoadingSkeleton
- 结构:大标题占位块 → 段落三行组 → 代码块占位 → 段落两行组
- 骨架色使用
--scribdown-color-border - 透明度在
0.4–0.8脉冲过渡,周期1.4s prefers-reduced-motion开启时取消脉冲
StateRenderer
FullscreenViewer
- 结构:
Overlay + TopBar + ContentStage - 遮罩:
rgba(45, 36, 31, 0.72) - 顶栏:内容标题(左)+ 类型标签(中)+ 关闭按钮(右)
- 内容区四周安全留白至少
32px - 承载图片、
Mermaid、视频时共用同一壳层
文本与列表
HeadingRenderer
- 字体统一使用
--scribdown-font-heading - 字号、行高、字重严格对应 Typography 规范
- 标题悬停时左侧出现低调
#锚点图标 - 锚点入口使用
absolute定位,不影响标题文本对齐 - h2 可使用短横线涂抹感底线强化章节分隔;底线颜色来自
--scribdown-color-border或--scribdown-color-accent的低透明度派生值
ParagraphRenderer
- 使用
body-md(18px / 1.75) - 段间距
--scribdown-space-5 - 行内
emphasis、strong、delete、mark、break由共享文本流层处理
ListRenderer
- 有序与无序列表都支持三级嵌套
- 无序标记使用手绘圆点或短横,不使用标准浏览器 bullet
- 每级缩进
24px ListItem行间距8px
TaskListRenderer
- 继承
ListRenderer的缩进、间距与嵌套规则 Marker替换为手绘感方形复选框(16px)- 已完成项使用
delete样式并降为--scribdown-color-text-secondary
Blockquote
- 左侧强调线宽
4px - 颜色使用
--scribdown-color-accent - 内边距
16px 20px - 背景使用
--scribdown-color-surface - 可加入手绘引用符号作为弱装饰,装饰颜色必须低于正文权重
HanddrawnDivider
- 不使用标准
<hr>直线 - 颜色使用
--scribdown-color-border - 上下留白
--scribdown-space-5
行内与轻交互
InlineCode
- 内边距
2px 6px - 字体使用
--scribdown-font-code - 背景比正文背景深一层
- 字号使用
inline-code
LinkRenderer
- 默认颜色
--scribdown-color-accent - 区分 default / hover / visited / focus-visible 四态
focus-visible使用2px实线轮廓,偏移2pxvisited颜色略深于默认态
富媒体与扩展块
CodeBlock
- 结构:
Header + ScrollArea Header高度40px,内边距12px 16px- 复制按钮区分 default / hover / focus-visible / copied 四态
- 长代码行保留横向滚动,不折行
- 外观使用
--scribdown-radius-md与--scribdown-shadow-md - 行号、语法高亮与行高亮需要同时可辨;行高亮使用浅色底,不使用高饱和整行色块
ImageRenderer
- 默认宽度
100%,最大展示宽度720px - 需要同时支持加载态、正常态、失败态
- 失败态展示固定高占位与
alt文本 - 右上角提供低存在感媒体操作入口,至少覆盖全屏查看
- caption 位于图片下方并居中,使用
body-sm与--scribdown-color-text-secondary
MermaidBlock
- 结构:
Header + DiagramCanvas DiagramCanvas最小高度240px- 失败态展示错误摘要与源码入口
- 全屏入口含
focus-visible态 - 正常态节点可使用柔和色块和手绘描边,箭头保持清晰方向;失败态使用语义色轻描边提示,避免呈现为原始报错堆栈
VideoRenderer
- 默认
16:9比例容器,最大宽720px - 未播放态展示封面与居中播放按钮
- 播放按钮
focus-visible轮廓偏移3px - 全屏入口位置与
ImageRenderer保持一致 - 播放控件可近似真实播放器的时间轴、音量和全屏入口布局,但视觉权重必须低于视频内容
TableRenderer
- 结构:
TableWrapper + TableHead + TableBody TableWrapper必须支持横向滚动- 表头通过字重、底色或描边形成层级差异
- 单元格内边距
12px 16px
HtmlRenderer
- 块级与行内 HTML 共用
rehype-sanitize + DOMPurify安全链路 - 白名单标签输出等效视觉效果,样式继承正文 Token
- 非白名单内容显示占位框,不暴露原始标签