跳至正文
Yukihime

代码、图表与富内容兼容性测试

代码、图表与富内容兼容性测试

集中验证 Shiki 固定白色代码组件、Mermaid、KaTeX、提示框、折叠内容和最小 MDX 表达式。

这篇文章集中验证代码、图表、公式和富内容组件。它使用独立白色阅读布局,所有内容必须留在文章页面容器内;超长代码、公式和图表只能在自己的区域中滚动或缩放。

行内代码

普通段落里的 pnpm.cmd build、src/content.config.ts 与 document.documentElement.classList.contains("dark") 应使用紧凑的行内代码样式,不能继承代码块的行号、固定宽度或整块背景。

TypeScript:标题、行号与高亮

src/utils/normalizeArticleMedia.tsTypeScript
interface ArticleImage {
  src: string;
  alt: string;
  width?: number;
  height?: number;
}

export function normalizeArticleImage(image: ArticleImage) {
  return {
    ...image,
    loading: image.width && image.width > 1200 ? "lazy" : "eager",
    decoding: "async",
  } as const;
}

高亮行、插入标记、代码标题、复制按钮和行号不能互相遮挡,键盘焦点也必须保持清晰。

多语言代码块

Python

scripts/check_article_width.pyPython
from dataclasses import dataclass


@dataclass(frozen=True)
class Viewport:
    width: int
    theme: str


def fits_article(viewport: Viewport, content_width: int) -> bool:
    return content_width <= viewport.width


print(fits_article(Viewport(width=1024, theme="pink"), content_width=960))

Shell

发布前验证命令Shell
pnpm.cmd check
pnpm.cmd lint
pnpm.cmd build

JSON 与 YAML

article-test-matrix.jsonJSON
{
  "viewports": [1024, 1280, 1440, 1920],
  "themes": ["blue", "pink"],
  "mustNotOverflow": true
}
frontmatter-example.yamlYAML
title: 代码与富内容兼容性测试
published: 2026-07-21
draft: false
tags:
  - Mermaid
  - KaTeX

CSS 设计令牌

src/styles/features/article-content.cssCSS
.article-content {
  color: var(--article-body);
  overflow-wrap: anywhere;

  :not(pre) > code {
    color: var(--article-inline-code-text);
    background: var(--article-inline-code-bg);
    border: 1px solid var(--article-border);
  }
}

超长代码与 Diff

下面这一行故意保持较长,用来确认代码框内部拥有自己的横向滚动区域:

long-line.tsTypeScript
const compatibilityEndpoint = "https://example.com/api/articles/compatibility?viewport=1024&theme=pink&language=zh-CN&feature=an-intentionally-long-code-line-that-must-scroll-inside-the-code-frame-only";
文章媒体样式调整.diffDiff
- .article-content img { width: 100%; height: 420px; object-fit: cover; }
+ .article-content img { max-inline-size: 100%; block-size: auto; }
+ .article-content figure { max-inline-size: 100%; }
- .article-content pre { overflow: visible; }
+ .article-content pre { overflow-x: auto; }

折叠代码

较长代码可以折叠显示。预览行、展开按钮、复制按钮和滚动位置需要互不冲突。

src/utils/articleTestMatrix.tsTypeScript
type Theme = "blue" | "pink";

interface ArticleTestCase {
  viewport: number;
  theme: Theme;
  expectedOverflow: boolean;
}

const viewports = [1024, 1280, 1440, 1920];
展开 9 行代码
const themes: Theme[] = ["blue", "pink"];
const articleTestMatrix: ArticleTestCase[] = [];

for (const viewport of viewports) {
  for (const theme of themes) {
    articleTestMatrix.push({
      viewport,
      theme,
      expectedOverflow: false,
    });
  }
}

export function assertArticleLayout(testCase: ArticleTestCase): void {
  if (testCase.expectedOverflow) {
    throw new Error(`Unexpected overflow at ${testCase.viewport}px`);
  }
}

Mermaid 图表

流程图需要在文章内容区内缩放或独立滚动。在独立阅读页刷新、完整导航及历史返回后,图表应保持固定阅读配色,且不能被重复初始化。

SCENE GRAPH流程图
SCENE GRAPH时序图

数学与化学公式

行内公式 E=mc2E = mc^2 应与中文基线自然对齐。块级公式过宽时,只允许公式容器滚动:

1n∑i=1n(xi−xˉ)2=1n∑i=1nxi2−xˉ2\frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2 = \frac{1}{n}\sum_{i=1}^{n}x_i^2-\bar{x}^2

下面的矩阵用于检查宽公式:

[a11a12a13a14a21a22a23a24a31a32a33a34][x1x2x3x4]=[b1b2b3]\begin{bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ x_4 \end{bmatrix} = \begin{bmatrix} b_1 \\ b_2 \\ b_3 \end{bmatrix}

化学式扩展测试:COX2+C→2 CO\ce{CO2 + C -> 2 CO}。

提示框与 Directive

普通说明

提示框可以包含粗体、inline code 和链接,颜色必须来自文章富内容令牌。

建议

代码、宽表格、图表和公式只能在自己的容器内处理溢出。

可折叠警告

展开和收起后,摘要文字、图标和焦点状态都应正常。

Directive 形式的重点

这段内容验证 remark-directive 到提示组件的转换,确保作者可以使用结构化语法表达重点。

原生折叠内容

展开富内容检查清单
  • 代码只在自身内部横向滚动。
  • 图表、公式和提示框不会撑破页面。
  • 键盘可以操作复制、折叠与链接控件。
  • Swup 导航后交互不会重复绑定。

最小 MDX 表达式

MDX 表达式已成功渲染

这段结构不依赖外部组件或远程服务,只用于确认 .mdx 文件、JSX 语义元素和最小表达式可以通过生产构建。

验收结论

如果代码标题、行号、高亮、diff、复制、折叠和横向滚动互不冲突,Mermaid、公式、提示框、原生折叠与 MDX 在刷新、完整导航及前进后退后仍然可用,这一页的富内容验证就算通过。

[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

找不到相关结果。
[ 全部文章 ]