mobile wallpaper 1
mobile wallpaper 2
mobile wallpaper 3
mobile wallpaper 4
1205 words
3 minutes
MDX 语法指南
2026-08-08

目录#

MDX 语法指南#

MDX 让你既能写熟悉的 Markdown,又能在普通 Markdown 力不能及之处加入组件和 JavaScript。 当普通 Markdown 力有不逮时,可借助组件与 JavaScript 表达式补足。 本指南介绍在以内容驱动的 Astro 站点中撰写文章时最实用的语法。

NOTE

What is MDX?

.mdx 文件本质上仍是 Markdown 文档。标题、列表、链接、图片、 代码块等 Markdown 语法照常生效,而导入、 组件、JSX 和表达式则作为可选扩展可用。

前置元数据#

每篇文章都以 YAML 前置元数据开头。它定义了文章页、列表、搜索结果和订阅源所用的元数据。 (用于文章页、列表、搜索结果与订阅源):

---
title: My MDX Article
published: 2026-08-08
description: A short introduction shown in article previews.
tags: [Markdown, MDX]
category: Guides
draft: false
---

前置元数据应只放元数据。导入语句和 JavaScript 声明应紧接在结束分隔符 --- 之后。

标准 Markdown#

MDX 文章的大部分内容仍应是普通 Markdown。这样既能保持源码易读,也能为 RSS 和 Atom 阅读器提供可用的静态版本。

## A section heading
- A list item
- **Bold text** and *emphasis*
- [A normal link](https://example.com/)
> A blockquote remains a blockquote.

导入与使用组件#

MDX 可在顶层导入 Astro 组件,并在文档中直接使用。 组件名必须以大写字母开头。

import Notice from "../../components/Notice.astro";
export const message = "Props can come from an MDX expression.";
<Notice label={message} />

下面这个面板是本文渲染的一个真实组件:

用组件承载可复用的界面元素或有结构的内容;正文部分优先使用 Markdown,以保持文章的可移植性与可读性。

JavaScript 表达式#

顶层的 export const 声明可以为文档准备数据。 用花括号插入 JavaScript 表达式:

export const topics = ["components", "expressions", "extended Markdown"];
This guide covers {topics.length} topics: {topics.join(", ")}.

这个实时表达式统计出共 3 个主题:components,expressions,extended Markdown。

表达式在构建时应当是确定性的。像 window、document 这类仅浏览器可用的 API,应放在组件脚本里, 而非 MDX 模块体中。

提示框#

提示框可以在不编写自定义组件的情况下突出显示信息:

TIP

用最简单且能生效的语法

正文用 Markdown,小的动态值用 MDX 表达式, 需要复用标记或行为时才用组件。

:::tip[Optional title]
This content is emphasized as a tip.
:::

Wiki 链接#

行内 Wiki 链接指向另一篇文章,同时保持句子通顺。 例如,可继续阅读 内容指南。

独立的 Wiki 链接会渲染成一张文章卡片,包含其可用元数据和 封面图:

Cover image for 撰写博客文章
撰写博客文章
关于文章结构与 frontmatter 的通用示例。
2024-04-01指南#示例#写作#Markdown
Read [[guide|the content guide]] for more details.
[[guide]]

数学与化学公式#

行内公式用单个美元符号,展示公式用一对美元符号。 还可通过 mhchem 扩展书写化学记号。

爱因斯坦质能方程为 E=mc2E = mc^2。

∫−∞∞e−x2 dx=π\int_{-\infty}^{\infty} e^{-x^2}\,dx = \sqrt{\pi}

化学反应可写作 HX2O+COX2→HX2COX3\ce{H2O + CO2 -> H2CO3}。

Inline: $E = mc^2$
Display: $$\int_0^1 x^2\,dx = \frac{1}{3}$$
Chemistry: $\ce{H2O + CO2 -> H2CO3}$

代码组#

当读者可在等价的示例之间切换时,使用代码组。 每个标签对应一个围栏代码块:

content.ts
export const renderTarget = "page";
::: code-group labels=[TypeScript, Shell]
```ts
export const renderTarget = "page";
```
```bash
pnpm build
```
:::

图片与图注#

图片的 alt 文本用于向辅助技术描述图片。Markdown 的 title 会成为可见图注,可选的 w-N% 记号用于控制宽度。

一张方形演示图
由 Markdown 图片 title 生成的图注
![Descriptive alt text w-60%](./image.webp "Visible image caption")

有效宽度范围为 w-1% 到 w-100%。若图片应使用常规响应式宽度, 可省略该记号。

内部链接与外部链接#

使用已配置站点源站的相对链接和绝对 URL 会被归类为内部链接; 指向其他源站的链接则获得主题配置的 外链属性。

内部内容请使用相对路径。像 https://example.com/ 这样的外部源站会被主题单独归类。

编写可移植的 MDX#

文章页、RSS 和 Atom 共用同一套内容管线。交互脚本会在订阅源中被移除, 但由组件、提示框、Wiki 链接、公式、代码组和图片生成的 语义化 HTML 仍保持可读。

为保证输出可靠,请遵循:

  1. 主要说明文字使用 Markdown。
  2. 为图片提供有意义的 alt 文本,并让组件输出语义化 HTML。
  3. 避免在顶层表达式中使用浏览器全局对象。
  4. 确保客户端 JavaScript 运行之前,有用信息已经可见。
  5. 发布前运行 pnpm test、pnpm check 和 pnpm build。

MDX 最好是作为 Markdown 的扩展,而非替代品。先从纯内容写起, 只在能让文章更清晰、更易复用的地方才引入表达式和 组件。

Share

If this article helped you, please share it with others!

MDX 语法指南
https://mizuki.mysqil.com/posts/content-pipeline-fixture/
Author
我很莜陌
Published at
2026-08-08
License
MIT License

Some information may be outdated

Table of Contents