<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Aonote 青笺</title><link>https://aonote.vercel.app/</link><description>用 Python 编写的 no-JS 静态博客生成器：Markdown 进，纯 HTML/CSS 出，无需浏览器端 JavaScript。</description><language>zh-cn</language><atom:link href="https://aonote.vercel.app/rss.xml" rel="self" type="application/rss+xml" /><atom:link href="https://aonote.vercel.app/atom.xml" rel="alternate" type="application/atom+xml" /><lastBuildDate>Wed, 20 May 2026 00:00:00 +0000</lastBuildDate><item><title>Aonote 青笺</title><link>https://aonote.vercel.app/posts/welcome-to-aonote/</link><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://aonote.vercel.app/posts/welcome-to-aonote/</guid><dc:creator>Runsli</dc:creator><category>项目</category><description>用 Python 将 Markdown 生成为纯 HTML/CSS 的 no-JS 静态博客生成器。本站即官方站点与可运行演示。</description><content:encoded><![CDATA[<h2 id="aonote-青笺"><a class="toclink" href="#aonote-青笺">Aonote 青笺</a></h2>
<p><strong>Aonote 青笺</strong> 是一个用 Python 编写的 no-JS 静态博客生成器。它把 <code>markdown/</code> 里的文章转成可直接部署的 HTML/CSS 页面：不依赖前端框架，也不要求浏览器执行 JavaScript。</p>
<p>本站 <a href="https://aonote.vercel.app">aonote.vercel.app</a> 同时承担 <strong>项目官网</strong> 与 <strong>在线演示</strong>——你正在阅读的页面，就是用它自己构建出来的。</p>
<h3 id="为什么做它"><a class="toclink" href="#为什么做它">为什么做它</a></h3>
<ul>
<li><strong>内容站应该是文档，不是 Web App</strong>：阅读、订阅、搜索索引不应绑定客户端运行时。</li>
<li><strong>构建期完成重活</strong>：代码高亮、数学公式（MathML）、目录与 SEO 元信息在构建时生成。</li>
<li><strong>默认可检查</strong>：<code>check_site.py</code> 在构建后检查链接、no-JS、无障碍与订阅源，减少上线后的隐性问题。</li>
</ul>
<h3 id="快速开始"><a class="toclink" href="#快速开始">快速开始</a></h3>
<div class="highlight" data-lang="SHELL"><pre aria-label="代码块，语言 SHELL" data-lang="SHELL" tabindex="0"><span></span><code class="language-shell">git<span class="w"> </span>clone<span class="w"> </span>https://github.com/Runsli/Aonote.git
<span class="nb">cd</span><span class="w"> </span>Aonote
pip<span class="w"> </span>install<span class="w"> </span>-r<span class="w"> </span>requirements.txt
</code></pre></div>
<p>编辑 <code>config.py</code> 中的 <code>BASE_URL</code>、<code>BLOG_TITLE</code>、<code>BLOG_AUTHOR</code>，替换 <code>markdown/</code> 里的欢迎文与关于页，然后：</p>
<div class="highlight" data-lang="SHELL"><pre aria-label="代码块，语言 SHELL" data-lang="SHELL" tabindex="0"><span></span><code class="language-shell">python<span class="w"> </span>autobuild.py
<span class="nb">cd</span><span class="w"> </span>_site<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>python<span class="w"> </span>-m<span class="w"> </span>http.server<span class="w"> </span><span class="m">8000</span>
</code></pre></div>
<p>更完整的步骤见 <a href="/posts/doc-quickstart/">快速开始</a>。</p>
<h3 id="核心能力"><a class="toclink" href="#核心能力">核心能力</a></h3>
<ul>
<li>首页、文章、归档、标签、关于页与真实 404。</li>
<li>Markdown 扩展：代码高亮、目录、表格、脚注、任务列表、提示块、数学公式等。</li>
<li>RSS、Atom、Sitemap、Open Graph；结构化数据使用 Microdata，无 JSON-LD <code>&lt;script&gt;</code>。</li>
<li>浅色/暗色模式、移动端导航、键盘焦点与 <code>prefers-reduced-motion</code>。</li>
<li>增量构建与构建后健康检查。</li>
</ul>
<h3 id="链接"><a class="toclink" href="#链接">链接</a></h3>
<ul>
<li><strong>源码与 Issue</strong>：<a href="https://github.com/Runsli/Aonote">github.com/Runsli/Aonote</a></li>
<li><strong>项目生态</strong>（Aonote / Astro 主题 / 个人站）：<a href="/posts/doc-ecosystem/">doc-ecosystem</a></li>
<li><strong>Astro 主题（可选 JS）</strong>：<a href="https://github.com/runsli/astro-theme-aonote">astro-theme-aonote</a> · <a href="https://astro-theme-aonote.vercel.app">在线演示</a></li>
<li><strong>作者</strong>：<a href="https://www.runsli.com/">Runsli 的小站</a></li>
<li><strong>关于本项目</strong>：<a href="/about/">关于页</a></li>
<li><strong>更新日志</strong>：<a href="/posts/doc-changelog/">changelog</a></li>
<li><strong>Markdown 渲染预览</strong>：<a href="/posts/markdown-basics/">Markdown 排版示例</a></li>
</ul>
<h3 id="命名"><a class="toclink" href="#命名">命名</a></h3>
<p><code>Aonote</code> 保留 note（笔记）的含义；中文名 <strong>青笺</strong> 强调纸页与安静书写。少一点运行时，多一点内容本身。</p>
<hr/>
<p>若你 Fork 本仓库做自己的博客，请阅读仓库 <a href="https://github.com/Runsli/Aonote/blob/main/README.zh-CN.md#fork-后定制自己的站点">README</a> 中的「Fork 后定制」一节。</p>]]></content:encoded></item><item><title>项目生态</title><link>https://aonote.vercel.app/posts/doc-ecosystem/</link><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://aonote.vercel.app/posts/doc-ecosystem/</guid><dc:creator>Runsli</dc:creator><category>文档</category><description>Aonote 青笺、astro-theme-aonote 与 Runsli 小站的关系说明，以及如何选择与互链。</description><content:encoded><![CDATA[<h2 id="项目生态"><a class="toclink" href="#项目生态">项目生态</a></h2>
<p><strong>Aonote 青笺</strong> 不是孤立仓库：它与同系列的 Astro 主题、作者个人站一起构成一套「同款阅读体验、不同技术约束」的选择。本文是<strong>完整版说明</strong>；其它仓库 README 与 Astro 主题文档会链到此处，避免多处维护同一张大表。</p>
<h3 id="三个入口分别是什么"><a class="toclink" href="#三个入口分别是什么">三个入口分别是什么</a></h3>

<div aria-label="可横向滚动表格：Aonote 系列三个入口" class="table-wrapper" role="region" tabindex="0"><table><caption><span aria-hidden="true" class="table-caption-prefix">表格：</span>Aonote 系列三个入口</caption>
<thead>
<tr>
<th>入口</th>
<th>链接</th>
<th>角色</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Aonote 青笺</strong>（本仓库）</td>
<td><a href="https://github.com/Runsli/Aonote">github.com/Runsli/Aonote</a> · <a href="https://aonote.vercel.app">aonote.vercel.app</a></td>
<td>Python 构建的 no-JS 静态博客生成器；本页所在<strong>项目官网</strong></td>
</tr>
<tr>
<td><strong>astro-theme-aonote</strong></td>
<td><a href="https://github.com/runsli/astro-theme-aonote">github.com/runsli/astro-theme-aonote</a> · <a href="https://astro-theme-aonote.vercel.app">astro-theme-aonote.vercel.app</a></td>
<td>同款版式与内容模型的 <strong>Astro 5 移植</strong>；可按需加客户端 JS</td>
</tr>
<tr>
<td><strong>Runsli 的小站</strong></td>
<td><a href="https://www.runsli.com/">www.runsli.com</a></td>
<td>作者个人博客（note / jotting），<strong>不是</strong> Aonote 产品文档站</td>
</tr>
</tbody>
</table></div>
<p>三者<strong>独立部署、独立维护</strong>，但在视觉与 Markdown 能力上尽量对齐，方便你在不同场景切换。</p>
<h3 id="如何选择"><a class="toclink" href="#如何选择">如何选择</a></h3>
<div class="highlight" data-lang="TEXT"><pre aria-label="代码块，语言 TEXT" data-lang="TEXT" tabindex="0"><span></span><code class="language-text">需要零浏览器 JS、Python 构建、check_site 质检、申 nojs / 体积类 Club？
  → Aonote 青笺（本仓库）

需要 Astro 生态、组件化、客户端增强或 npm 模板一键建站？
  → astro-theme-aonote

想了解作者、阅读建站随笔（与产品文档无关的个人内容）？
  → runsli.com
</code></pre></div>
<p>不必二选一：有人用 Aonote 做生产博客，用 Astro 主题做实验站；也有人从 Python 版迁到 Astro 版以扩展交互。</p>
<h3 id="技术对照"><a class="toclink" href="#技术对照">技术对照</a></h3>

<div aria-label="可横向滚动表格：Aonote 与 Astro 主题技术对照" class="table-wrapper" role="region" tabindex="0"><table><caption><span aria-hidden="true" class="table-caption-prefix">表格：</span>Aonote 与 Astro 主题技术对照</caption>
<thead>
<tr>
<th>维度</th>
<th>Aonote 青笺</th>
<th>astro-theme-aonote</th>
</tr>
</thead>
<tbody>
<tr>
<td>运行时</td>
<td>构建期 Python；页面无必需 JS</td>
<td>Node 构建；页面可按需含 JS</td>
</tr>
<tr>
<td>内容目录</td>
<td><code>markdown/</code></td>
<td><code>src/content/posts/</code></td>
</tr>
<tr>
<td>站点配置</td>
<td><code>config.py</code></td>
<td><code>src/site.config.ts</code></td>
</tr>
<tr>
<td>布局模板</td>
<td><code>templates/base.html</code></td>
<td><code>src/layouts/BaseLayout.astro</code></td>
</tr>
<tr>
<td>样式</td>
<td><code>assets/style.css</code></td>
<td><code>src/styles/aonote.css</code></td>
</tr>
<tr>
<td>界面文案</td>
<td><code>i18n.py</code></td>
<td><code>src/i18n.ts</code></td>
</tr>
<tr>
<td>构建产物</td>
<td><code>_site/</code></td>
<td><code>dist/</code></td>
</tr>
<tr>
<td>构建命令</td>
<td><code>python autobuild.py</code></td>
<td><code>npm run build</code></td>
</tr>
<tr>
<td>特色</td>
<td><code>check_site.py</code>、增量构建、no-JS 约束</td>
<td>Astro 集成、Shiki、模板 <code>npm create astro</code></td>
</tr>
</tbody>
</table></div>
<p>更细的 upstream mapping 见 <a href="https://github.com/runsli/astro-theme-aonote#upstream-mapping">astro-theme-aonote README</a>。</p>
<h3 id="与-runsli-小站的关系"><a class="toclink" href="#与-runsli-小站的关系">与 Runsli 小站的关系</a></h3>
<p><a href="https://www.runsli.com/">runsli.com</a> 使用 <strong>Thought Lite</strong> 系 Astro 主题（与 Aonote 产品线不同），主要发个人笔记与建站日志。其中与 Aonote 相关的文章会链回本官网与 GitHub，例如：</p>
<ul>
<li><a href="https://www.runsli.com/note/260518">Aonote 近期更新</a>（建站日志）</li>
<li><a href="https://www.runsli.com/note/260520">项目生态说明（个人站短文）</a>（链回本页）</li>
</ul>
<p>产品选型、配置对照、Fork 说明请以<strong>本官网文档</strong>为准；个人站文章偏经历与回顾，可能滞后于仓库最新 commit。</p>
<h3 id="许可与反馈"><a class="toclink" href="#许可与反馈">许可与反馈</a></h3>
<ul>
<li>Aonote 与 astro-theme-aonote 源码许可见各自仓库 <code>LICENSE</code>（均为 MIT）。</li>
<li>问题与 PR：各仓库 GitHub Issues；Aonote 也可在 <a href="/about/">关于页</a> 查看作者联系方式。</li>
</ul>
<h3 id="相关阅读"><a class="toclink" href="#相关阅读">相关阅读</a></h3>
<ul>
<li><a href="/posts/doc-quickstart/">快速开始</a></li>
<li><a href="/posts/doc-why-no-js/">为什么坚持 no-JS</a></li>
<li><a href="/posts/doc-changelog/">更新日志</a></li>
<li><a href="/about/">关于 Aonote</a></li>
</ul>]]></content:encoded></item><item><title>更新日志</title><link>https://aonote.vercel.app/posts/doc-changelog/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://aonote.vercel.app/posts/doc-changelog/</guid><dc:creator>Runsli</dc:creator><category>文档</category><description>Aonote 青笺版本记录与主要变更说明。</description><content:encoded><![CDATA[<h2 id="更新日志"><a class="toclink" href="#更新日志">更新日志</a></h2>
<p>本页记录 <strong>Aonote 青笺</strong> 官网与生成器的重要变更。完整提交历史见 <a href="https://github.com/Runsli/Aonote/commits/main/">GitHub Commits</a>。</p>
<h3 id="未发布"><a class="toclink" href="#未发布">未发布</a></h3>
<h4 id="官网"><a class="toclink" href="#官网">官网</a></h4>
<ul>
<li>新增 <a href="/posts/doc-ecosystem/">项目生态</a> 文档；about、README 与 Astro 主题、runsli.com 互链。</li>
<li>首页支持通过 <code>INDEX_PAGE_TITLE</code> / <code>INDEX_PAGE_SUBTITLE</code> 配置浏览器标签与分享标题（不在正文显示）。</li>
<li>页脚增加 GitHub 仓库链接。</li>
<li>新增本站更新日志页面。</li>
</ul>
<h3 id="2026-05-20"><a class="toclink" href="#2026-05-20">2026-05-20</a></h3>
<h4 id="官网_1"><a class="toclink" href="#官网_1">官网</a></h4>
<ul>
<li>将 <code>aonote.vercel.app</code> 调整为项目官方网站与在线演示。</li>
<li>新增项目文档：《快速开始》《为什么坚持 no-JS》。</li>
<li>README 补充 Fork 后定制说明；作者信息更新为 Runsli。</li>
</ul>
<h3 id="2026-05早期"><a class="toclink" href="#2026-05早期">2026-05（早期）</a></h3>
<h4 id="文档与维护"><a class="toclink" href="#文档与维护">文档与维护</a></h4>
<ul>
<li>移除 changelog 式源码注释；README 按中英文拆分。</li>
<li>优化归档页链接间距；完善模板示例文案。</li>
</ul>
<h4 id="项目"><a class="toclink" href="#项目">项目</a></h4>
<ul>
<li>站点更名为 <strong>Aonote 青笺</strong>。</li>
<li>Markdown 示例按主题拆分（后整合为官网 + 单篇排版预览）。</li>
</ul>
<h3 id="2026-04-及更早"><a class="toclink" href="#2026-04-及更早">2026-04 及更早</a></h3>
<h4 id="功能"><a class="toclink" href="#功能">功能</a></h4>
<ul>
<li>构建健康检查按类别输出报告（A11Y、SEO、Links 等）。</li>
<li>任务列表、脚注、表格标题、diff 行等无障碍增强。</li>
<li>键盘导航与焦点顺序检查；锚点滚动优化。</li>
<li>no-JS 约束、Microdata、RSS/Atom、增量构建等核心能力陆续完善。</li>
</ul>
<hr>
<p>版本号尚未单独打 Tag；关注 <a href="https://github.com/Runsli/Aonote/releases">GitHub Releases</a> 获取后续正式版本。</p>]]></content:encoded></item><item><title>快速开始</title><link>https://aonote.vercel.app/posts/doc-quickstart/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://aonote.vercel.app/posts/doc-quickstart/</guid><dc:creator>Runsli</dc:creator><category>文档</category><description>从克隆仓库到本地预览与部署 Aonote 站点的最短路径。</description><content:encoded><![CDATA[<h2 id="快速开始"><a class="toclink" href="#快速开始">快速开始</a></h2>
<p>本文介绍如何把 Aonote 跑起来，并部署到你自己的域名。若你只想浏览功能，可直接看 <a href="/posts/welcome-to-aonote/">首页</a> 与 <a href="/posts/markdown-basics/">Markdown 排版示例</a>。</p>
<h3 id="环境要求"><a class="toclink" href="#环境要求">环境要求</a></h3>
<ul>
<li>Python 3.7+</li>
<li>pip</li>
<li>Git（可选，用于克隆与构建时间戳）</li>
</ul>
<h3 id="1-获取代码"><a class="toclink" href="#1-获取代码">1. 获取代码</a></h3>
<div class="highlight" data-lang="SHELL"><pre aria-label="代码块，语言 SHELL" data-lang="SHELL" tabindex="0"><span></span><code class="language-shell">git<span class="w"> </span>clone<span class="w"> </span>https://github.com/Runsli/Aonote.git
<span class="nb">cd</span><span class="w"> </span>Aonote
pip<span class="w"> </span>install<span class="w"> </span>-r<span class="w"> </span>requirements.txt
</code></pre></div>
<p>也可在 GitHub 上使用 <strong>Use this template</strong> 创建你自己的仓库。</p>
<h3 id="2-配置站点"><a class="toclink" href="#2-配置站点">2. 配置站点</a></h3>
<p>编辑 <code>config.py</code>，至少修改以下项：</p>
<div class="highlight" data-lang="PYTHON"><pre aria-label="代码块，语言 PYTHON" data-lang="PYTHON" tabindex="0"><span></span><code class="language-python"><span class="n">BASE_URL</span> <span class="o">=</span> <span class="s2">"https://your-domain.example"</span>
<span class="n">BLOG_TITLE</span> <span class="o">=</span> <span class="s2">"你的站点标题"</span>
<span class="n">BLOG_DESCRIPTION</span> <span class="o">=</span> <span class="s2">"你的站点描述"</span>
<span class="n">BLOG_AUTHOR</span> <span class="o">=</span> <span class="s2">"你的名字"</span>
<span class="n">SITE_LANGUAGE</span> <span class="o">=</span> <span class="s2">"zh-CN"</span>  <span class="c1"># 或 "en"</span>
</code></pre></div>
<p>若部署在 GitHub Pages 子路径（如 <code>username.github.io/repo-name/</code>），还需设置 <code>REPO_SUBPATH</code>。</p>
<h3 id="3-准备内容"><a class="toclink" href="#3-准备内容">3. 准备内容</a></h3>
<p>在 <code>markdown/</code> 中写作。Front Matter 示例：</p>
<div class="highlight" data-lang="YAML"><pre aria-label="代码块，语言 YAML" data-lang="YAML" tabindex="0"><span></span><code class="language-yaml"><span class="nn">---</span>
<span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">我的第一篇文章</span>
<span class="nt">date</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">2026-05-20</span>
<span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">显示在首页与 RSS 中的摘要。</span>
<span class="nt">tags</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="nv">blog</span><span class="p p-Indicator">]</span>
<span class="nn">---</span>

<span class="l l-Scalar l-Scalar-Plain">正文从这里开始。</span>
</code></pre></div>
<p>特殊文件：</p>
<ul>
<li><code>about.md</code>：关于页（建议 <code>hidden: true</code>）。</li>
<li><code>404.md</code>：404 页面内容。</li>
</ul>
<h3 id="4-构建与预览"><a class="toclink" href="#4-构建与预览">4. 构建与预览</a></h3>
<div class="highlight" data-lang="SHELL"><pre aria-label="代码块，语言 SHELL" data-lang="SHELL" tabindex="0"><span></span><code class="language-shell">python<span class="w"> </span>autobuild.py
<span class="nb">cd</span><span class="w"> </span>_site
python<span class="w"> </span>-m<span class="w"> </span>http.server<span class="w"> </span><span class="m">8000</span>
</code></pre></div>
<p>浏览器打开 <code>http://localhost:8000</code>。构建通过后会更新 <code>_site/</code>，并在健康检查通过后写入增量构建清单。</p>
<p>单独运行检查：</p>
<div class="highlight" data-lang="SHELL"><pre aria-label="代码块，语言 SHELL" data-lang="SHELL" tabindex="0"><span></span><code class="language-shell">python<span class="w"> </span>check_site.py
</code></pre></div>
<h3 id="5-部署"><a class="toclink" href="#5-部署">5. 部署</a></h3>
<p>将 <code>_site/</code> 目录发布到任意静态托管即可，例如：</p>
<ul>
<li><strong>Vercel / Netlify</strong>：连接仓库，构建命令 <code>python autobuild.py</code>，发布目录 <code>_site</code>（仓库已含 <code>vercel.json</code> / <code>netlify.toml</code>）。</li>
<li><strong>GitHub Pages</strong>：将 <code>_site</code> 内容推送到 <code>gh-pages</code> 分支，或使用 Actions 构建。</li>
</ul>
<p>部署后确认 <code>BASE_URL</code> 与线上域名一致，否则 canonical、RSS 与 Sitemap 中的链接会不正确。</p>
<h3 id="fork-官方站内容时"><a class="toclink" href="#fork-官方站内容时">Fork 官方站内容时</a></h3>
<p>若你 Fork 的是包含本官网内容的仓库，请按 <a href="/about/">关于页 · Fork 做自己的站</a> 替换欢迎文、关于页，并删除不需要的 <code>doc-*.md</code> 项目文档。</p>
<h3 id="下一步"><a class="toclink" href="#下一步">下一步</a></h3>
<ul>
<li><a href="/posts/doc-why-no-js/">为什么坚持 no-JS</a></li>
<li><a href="https://github.com/Runsli/Aonote">项目仓库</a></li>
<li><a href="https://github.com/Runsli/Aonote/blob/main/README.zh-CN.md">完整 README</a></li>
</ul>]]></content:encoded></item><item><title>为什么坚持 no-JS</title><link>https://aonote.vercel.app/posts/doc-why-no-js/</link><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://aonote.vercel.app/posts/doc-why-no-js/</guid><dc:creator>Runsli</dc:creator><category>文档</category><description>Aonote 将页面视为文档而非应用：无客户端脚本、构建期增强与可检查性。</description><content:encoded><![CDATA[<h2 id="为什么坚持-no-js"><a class="toclink" href="#为什么坚持-no-js">为什么坚持 no-JS</a></h2>
<p>Aonote 的目标用户写的是<strong>文章、笔记与文档</strong>，不是需要复杂客户端状态的应用。因此默认输出不包含可执行的浏览器 JavaScript。</p>
<h3 id="页面是文档"><a class="toclink" href="#页面是文档">页面是文档</a></h3>
<p>博客与知识库的核心体验是：阅读、跳转、订阅、被搜索引擎索引。这些都不应依赖：</p>
<ul>
<li>客户端路由与 hydration</li>
<li>运行时 Markdown 或数学渲染</li>
<li>用脚本补上的导航、目录或主题切换</li>
</ul>
<p>Aonote 把代码高亮、公式（MathML）、目录锚点、Open Graph 等放在 <strong>构建阶段</strong> 完成，部署后只有 HTML 与 CSS。</p>
<h3 id="结构化数据不用-script"><a class="toclink" href="#结构化数据不用-script">结构化数据不用 <code>&lt;script&gt;</code></a></h3>
<p>许多站点用 JSON-LD 的 <code>&lt;script type="application/ld+json"&gt;</code> 做结构化数据。Aonote 改用 <strong>Microdata</strong> 写在 HTML 元素上，避免在页面里出现 script 标签，也更贴近 <a href="https://nojs.club/">nojs.club</a> 所倡导的精神。</p>
<h3 id="交互用-htmlcss-原生能力"><a class="toclink" href="#交互用-htmlcss-原生能力">交互用 HTML/CSS 原生能力</a></h3>
<p>这些能力不依赖脚本：</p>
<ul>
<li>移动端导航（<code>:target</code> / checkbox hack 等纯 CSS 方案）</li>
<li><code>&lt;details&gt;</code> / <code>&lt;summary&gt;</code> 折叠</li>
<li>返回顶部（锚点链接）</li>
<li>浅色/暗色模式（<code>prefers-color-scheme</code> 与 CSS 变量）</li>
</ul>
<h3 id="可验证"><a class="toclink" href="#可验证">可验证</a></h3>
<p><code>check_site.py</code> 会检查：</p>
<ul>
<li>是否存在不应出现的可执行脚本</li>
<li>链接、锚点、图片与 Feeds 是否有效</li>
<li>基础无障碍与 SEO 细节</li>
</ul>
<p>构建失败时不会更新增量清单，避免「坏构建」被当成已发布状态。</p>
<h3 id="不是反对一切-js"><a class="toclink" href="#不是反对一切-js">不是反对一切 JS</a></h3>
<p>no-JS 指的是 <strong>你的读者不必为你的内容站加载脚本</strong>。构建工具本身用 Python，与浏览器无关。若你将来需要个别页面的例外，应在明确约束下审慎添加，并仍通过健康检查把关。</p>
<h3 id="若仍需要-javascript"><a class="toclink" href="#若仍需要-javascript">若仍需要 JavaScript</a></h3>
<p>no-JS 是本仓库（Python 版）的默认约束，不是否定一切前端能力。若你的站点需要 Astro 组件、客户端增强或更复杂的交互，可使用同系列的 <a href="https://github.com/runsli/astro-theme-aonote">astro-theme-aonote</a>。详见 <a href="/posts/doc-ecosystem/">项目生态</a>。</p>
<h3 id="相关阅读"><a class="toclink" href="#相关阅读">相关阅读</a></h3>
<ul>
<li><a href="/posts/doc-quickstart/">快速开始</a></li>
<li><a href="/posts/welcome-to-aonote/">首页 · Aonote 是什么</a></li>
<li><a href="https://nojs.club/">nojs.club</a></li>
</ul>]]></content:encoded></item><item><title>Markdown 排版示例</title><link>https://aonote.vercel.app/posts/markdown-basics/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://aonote.vercel.app/posts/markdown-basics/</guid><dc:creator>Runsli</dc:creator><category>示例</category><description>Aonote 官网保留的语法预览页：标题、列表、链接、公式、脚注与中英文混排等基础排版效果。</description><content:encoded><![CDATA[<p>本站保留此页作为 <strong>Markdown 渲染预览</strong>。Fork 后若不需要可删除本文件。</p>
<p>这个页面聚焦 Markdown 基础排版能力：标题、段落、行内文本、链接、数学公式、列表、引用、脚注和混排文本。</p>
<h2 id="标题"><a class="toclink" href="#标题">标题</a></h2>
<!-- markdownlint-disable -->
<h2 id="一级标题"><a class="toclink" href="#一级标题">一级标题</a></h2>
<!-- markdownlint-restore -->
<h3 id="二级标题"><a class="toclink" href="#二级标题">二级标题</a></h3>
<h4 id="三级标题"><a class="toclink" href="#三级标题">三级标题</a></h4>
<h5 id="四级标题"><a class="toclink" href="#四级标题">四级标题</a></h5>
<h6 id="五级标题"><a class="toclink" href="#五级标题">五级标题</a></h6>
<h6 id="六级标题"><a class="toclink" href="#六级标题">六级标题</a></h6>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md"><span class="gh"># 一级标题</span>
<span class="gu">## 二级标题</span>
<span class="gu">### 三级标题</span>
<span class="gu">#### 四级标题</span>
<span class="gu">##### 五级标题</span>
<span class="gu">###### 六级标题</span>
</code></pre></div>
<h3 id="段落与换行"><a class="toclink" href="#段落与换行">段落与换行</a></h3>
<p>这是一个段落。</p>
<p>这是另一个段落。</p>
<p>这是一句话不过我要在这里<br/>
换行</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>上方的代码中 <code>这里</code> 后面有两个空格。</p>
</div>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md">这是一个段落。

这是另一个段落。

这是一句话不过我要在这里  
换行
</code></pre></div>
<h3 id="行内文本"><a class="toclink" href="#行内文本">行内文本</a></h3>
<p>这句话里拥有<strong>加粗</strong>、<em>倾斜</em>、<del>删除</del>、<code>行内代码</code>、<mark>重点标记</mark> 和快捷键 <kbd>⌘</kbd> + <kbd>K</kbd>。</p>
<p>经典 Emoji: 😉 😢 😆 😋</p>
<p>简写 Emoji: 😎 🙂 😘 ☹️ 🙂 ☹️ 😉</p>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md">这句话里拥有**加粗**、*倾斜*、~~删除~~、`行内代码`、&lt;mark&gt;重点标记&lt;/mark&gt; 和快捷键 &lt;kbd&gt;⌘&lt;/kbd&gt; + &lt;kbd&gt;K&lt;/kbd&gt;。

经典 Emoji: :wink: :cry: :laughing: :yum:

简写 Emoji: 8-) :) :\* :( :-) :-( ;)
</code></pre></div>
<h3 id="链接"><a class="toclink" href="#链接">链接</a></h3>
<p><a href="/">根目录访问主页</a></p>
<p><a href="/posts/welcome-to-aonote/">站内文章示例</a></p>
<p><a href="/about">根目录访问关于</a></p>
<p><a href="/archive/">归档页面</a></p>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md">[<span class="nt">根目录访问主页</span>](<span class="na">/</span>)
[<span class="nt">站内文章示例</span>](<span class="na">/posts/welcome-to-aonote/</span>)
[<span class="nt">根目录访问关于</span>](<span class="na">/about</span>)
[<span class="nt">归档页面</span>](<span class="na">/archive/</span>)
</code></pre></div>
<h3 id="分割线"><a class="toclink" href="#分割线">分割线</a></h3>
<hr/>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md">---
</code></pre></div>
<h3 id="数学公式"><a class="toclink" href="#数学公式">数学公式</a></h3>
<p>行内公式示例：<span class="arithmatex"><math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>E</mi><mo>=</mo><mi>m</mi><msup><mi>c</mi><mn>2</mn></msup></mrow></math></span>。</p>
<p>块级公式示例：</p>
<div class="arithmatex"><math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msubsup><mo>∫</mo><mn>0</mn><mn>1</mn></msubsup><msup><mi>x</mi><mn>2</mn></msup><mi>d</mi><mi>x</mi><mo>=</mo><mfrac><mrow><mn>1</mn></mrow><mrow><mn>3</mn></mrow></mfrac></mrow></math></div>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md">行内公式示例：$E = mc^2$。

块级公式示例：

$$
\int_0^1 x^2 dx = \frac{1}{3}
$$
</code></pre></div>
<h3 id="列表"><a class="toclink" href="#列表">列表</a></h3>
<h4 id="无序列表"><a class="toclink" href="#无序列表">无序列表</a></h4>
<ul>
<li>无序列表项</li>
<li>无序列表项</li>
<li>列表中的列表项<ul>
<li>更多的列表项</li>
<li>更多的列表项</li>
<li>更多的列表项</li>
</ul>
</li>
<li>
<p>列表中的长列表项，这个列表项很长。</p>
<p>而且由很多个段落构成。</p>
<p>甚至最后一个段落还包含了<a href="#链接">链接</a>。
- 无序列表项</p>
</li>
</ul>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md"><span class="k">-</span><span class="w"> </span>无序列表项
<span class="k">-</span><span class="w"> </span>无序列表项
<span class="w">  </span><span class="k">-</span><span class="w"> </span>列表中的列表项
<span class="w">    </span><span class="k">-</span><span class="w"> </span>更多的列表项
<span class="w">  </span><span class="k">-</span><span class="w"> </span>列表中的长列表项，这个列表项很长。

    而且由很多个段落构成。

    甚至最后一个段落还包含了[链接](#链接)。
</code></pre></div>
<h4 id="有序列表"><a class="toclink" href="#有序列表">有序列表</a></h4>
<ol>
<li>有序列表第一项</li>
<li>有序列表第二项<br/>
   第二项的需要换行<br/>
   再次换行</li>
<li>有序列表第三项</li>
</ol>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>上方的代码中 <code>换行</code> 后面也有两个空格。</p>
</div>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md"><span class="k">1.</span> 有序列表第一项
<span class="k">1.</span> 有序列表第二项  
   第二项的需要换行  
   再次换行
<span class="k">1.</span> 有序列表第三项
</code></pre></div>
<h4 id="任务列表"><a class="toclink" href="#任务列表">任务列表</a></h4>
<ul class="task-list">
<li class="task-list-item" data-task-state="completed"><label class="task-list-control"><input aria-disabled="true" aria-label="已完成任务：已完成的任务" checked="" disabled="" type="checkbox"/><span class="task-list-indicator"></span></label><span class="task-state-label visually-hidden">已完成: </span> 已完成的任务</li>
<li class="task-list-item" data-task-state="incomplete"><label class="task-list-control"><input aria-disabled="true" aria-label="未完成任务：未完成的任务" disabled="" type="checkbox"/><span class="task-list-indicator"></span></label><span class="task-state-label visually-hidden">未完成: </span> 未完成的任务</li>
<li class="task-list-item" data-task-state="incomplete"><label class="task-list-control"><input aria-disabled="true" aria-label="未完成任务：静态页面中复选框不可点击" disabled="" type="checkbox"/><span class="task-list-indicator"></span></label><span class="task-state-label visually-hidden">未完成: </span> 静态页面中复选框不可点击</li>
</ul>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md"><span class="k">- [x]</span> 已完成的任务
<span class="k">- [ ]</span> 未完成的任务
<span class="k">- [ ]</span> 静态页面中复选框不可点击
</code></pre></div>
<h4 id="定义列表"><a class="toclink" href="#定义列表">定义列表</a></h4>
<dl>
<dt>静态站点</dt>
<dd>只由 HTML、CSS 和静态资源组成，不依赖客户端 JavaScript 运行时。</dd>
<dt>RSS</dt>
<dd>一种用于订阅网站更新的格式，可以被阅读器聚合。</dd>
</dl>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md">静态站点
: 只由 HTML、CSS 和静态资源组成，不依赖客户端 JavaScript 运行时。

RSS
: 一种用于订阅网站更新的格式，可以被阅读器聚合。
</code></pre></div>
<h3 id="引用"><a class="toclink" href="#引用">引用</a></h3>
<blockquote>
<p>引用也可以连用</p>
<blockquote>
<p>可以添加额外的大于号制造更深的引用</p>
</blockquote>
</blockquote>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md"><span class="k">&gt; </span><span class="ge">引用也可以连用</span>
<span class="k">&gt;</span>
<span class="ge">&gt; &gt; 可以添加额外的大于号制造更深的引用</span>
</code></pre></div>
<h4 id="带来源的引用"><a class="toclink" href="#带来源的引用">带来源的引用</a></h4>
<blockquote>
<p>简洁并不意味着缺少结构，而是每个结构都有清晰的用途。</p>
<p><cite>Aonote 阅读样式测试</cite></p>
</blockquote>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md"><span class="k">&gt; </span><span class="ge">简洁并不意味着缺少结构，而是每个结构都有清晰的用途。</span>
<span class="k">&gt;</span>
<span class="ge">&gt; &lt;cite&gt;Aonote 阅读样式测试&lt;/cite&gt;</span>
</code></pre></div>
<h3 id="脚注"><a class="toclink" href="#脚注">脚注</a></h3>
<p>这里有一个脚注引用。<sup id="fnref:markdown-footnote"><a aria-label="脚注 1" class="footnote-ref" href="#fn:markdown-footnote" title="脚注 1">1</a></sup></p>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md">这里有一个脚注引用。[^markdown-footnote]

[<span class="nl">^markdown-footnote</span>]: <span class="na">这是脚注内容，可以放补充说明、来源或延伸阅读。</span>
</code></pre></div>
<h3 id="混排段落"><a class="toclink" href="#混排段落">混排段落</a></h3>
<p>这是一段中文、English、数字 123、URL https://example.com/path/to/resource 和行内代码 <code>inline_code()</code> 混排的测试文本，用来观察行高、换行和标点间距。</p>
<div class="highlight" data-lang="MD"><pre aria-label="代码块，语言 MD" data-lang="MD" tabindex="0"><span></span><code class="language-md">这是一段中文、English、数字 123、URL https://example.com/path/to/resource 和行内代码 <span class="sb">`inline_code()`</span> 混排的测试文本，用来观察行高、换行和标点间距。
</code></pre></div>
<div class="footnote">
<hr/>
<ol>
<li id="fn:markdown-footnote">
<p>这是脚注内容，可以放补充说明、来源或延伸阅读。 <a aria-label="返回脚注 1 的引用位置" class="footnote-backref" href="#fnref:markdown-footnote" title="返回脚注 1 的引用位置">↩</a></p>
</li>
</ol>
</div>]]></content:encoded></item></channel></rss>