<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Author</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://flatpaper.nep.me/</id>
  <link href="https://flatpaper.nep.me/" rel="alternate"/>
  <link href="https://flatpaper.nep.me/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, Author</rights>
  <subtitle>A Simple Hexo Theme</subtitle>
  <title>Flatpaper Demo</title>
  <updated>2026-09-01T08:12:11.040Z</updated>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题开发" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91/"/>
    <category term="FlatPaper" scheme="https://flatpaper.nep.me/tags/FlatPaper/"/>
    <category term="视觉设计" scheme="https://flatpaper.nep.me/tags/%E8%A7%86%E8%A7%89%E8%AE%BE%E8%AE%A1/"/>
    <category term="主题" scheme="https://flatpaper.nep.me/tags/%E4%B8%BB%E9%A2%98/"/>
    <category term="图片" scheme="https://flatpaper.nep.me/tags/%E5%9B%BE%E7%89%87/"/>
    <content>
      <![CDATA[<p><code>feat/pr-9</code> 这一批改动来自贡献者 <a href="https://github.com/Homulilly/hexo-theme-flatpaper/pull/9">jinghuashang</a> 的 PR #9。功能设计是他的，最终重新实现了一些功能，调整了一些不兼容的配置。</p><p>一共六项：<strong>堆叠相册</strong>、<strong>渐进式开屏大图</strong>、<strong>窄屏独立背景图</strong>、<strong>打字机</strong>、<strong>滚动渐入</strong>、<strong>页脚图标链接与署名位置</strong>。其中两项可以直接在文章里演示，剩下四项是站点级的——这个页面本身就在跑，往下翻的时候留意一下页脚和回到首页的开屏。</p><span id="more"></span><h2 id="堆叠相册"><a href="#堆叠相册" class="headerlink" title="堆叠相册"></a>堆叠相册</h2><p>引入了 <code>&#123;% stackalbum 480,480 %&#125;</code> 标签：</p><p>一叠像扑克牌一样码在一起的照片。<strong>点最上面那张</strong>，它会被抽起来，然后滑到牌堆最底下。</p><div class="fp-stack" style="--fp-stack-w: 480px; --fp-stack-h: 480px" role="group" aria-label="堆叠相册"><div class="fp-stack__card fp-stack__card--h" data-orient="h"><img class="fp-stack__img no-zoom" src="https://img.nep.me/bg/bg-madoka-1.webp" alt="见滝原的黄昏" loading="lazy" decoding="async" draggable="false" referrerpolicy="no-referrer"></div><div class="fp-stack__card fp-stack__card--v" data-orient="v"><img class="fp-stack__img no-zoom" src="https://img.nep.me/bg/bg-homura.webp" alt="晓美焰" loading="lazy" decoding="async" draggable="false" referrerpolicy="no-referrer"></div><div class="fp-stack__card fp-stack__card--h" data-orient="h"><img class="fp-stack__img no-zoom" src="https://img.nep.me/bg/devil-homura.webp" alt="叛逆的物语" loading="lazy" decoding="async" draggable="false" referrerpolicy="no-referrer"></div><div class="fp-stack__card" data-orient=""><img class="fp-stack__img no-zoom" src="https://img.nep.me/bg/bg-madoka-2.webp" alt="圆环之理" loading="lazy" decoding="async" draggable="false" referrerpolicy="no-referrer"></div></div><p>写法就是一个标签包一组普通的 markdown 图片：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">&#123;% stackalbum 480,480 %&#125;</span><br><span class="line">![<span class="string">见滝原的黄昏</span>](<span class="link">https://img.nep.me/bg/bg-madoka-1.webp &quot;h&quot;</span>)</span><br><span class="line">![<span class="string">晓美焰</span>](<span class="link">https://img.nep.me/bg/bg-homura.webp &quot;v&quot;</span>)</span><br><span class="line">![<span class="string">叛逆的物语</span>](<span class="link">https://img.nep.me/bg/devil-homura.webp &quot;h&quot;</span>)</span><br><span class="line">![<span class="string">圆环之理</span>](<span class="link">https://img.nep.me/bg/bg-madoka-2.webp</span>)</span><br><span class="line">&#123;% endstackalbum %&#125;</span><br></pre></td></tr></table></figure><p>几个细节：</p><ul><li>参数 <code>宽,高</code> 可选，默认 <code>480,480</code>。</li><li>markdown 的 title 位置填 <code>&quot;h&quot;</code> 是横卡（480×320），<code>&quot;v&quot;</code> 是竖卡（320×480）。<strong>不填的按图片自己的宽高比在浏览器端判断</strong>——上面第四张就没填。</li><li>容器高度按卡片实际占位算，取「<code>高</code> 参数」和「卡片真正需要的空间」里较大的那个。所以竖图多、张数多的时候不会溢出到下面的正文里。</li><li>窄屏会整体缩放到放得下为止。缩放看的是牌堆实际有多少地方可用，不是某个像素断点——所以窄侧栏、平板分栏和手机是同一套逻辑。</li><li>键盘可用：牌堆本身可以聚焦，<code>Enter</code> 或 <code>→</code> 翻到下一张。堆叠状态下只有最上层是清晰的，不给键盘路径的话其余照片对不用鼠标的人就是不存在的。<code>Space</code> 有意没绑——它是翻页键。</li></ul><div class="flatpaper-note flatpaper-note--info"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>主题的 Fancybox 灯箱会自动包裹正文图片，但相册里的图片带了 <code>no-zoom</code>，所以点击只翻牌、不会弹出大图。</p></div></div><h3 id="悬停翻牌"><a href="#悬停翻牌" class="headerlink" title="悬停翻牌"></a>悬停翻牌</h3><p>引入了 <code>&#123;% stackalbumnav %&#125;</code> 标签：</p><p>小一号的变体，一个牌堆配一列名字。<strong>鼠标移到名字上</strong>（或者用 Tab 键聚焦），对应的封面会翻到最上层；移开就恢复原来的顺序。</p><div class="fp-stacknav"><div class="fp-stack fp-stack--nav" style="--fp-stack-w: 160px; --fp-stack-h: 160px" role="group" aria-label="堆叠相册"><div class="fp-stack__card" data-orient=""><img class="fp-stack__img no-zoom" src="https://img.nep.me/bg/bg-madoka.webp" alt="魔法少女小圆" loading="lazy" decoding="async" draggable="false" referrerpolicy="no-referrer"></div><div class="fp-stack__card" data-orient=""><img class="fp-stack__img no-zoom" src="https://img.nep.me/bg/devil-homura.webp" alt="叛逆的物语" loading="lazy" decoding="async" draggable="false" referrerpolicy="no-referrer"></div><div class="fp-stack__card" data-orient=""><img class="fp-stack__img no-zoom" src="https://img.nep.me/bg/bg-homura.webp" alt="晓美焰" loading="lazy" decoding="async" draggable="false" referrerpolicy="no-referrer"></div><div class="fp-stack__card" data-orient=""><img class="fp-stack__img no-zoom" src="https://img.nep.me/bg/bg-madoka-1.webp" alt="见滝原的午后" loading="lazy" decoding="async" draggable="false" referrerpolicy="no-referrer"></div><div class="fp-stack__card" data-orient=""><img class="fp-stack__img no-zoom" src="https://img.nep.me/bg/bg-madoka-2.webp" alt="圆环之理" loading="lazy" decoding="async" draggable="false" referrerpolicy="no-referrer"></div></div><ul class="fp-stacknav__list"><li><a href="https://www.bilibili.com/bangumi/media/md1177" target="_blank" rel="noopener" data-fp-stack-index="0">魔法少女小圆</a></li><li><a href="https://www.bilibili.com/bangumi/media/md2539" target="_blank" rel="noopener" data-fp-stack-index="1">叛逆的物语</a></li><li><a href="https://zh.moegirl.org.cn/%E6%9B%89%E7%BE%8E%E7%84%B0" target="_blank" rel="noopener" data-fp-stack-index="2">晓美焰</a></li><li><a href="https://zh.moegirl.org.cn/%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E5%B0%8F%E5%9C%86" target="_blank" rel="noopener" data-fp-stack-index="3">见滝原的午后</a></li><li><a href="https://zh.moegirl.org.cn/%E5%9C%86%E7%8E%AF%E4%B9%8B%E7%90%86" target="_blank" rel="noopener" data-fp-stack-index="4">圆环之理</a></li></ul></div><p>标签的参数是一条数据路径：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% stackalbumnav collections.anime %&#125;</span><br></pre></td></tr></table></figure><p>第一段是 <code>source/_data/</code> 下的文件名，后面按点号往下钻，最终指到一个列表。这个例子读的是 <code>source/_data/collections.yml</code>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">anime:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">title:</span> <span class="string">魔法少女小圆</span></span><br><span class="line">    <span class="attr">link:</span> <span class="string">https://www.bilibili.com/bangumi/media/md1177</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">https://img.nep.me/bg/bg-madoka.webp</span></span><br></pre></td></tr></table></figure><p><strong>文件名和键名都是你自己定的。</strong> </p><p>字段接别名：名字用 <code>name</code> 或 <code>title</code>，链接用 <code>href</code> &#x2F; <code>link</code> &#x2F; <code>url</code>，封面用 <code>cover</code> &#x2F; <code>image</code> &#x2F; <code>src</code>。</p><h2 id="渐进式开屏大图"><a href="#渐进式开屏大图" class="headerlink" title="渐进式开屏大图"></a>渐进式开屏大图</h2><p>这项要回<a href="/">首页</a>看。开启后开屏背景是这样加载的：先铺一张高斯模糊的小图占位，等背景大图解码完成再淡出交接；同时往下滚的时候图片会轻微放大、整个开屏渐隐。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">home_hero:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">image:</span> <span class="string">https://example.com/hero.jpg</span></span><br><span class="line">  <span class="attr">image_progressive:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># 可选：模糊层用的小图，省略时用纸面底色，仍然有淡入</span></span><br><span class="line">  <span class="attr">image_placeholder:</span> <span class="string">/images/hero-lqip.jpg</span></span><br></pre></td></tr></table></figure><p>关键在于<strong>图源仍然只有 <code>image</code> 一个</strong>。<code>image_progressive</code> 改变的是它怎么加载，不是换一个图源进来，所以 <code>image_overlay</code>、<code>mobile_image</code>、多图随机轮播全部照常生效。加载失败、脚本没跑、或者浏览器禁用 JS，都会直接显示 <code>image</code> 本身——模糊层带着 <code>hidden</code> 属性出场，由脚本揭开，两秒内没人接手就自己藏回去。</p><p>原 PR 那版滚动时还会逐帧加 <code>blur()</code>。 目前主题只保留了 opacity 和 transform。</p><h3 id="窄屏可以单独指定一张"><a href="#窄屏可以单独指定一张" class="headerlink" title="窄屏可以单独指定一张"></a>窄屏可以单独指定一张</h3><p><code>mobile_image</code> 从开关变成了「开关或图源」：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">home_hero:</span></span><br><span class="line">  <span class="attr">mobile_image:</span> <span class="literal">true</span>                                  <span class="comment"># 默认，沿用上面的 image</span></span><br><span class="line">  <span class="comment"># mobile_image: false                               # 窄屏回退到纸张背景</span></span><br><span class="line">  <span class="comment"># mobile_image: /images/hero-mobile.jpg             # 窄屏用这张</span></span><br></pre></td></tr></table></figure><p>填链接的时候，窄屏（≤760px）单独用那张图，适合另外准备一版竖版裁切。这时候开屏<strong>仍然是照片模式</strong>，文字和按钮配色不变——只有背景图那一条声明变了。</p><h2 id="打字机"><a href="#打字机" class="headerlink" title="打字机"></a>打字机</h2><p>页脚版权行右边那一句，还有首页开屏 bio 的位置——这个站两处都开着，翻到本页最底下就能看到。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">footer:</span></span><br><span class="line">  <span class="attr">typed:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">effect:</span> <span class="literal">true</span>          <span class="comment"># false 就直接显示 sub 第一行，不做动画</span></span><br><span class="line">    <span class="attr">loop:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">type_speed:</span> <span class="number">150</span></span><br><span class="line">    <span class="attr">source:</span> <span class="number">1</span>             <span class="comment"># false 仅 sub | 1 一言 | 2 一句网 | 3 今日诗词</span></span><br><span class="line">    <span class="attr">sub:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">桃李春风一杯酒，江湖夜雨十年灯</span></span><br></pre></td></tr></table></figure><p><code>home_hero.typed</code> 是同一套字段。两处同时开启也只会请求一次 Typed.js。</p><p>CDN 不可达的时候不会转圈：<code>onerror</code> 和 6 秒超时走同一个出口，退回纯文本显示 <code>sub</code> 第一行。hero 那一侧 <code>sub</code> 为空时会回退到 <code>hero.bio</code> &#x2F; <code>profile.bio</code>，不会渲染出一个空段落。</p><h2 id="滚动渐入"><a href="#滚动渐入" class="headerlink" title="滚动渐入"></a>滚动渐入</h2><p>也是回<a href="/">首页</a>看：精选轮播、章节标题、文章卡和侧栏卡进入视口时逐个上浮渐显，文章卡按位置交错出场。</p><p>值得说的是<strong>没有 JS 的时候会怎样</strong>。<code>.reveal</code> 的初始状态是 <code>opacity: 0</code>，如果就这么发出去，禁用 JS 的读者会看到一个空首页。所以隐藏这件事由 <code>&lt;head&gt;</code> 里的内联脚本决定：只有在 <code>IntersectionObserver</code> 存在时才给根元素加 <code>reveal-ready</code>，并且挂一个两秒的看门狗——<code>main.js</code> 没接上观察器的话就把这个类摘掉。没有 JS，就没有任何东西被隐藏过。</p><p>交错延迟走的是自定义属性 <code>--reveal-delay</code> 加 <code>animation-delay</code>，而不是内联 <code>transition-delay</code>。后者会顺带延迟卡片自己的 hover 抬升，每行靠后的卡片鼠标移上去要等最多 300ms 才有反应。</p><h2 id="页脚图标链接与署名位置"><a href="#页脚图标链接与署名位置" class="headerlink" title="页脚图标链接与署名位置"></a>页脚图标链接与署名位置</h2><p>看本页页脚右侧那一行：<code>归档 · 分类 · 标签 · [CC 图标组] · Powered by Theme FlatPaper</code>。</p><p>条目可以只有图标、没有文字：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">footer:</span></span><br><span class="line">  <span class="attr">links:</span></span><br><span class="line">    <span class="bullet">-</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">归档</span></span><br><span class="line">        <span class="attr">link:</span> <span class="string">/archives</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">link:</span> <span class="string">/copyright</span></span><br><span class="line">        <span class="attr">title:</span> <span class="string">版权协议</span></span><br><span class="line">        <span class="attr">aria-label:</span> <span class="string">版权协议</span></span><br><span class="line">        <span class="attr">icons:</span></span><br><span class="line">          <span class="bullet">-</span> <span class="string">fa-regular:copyright</span></span><br><span class="line">          <span class="bullet">-</span> <span class="string">fa-brands:creative-commons-by</span></span><br><span class="line">          <span class="bullet">-</span> <span class="string">fa-brands:creative-commons-nc</span></span><br><span class="line">          <span class="bullet">-</span> <span class="string">fa-brands:creative-commons-nd</span></span><br></pre></td></tr></table></figure><p><code>icons</code> 是数组，一个链接里可以并排几个图标。主题的图标按需打包机制同步认这个字段，所以只有真正用到的 SVG 才会进产物。纯图标链接没有可读的名字，<code>aria-label</code> 会补上。</p><p>主题署名的位置换了配置面：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">footer:</span></span><br><span class="line">  <span class="attr">powered:</span></span><br><span class="line">    <span class="attr">prefix:</span> <span class="string">Powered</span> <span class="string">by</span> <span class="string">Theme</span></span><br><span class="line">    <span class="attr">name:</span> <span class="string">FlatPaper</span></span><br><span class="line">    <span class="attr">row:</span> <span class="string">first</span>        <span class="comment"># first（默认）| last | own</span></span><br></pre></td></tr></table></figure><ul><li><code>first</code> —— 并入第一组链接行的末尾，也就是这个站现在的样子</li><li><code>last</code> —— 并入最后一行末尾</li><li><code>own</code> —— 独占一行</li></ul><div class="flatpaper-note flatpaper-note--warning"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p><strong>默认布局变了。</strong> v0.4.0 里署名是独占第一行的，现在默认并入第一组链接行。如果你配了 <code>footer.links</code>，升级后右侧会从两行变成一行。想要旧的样子就写 <code>row: own</code>。</p></div></div><p>为什么默认从「独占一行」改成「并入」：<code>.site-footer__right</code> 是一行一个 row 的 grid，配了备案信息的站点会得到</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Powered by Theme FlatPaper</span><br><span class="line">蜀ICP备XXXXXXXX号-X · 版权协议</span><br></pre></td></tr></table></figure><p>主次颠倒了——备案信息才是主体，主题署名压在它头上。</p><h2 id="赞赏名单"><a href="#赞赏名单" class="headerlink" title="赞赏名单"></a>赞赏名单</h2><p>在关于页一类的独立页面正文里写一段结构化 HTML，就能得到手账便签风格的赞赏卡片。没有新增配置项。</p><div class="reward-list">  <div class="reward-list__item reward-list__item--p1">    <span class="reward-list__avatar reward-list__avatar--text">焰</span>    <span class="reward-list__name">晓美焰</span>    <div class="reward-list__bottom">      <span class="reward-list__amount">¥100</span>      <time class="reward-list__date">2026-08-14</time>    </div>  </div>  <div class="reward-list__item reward-list__item--p2">    <span class="reward-list__avatar reward-list__avatar--text">圆</span>    <span class="reward-list__name">鹿目圆</span>    <div class="reward-list__bottom">      <span class="reward-list__amount">¥50</span>      <time class="reward-list__date">2026-08-09</time>    </div>  </div>  <div class="reward-list__item reward-list__item--p3">    <span class="reward-list__avatar reward-list__avatar--text">沙</span>    <span class="reward-list__name">美树沙耶香</span>    <div class="reward-list__bottom">      <span class="reward-list__amount">¥20</span>      <time class="reward-list__date">2026-07-30</time>    </div>  </div>  <div class="reward-list__item reward-list__item--p4">    <span class="reward-list__avatar reward-list__avatar--text">杏</span>    <span class="reward-list__name">佐仓杏子</span>    <div class="reward-list__bottom">      <span class="reward-list__amount">¥10</span>      <time class="reward-list__date">2026-07-22</time>    </div>  </div>  <div class="reward-list__item reward-list__item--p5">    <span class="reward-list__avatar reward-list__avatar--text">巴</span>    <span class="reward-list__name">巴麻美</span>    <div class="reward-list__bottom">      <span class="reward-list__amount">¥5</span>      <time class="reward-list__date">2026-07-11</time>    </div>  </div></div><p class="reward-list__total">共 <strong>5</strong> 人 · 最新更新时间：<time datetime="2026-08-14">2026-08-14</time></p><p>金额徽章的颜色不用自己写：脚本扫 <code>.reward-list__amount</code> 的文本，解析出数字后按人民币纸币面额自动上色——≥100 红、≥50 绿、≥20 棕黄、≥10 蓝、≥5 紫、≥1 橄榄绿。markup 里已经写了 <code>reward-list__amount--50</code> 这类档位类的话，以你写的为准。</p><p>纸色档位 <code>--p1</code> 到 <code>--p5</code> 循环使用，胶带颜色跟着纸色走。头像可以放 <code>&lt;img class=&quot;reward-list__avatar no-zoom&quot;&gt;</code> 贴在右上角，也可以像上面这样用 <code>.reward-list__avatar--text</code> 显示名字首字。</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;reward-list&quot;</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;reward-list__item reward-list__item--p1&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">img</span> <span class="attr">class</span>=<span class="string">&quot;reward-list__avatar no-zoom&quot;</span> <span class="attr">src</span>=<span class="string">&quot;/images/donor.jpg&quot;</span> <span class="attr">alt</span>=<span class="string">&quot;昵称&quot;</span></span></span><br><span class="line"><span class="tag">         <span class="attr">loading</span>=<span class="string">&quot;lazy&quot;</span> <span class="attr">referrerpolicy</span>=<span class="string">&quot;no-referrer&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">span</span> <span class="attr">class</span>=<span class="string">&quot;reward-list__name&quot;</span>&gt;</span>昵称<span class="tag">&lt;/<span class="name">span</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;reward-list__bottom&quot;</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">span</span> <span class="attr">class</span>=<span class="string">&quot;reward-list__amount&quot;</span>&gt;</span>¥100<span class="tag">&lt;/<span class="name">span</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">time</span> <span class="attr">class</span>=<span class="string">&quot;reward-list__date&quot;</span>&gt;</span>2026-08-14<span class="tag">&lt;/<span class="name">time</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="配置速查"><a href="#配置速查" class="headerlink" title="配置速查"></a>配置速查</h2><table><thead><tr><th>功能</th><th>配置 &#x2F; 写法</th><th>默认</th></tr></thead><tbody><tr><td>堆叠相册</td><td><code>&#123;% stackalbum 宽,高 %&#125;</code> … <code>&#123;% endstackalbum %&#125;</code></td><td>——</td></tr><tr><td>悬停翻牌</td><td><code>&#123;% stackalbumnav 数据路径 %&#125;</code></td><td>——</td></tr><tr><td>渐进开屏</td><td><code>home_hero.image_progressive</code> &#x2F; <code>image_placeholder</code></td><td>关</td></tr><tr><td>窄屏背景图</td><td><code>home_hero.mobile_image</code>（<code>true</code> &#x2F; <code>false</code> &#x2F; 链接）</td><td><code>true</code></td></tr><tr><td>打字机</td><td><code>footer.typed</code> &#x2F; <code>home_hero.typed</code></td><td>关</td></tr><tr><td>滚动渐入</td><td>无配置项，首页自动生效</td><td>开</td></tr><tr><td>页脚图标</td><td><code>footer.links[].icons</code> &#x2F; <code>title</code> &#x2F; <code>aria-label</code></td><td>——</td></tr><tr><td>署名位置</td><td><code>footer.powered.row</code></td><td><code>first</code></td></tr><tr><td>赞赏名单</td><td>正文写结构化 HTML</td><td>——</td></tr></tbody></table><p>细节见仓库里的 <a href="https://github.com/Homulilly/hexo-theme-flatpaper/blob/main/docs/zh/configuration.md">配置说明</a> 与 <a href="https://github.com/Homulilly/hexo-theme-flatpaper/blob/main/docs/zh/custom-tags-and-pages.md">自定义标签与页面</a>。</p><p>原 PR 里还有一项<strong>侧边栏定位欢迎卡片</strong>（按访客 IP 显示归属地和距离），最后决定不合并进主题。它需要把每个访客的 IP 发给第三方接口，可以通过外挂 JS 实现。</p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/09/01/flatpaper-stack-album-and-progressive-hero/</id>
    <link href="https://flatpaper.nep.me/2026/09/01/flatpaper-stack-album-and-progressive-hero/"/>
    <published>2026-09-01T01:20:00.000Z</published>
    <summary>
      <![CDATA[<p><code>feat/pr-9</code> 这一批改动来自贡献者 <a href="https://github.com/Homulilly/hexo-theme-flatpaper/pull/9">jinghuashang</a> 的 PR #9。功能设计是他的，最终重新实现了一些功能，调整了一些不兼容的配置。</p>
<p>一共六项：<strong>堆叠相册</strong>、<strong>渐进式开屏大图</strong>、<strong>窄屏独立背景图</strong>、<strong>打字机</strong>、<strong>滚动渐入</strong>、<strong>页脚图标链接与署名位置</strong>。其中两项可以直接在文章里演示，剩下四项是站点级的——这个页面本身就在跑，往下翻的时候留意一下页脚和回到首页的开屏。</p>]]>
    </summary>
    <title>FlatPaper 新特性预览：堆叠相册、渐进开屏与打字机</title>
    <updated>2026-09-01T08:12:11.040Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题开发" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91/"/>
    <category term="FlatPaper" scheme="https://flatpaper.nep.me/tags/FlatPaper/"/>
    <category term="Hexo" scheme="https://flatpaper.nep.me/tags/Hexo/"/>
    <category term="Guestbook" scheme="https://flatpaper.nep.me/tags/Guestbook/"/>
    <content>
      <![CDATA[<p>在博客与论坛中，留言板总是不可获取的功能，借助 Artalk 与 Twikoo， Flatpaper 自定义了留言板的界面。</p><p>为了让 FlatPaper 的 <strong>“纸张与手帐”</strong> 理念贯彻到底，我们在最新的 <code>feat/guestbook</code> 版本中，彻底重构了留言墙的 UI 与交互，带来了一个充满“手工凌乱感”的沉浸式手帐留言板。</p><p>在尝试了信封、模拟纸张等单一或是交替效果后，最终选择了带有随机倾角的多色便签的样式。</p><span id="more"></span><h2 id="“盲盒式”手帐排版"><a href="#“盲盒式”手帐排版" class="headerlink" title="“盲盒式”手帐排版"></a>“盲盒式”手帐排版</h2><p>当你打开留言板时，你会发现所有的留言不再是死板的从上到下排列，而是被随意“贴”在了墙上：</p><ol><li><strong>原生的 CSS 瀑布流</strong>：我们使用了纯 CSS 的 <code>column-width</code> 特性，让不同长度的留言像拼图一样错落有致地咬合在一起，完全没有引入任何笨重的 JS 布局库。</li><li><strong>随机样式生成</strong>：基于评论内容的 Hash 散列算法，每条留言在渲染时都会被自动赋予一个<strong>随机背景色</strong>（米色、淡粉、薄荷绿等）和一段 <strong>±3度之内的随机倾斜角</strong>。</li><li><strong>随机手绘涂鸦</strong>：大概有 50% 的卡片上，会被随机加上手工画线、爱心、星星等手绘涂鸦背景，模拟真实手帐本上的即兴创作。</li><li><strong>纸胶带防撕裂</strong>：留言的顶部会随机出现半透明的“和纸胶带”。我们专门对 DOM 结构做了 <code>card-wrap</code> 嵌套优化，彻底解决了瀑布流截断导致胶带被“撕破”在不同列的渲染 Bug。</li></ol><blockquote><p><strong>最巧妙的是</strong>：由于采用了内容 Hash 算法，同一条留言无论你怎么刷新，它的倾斜角、颜色和涂鸦都是<strong>绝对固定</strong>的。这种物理贴纸转移的视觉连续性，让你感觉这就不是网页，而是一面真实的实体照片墙。</p></blockquote><h2 id="在“混沌”与“秩序”间切换"><a href="#在“混沌”与“秩序”间切换" class="headerlink" title="在“混沌”与“秩序”间切换"></a>在“混沌”与“秩序”间切换</h2><p>瀑布流排版最大的痛点就是<strong>不方便按时间顺序阅读</strong>。因此，我们在右上角加入了一个魔法按钮：</p><ul><li><strong>默认 - 🔀 随机模式</strong>：打乱所有的留言数组，容器启用 <strong>瀑布流（Columns）</strong> ，卡片交错挤压，视觉最乱、手帐感最强，适合“随便看看”。</li><li><strong>点击 - 🕒 最新模式</strong>：将数组按时间倒序排列，同时通过 JS 动态给容器附加 <code>.guestbook-wall__list--grid</code> Class。这会瞬间关闭瀑布流，将容器强制降维成**网格（Grid）**布局。卡片会立刻变得横平竖直，严格按照 <code>1 2 3</code> 的横向顺序排列，满足你“找最新留言”的强迫症需求。</li></ul><h2 id="图片解析与表情兼容"><a href="#图片解析与表情兼容" class="headerlink" title="图片解析与表情兼容"></a>图片解析与表情兼容</h2><p>留言板往往伴随着图片分享。传统做法是直接塞入富文本，这很容易破坏卡片的美感。我们做了一套定制化的提取逻辑（完全兼容 Twikoo 和 Artalk）：</p><ul><li><strong>分离渲染</strong>：代码会自动解析原始留言内容，把纯文本和图片剥离开来。</li><li><strong>拍立得化</strong>：所有被提取出来的真实图片（比如 WebP &#x2F; PNG &#x2F; JPG 等格式），会被放置在留言文本下方，并自动附带极细的白边和阴影，看起来就像是一张<strong>被订在便签上的拍立得照片</strong>。</li><li><strong>自带透明通道</strong>：图片的底层设置为了 <code>transparent</code>。如果你上传了一张透明背景的动漫角色抠图，它会完美透出卡片底部的粉色&#x2F;绿色纸张，仿佛是一张透明贴纸。</li><li><strong>智能屏蔽表情包</strong>：Twikoo 自带的小黄脸（如 OwO）等表情包如果被当成大图显示会非常灾难。代码会自动识别这些系统表情（比如包含 <code>emotion</code>、<code>sticker</code> 的特征），将它们转换为极其轻量的 <code>45x45</code> 尺寸透明小贴纸横排显示，同时自动移除了它们身上的拍立得相框和 FancyBox 灯箱事件，确保它们看起来就是文末的小点缀。</li></ul><hr><p>现在，你可以去 <a href="https://homulilly.com/comment/">Homulilly - 留言板</a> 页面亲自体验了。</p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/07/05/flatpaper-guestbook-wall/</id>
    <link href="https://flatpaper.nep.me/2026/07/05/flatpaper-guestbook-wall/"/>
    <published>2026-07-04T18:15:00.000Z</published>
    <summary>
      <![CDATA[<p>在博客与论坛中，留言板总是不可获取的功能，借助 Artalk 与 Twikoo， Flatpaper 自定义了留言板的界面。</p>
<p>为了让 FlatPaper 的 <strong>“纸张与手帐”</strong> 理念贯彻到底，我们在最新的 <code>feat/guestbook</code> 版本中，彻底重构了留言墙的 UI 与交互，带来了一个充满“手工凌乱感”的沉浸式手帐留言板。</p>
<p>在尝试了信封、模拟纸张等单一或是交替效果后，最终选择了带有随机倾角的多色便签的样式。</p>]]>
    </summary>
    <title>FlatPaper(v0.4.0) 新特性：沉浸式手帐风留言板，把评论变成贴纸盲盒</title>
    <updated>2026-07-07T12:50:05.749Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题配置" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E9%85%8D%E7%BD%AE/"/>
    <category term="主题" scheme="https://flatpaper.nep.me/tags/%E4%B8%BB%E9%A2%98/"/>
    <category term="Hexo" scheme="https://flatpaper.nep.me/tags/Hexo/"/>
    <category term="图片" scheme="https://flatpaper.nep.me/tags/%E5%9B%BE%E7%89%87/"/>
    <category term="配置" scheme="https://flatpaper.nep.me/tags/%E9%85%8D%E7%BD%AE/"/>
    <content>
      <![CDATA[<p>在新版本中，Hexo 的 <strong>Marked</strong> 渲染器支持了 <code>smartypants</code> 配置，可以自动将 Markdown 中的普通标点转换为更符合排版习惯的印刷体字符。</p><p>该功功能默认开启，影响的字符：</p><ol><li><p><strong>Em dash:</strong> <code>---</code> → <code>—</code></p></li><li><p><strong>En dash:</strong> <code>--</code> → <code>–</code></p></li><li><p><strong>Single quotation marks:</strong></p><ul><li>Opening single quote: <code>&#39;</code> → <code>‘</code></li><li>Closing single quote and apostrophe: <code>&#39;</code> → <code>’</code></li></ul></li><li><p><strong>Double quotation marks:</strong></p><ul><li>Opening double quote: <code>&quot;</code> → <code>“</code></li><li>Closing double quote: <code>&quot;</code> → <code>”</code></li></ul></li><li><p><strong>Ellipsis:</strong> <code>...</code> → <code>…</code></p></li></ol><h2 id="转换演示"><a href="#转换演示" class="headerlink" title="转换演示"></a>转换演示</h2><h3 id="源码字符"><a href="#源码字符" class="headerlink" title="源码字符"></a>源码字符</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">--</span><br><span class="line">&#x27;文本&#x27;</span><br><span class="line">&quot;文本&quot;</span><br><span class="line">...</span><br></pre></td></tr></table></figure><h3 id="转换效果"><a href="#转换效果" class="headerlink" title="转换效果"></a>转换效果</h3><hr><p>–<br>‘文本’<br>“文本”<br>…</p><h2 id="引号部分"><a href="#引号部分" class="headerlink" title="引号部分"></a>引号部分</h2><p>其中对于最常用的引号内容，会进行下面的转换，显示效果会受到字体的影响：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;This is a quote.&quot;</span><br></pre></td></tr></table></figure><p>会被渲染为：</p><blockquote><p>“This is a quote.”</p></blockquote><p>这个字符与看起来中文的引号一致，在一些字体下不美观，尤其是进行英文写作时。如果不希望进行转换，除了直接禁用 <code>smartypants</code> 功能之外，还可以通过 <code>quotes</code> 配置自定义引号字符：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">marked:</span></span><br><span class="line">  <span class="attr">smartypants:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">quotes:</span> <span class="string">&#x27;&quot;&quot;<span class="char escape_">&#x27;&#x27;</span><span class="char escape_">&#x27;&#x27;</span>&#x27;</span></span><br></pre></td></tr></table></figure><h2 id="quotes-是什么？"><a href="#quotes-是什么？" class="headerlink" title="quotes 是什么？"></a><code>quotes</code> 是什么？</h2><p><code>quotes</code> 用于指定四种引号字符，顺序分别为：</p><ol><li>左双引号</li><li>右双引号</li><li>左单引号</li><li>右单引号</li></ol><p>例如：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">quotes:</span> <span class="string">&#x27;“”‘’&#x27;</span></span><br></pre></td></tr></table></figure><p>表示使用中文排版常见的弯引号。</p><p>而：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">quotes:</span> <span class="string">&#x27;&quot;&quot;<span class="char escape_">&#x27;&#x27;</span><span class="char escape_">&#x27;&#x27;</span>&#x27;</span></span><br></pre></td></tr></table></figure><p>则表示继续使用英文直引号：</p><ul><li>左双引号：<code>&quot;</code></li><li>右双引号：<code>&quot;</code></li><li>左单引号：<code>&#39;</code></li><li>右单引号：<code>&#39;</code></li></ul><p>这样即使启用了 <code>smartypants</code>，引号也不会被转换成弯引号。</p><h2 id="为什么看起来有这么多-？"><a href="#为什么看起来有这么多-？" class="headerlink" title="为什么看起来有这么多 &#39;？"></a>为什么看起来有这么多 <code>&#39;</code>？</h2><p>很多人第一次看到：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">quotes:</span> <span class="string">&#x27;&quot;&quot;<span class="char escape_">&#x27;&#x27;</span><span class="char escape_">&#x27;&#x27;</span>&#x27;</span></span><br></pre></td></tr></table></figure><p>都会疑惑：</p><blockquote><p>为什么后面有这么多单引号？</p></blockquote><p>原因在于 <strong>YAML 的单引号字符串语法</strong>。</p><p>在 YAML 中：</p><ul><li>字符串可以使用 <code>&#39;...&#39;</code> 包裹；</li><li>如果字符串内部需要表示一个真正的单引号 <code>&#39;</code>，必须写成两个单引号 <code>&#39;&#39;</code>。</li></ul><p>例如：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">value:</span> <span class="string">&#x27;I<span class="char escape_">&#x27;&#x27;</span>m&#x27;</span></span><br></pre></td></tr></table></figure><p>实际表示的是：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">I&#x27;m</span><br></pre></td></tr></table></figure><p>因此：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">quotes:</span> <span class="string">&#x27;&quot;&quot;<span class="char escape_">&#x27;&#x27;</span><span class="char escape_">&#x27;&#x27;</span>&#x27;</span></span><br></pre></td></tr></table></figure><p>可以拆解为：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&#x27;    ← 字符串开始</span><br><span class="line">&quot;&quot;   ← 两个双引号</span><br><span class="line">&#x27;&#x27;   ← 一个单引号</span><br><span class="line">&#x27;&#x27;   ← 一个单引号</span><br><span class="line">&#x27;    ← 字符串结束</span><br></pre></td></tr></table></figure><p>最终字符串实际上就是：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;&quot;&#x27;&#x27;</span><br></pre></td></tr></table></figure><p>即：</p><ul><li><code>&quot;</code></li><li><code>&quot;</code></li><li><code>&#39;</code></li><li><code>&#39;</code></li></ul><p>正好对应 <code>quotes</code> 所要求的四个字符。</p><h2 id="常见配置示例"><a href="#常见配置示例" class="headerlink" title="常见配置示例"></a>常见配置示例</h2><h3 id="使用英文直引号（默认效果）"><a href="#使用英文直引号（默认效果）" class="headerlink" title="使用英文直引号（默认效果）"></a>使用英文直引号（默认效果）</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">marked:</span></span><br><span class="line">  <span class="attr">smartypants:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">quotes:</span> <span class="string">&#x27;&quot;&quot;<span class="char escape_">&#x27;&#x27;</span><span class="char escape_">&#x27;&#x27;</span>&#x27;</span></span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;This is a quote.&quot;</span><br></pre></td></tr></table></figure><hr><h3 id="使用英文弯引号（Typography）"><a href="#使用英文弯引号（Typography）" class="headerlink" title="使用英文弯引号（Typography）"></a>使用英文弯引号（Typography）</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">marked:</span></span><br><span class="line">  <span class="attr">smartypants:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">quotes:</span> <span class="string">&#x27;“”‘’&#x27;</span></span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">“This is a quote.”</span><br></pre></td></tr></table></figure><hr><h3 id="使用法文引号"><a href="#使用法文引号" class="headerlink" title="使用法文引号"></a>使用法文引号</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">marked:</span></span><br><span class="line">  <span class="attr">smartypants:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">quotes:</span> <span class="string">&#x27;«»‹›&#x27;</span></span><br></pre></td></tr></table></figure><p>输出：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">« Bonjour »</span><br></pre></td></tr></table></figure><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p><code>smartypants</code> 用于提升 Markdown 的排版质量，而 <code>quotes</code> 则允许你自定义四种引号字符。</p><p>需要注意的是，<code>quotes</code> 的值只有 <strong>四个字符</strong>，分别对应：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">左双引号 右双引号 左单引号 右单引号</span><br></pre></td></tr></table></figure><p>像 <code>quotes: &#39;&quot;&quot;&#39;&#39;&#39;&#39;&#39;</code> 这样的写法，并不是有五个或六个单引号，而只是 YAML 为了表示两个普通单引号所采用的转义方式。</p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/07/01/hexo-marked-smartpants-feature/</id>
    <link href="https://flatpaper.nep.me/2026/07/01/hexo-marked-smartpants-feature/"/>
    <published>2026-06-30T18:30:00.000Z</published>
    <summary>
      <![CDATA[<p>在新版本中，Hexo 的 <strong>Marked</strong> 渲染器支持了 <code>smartypants</code> 配置，可以自动将 Markdown 中的普通标点转换为更符合排版习惯的印刷体字符。</p>
<p>该功功能默认开启，影响的字符：</p>]]>
    </summary>
    <title>Hexo 中 `marked.smartypants` 与 `quotes` 配置详解</title>
    <updated>2026-07-01T19:08:06.956Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题开发" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91/"/>
    <category term="FlatPaper" scheme="https://flatpaper.nep.me/tags/FlatPaper/"/>
    <category term="主题" scheme="https://flatpaper.nep.me/tags/%E4%B8%BB%E9%A2%98/"/>
    <category term="图片" scheme="https://flatpaper.nep.me/tags/%E5%9B%BE%E7%89%87/"/>
    <category term="配置" scheme="https://flatpaper.nep.me/tags/%E9%85%8D%E7%BD%AE/"/>
    <content>
      <![CDATA[<p>FlatPaper 现在支持文章页顶部图了。它和首页 Hero 不一样：顶部图只服务于单篇文章阅读页，会铺在文章纸面最上方，标题、分类和日期信息直接叠加在图片上，图片再以半透明渐变自然过渡回正文纸面。</p><p>这个功能适合用来给长文增加一点视觉识别度。比如教程类文章可以放配置截图，游记和摄影记录可以放照片，主题更新日志可以放功能预览图。它不会强迫所有文章都显示图片，也不会改变没有配置图片的文章。</p><span id="more"></span><h2 id="全局配置"><a href="#全局配置" class="headerlink" title="全局配置"></a>全局配置</h2><p>主题配置项是 <code>post_top_img.mode</code>。<code>mode</code> 留空时等于禁用。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">post_top_img:</span></span><br><span class="line">  <span class="attr">mode:</span></span><br></pre></td></tr></table></figure><p>需要启用时，可以在两种模式之间选择：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">post_top_img:</span></span><br><span class="line">  <span class="attr">mode:</span> <span class="string">top_img</span></span><br></pre></td></tr></table></figure><p><code>top_img</code> 模式只接收文章 front-matter 里显式写出的 <code>top_img</code>。如果某篇文章没有写 <code>top_img</code>，就不会渲染顶部图。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">post_top_img:</span></span><br><span class="line">  <span class="attr">mode:</span> <span class="string">fallback</span></span><br></pre></td></tr></table></figure><p><code>fallback</code> 模式会先读取文章 front-matter 的 <code>top_img</code>。如果没有配置 <code>top_img</code>，再回退到主题已有的封面图解析顺序：<code>cover</code>、<code>thumbnail</code>、<code>image</code>、<code>banner</code>，最后尝试正文第一张图片。</p><h2 id="单篇文章写法"><a href="#单篇文章写法" class="headerlink" title="单篇文章写法"></a>单篇文章写法</h2><p>在文章 front-matter 中直接写 <code>top_img</code>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">周末散步记录</span></span><br><span class="line"><span class="attr">date:</span> <span class="number">2026-06-26 15:30:00</span></span><br><span class="line"><span class="attr">cover:</span> <span class="string">/images/walk-card.jpg</span></span><br><span class="line"><span class="attr">top_img:</span> <span class="string">/images/walk-wide.jpg</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><p><code>top_img</code> 可以是站内路径，也可以是完整 URL。站内图片建议放在 Hexo 的 <code>source/images/</code> 目录下，然后用 <code>/images/example.jpg</code> 引用。</p><p>如果某篇文章不想显示顶部图，可以写：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">一篇保持普通纸面的文章</span></span><br><span class="line"><span class="attr">top_img:</span> <span class="literal">false</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><p>即使全局 <code>mode</code> 是 <code>fallback</code>，<code>top_img: false</code> 也会关闭当前文章的顶部图。</p><blockquote><p>比如这个 DEMO 站点的 Cover 就都写了标题，其实不太适合直接 Fallback。</p></blockquote><h2 id="三种模式怎么选"><a href="#三种模式怎么选" class="headerlink" title="三种模式怎么选"></a>三种模式怎么选</h2><table><thead><tr><th>配置</th><th>适合场景</th></tr></thead><tbody><tr><td><code>mode:</code></td><td>完全禁用文章顶部图，所有文章保持普通布局</td></tr><tr><td><code>mode: top_img</code></td><td>只想让少数精心配置过 <code>top_img</code> 的文章显示顶部图</td></tr><tr><td><code>mode: fallback</code></td><td>希望已有 <code>cover</code> 文章自动获得顶部图效果</td></tr></tbody></table><p>如果站点里的 <code>cover</code> 大多是横向封面，推荐使用 <code>fallback</code>。如果 <code>cover</code> 主要是小卡片图、图标图或不适合铺满文章顶部，推荐使用 <code>top_img</code>，只给适合的文章单独配置。</p><h2 id="和-cover-的区别"><a href="#和-cover-的区别" class="headerlink" title="和 cover 的区别"></a>和 cover 的区别</h2><p><code>cover</code> 主要用于首页文章卡片、精选卡片和相关文章卡片；<code>top_img</code> 只用于文章详情页顶部。</p><p>你可以让它们使用同一张图片：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">cover:</span> <span class="string">/images/post.jpg</span></span><br><span class="line"><span class="attr">top_img:</span> <span class="string">/images/post.jpg</span></span><br></pre></td></tr></table></figure><p>也可以分开使用：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">cover:</span> <span class="string">/images/post-card.jpg</span></span><br><span class="line"><span class="attr">top_img:</span> <span class="string">/images/post-wide.jpg</span></span><br></pre></td></tr></table></figure><p>第二种方式更适合视觉要求高的站点：卡片图可以裁得紧一点，文章顶部图则使用更宽、更安静、能承载标题文字的图片。</p><h2 id="阅读体验"><a href="#阅读体验" class="headerlink" title="阅读体验"></a>阅读体验</h2><p>顶部图会保留 FlatPaper 的纸面感。图片不会直接硬切到正文，而是通过半透明遮罩和渐变融入文章背景。标题区域叠在图片上，但文字仍使用主题的墨色系统，并通过轻微的纸面色光晕保证可读。</p><p>顶部图片也被设置为不可拖动，避免阅读时不小心拖出浏览器的图片预览。</p><h2 id="一个推荐配置"><a href="#一个推荐配置" class="headerlink" title="一个推荐配置"></a>一个推荐配置</h2><p>如果你想先在演示站或个人站里快速试用，可以从 <code>fallback</code> 开始：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">post_top_img:</span></span><br><span class="line">  <span class="attr">mode:</span> <span class="string">fallback</span></span><br></pre></td></tr></table></figure><p>之后遇到不适合铺成顶部图的文章，再单篇关闭：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">top_img:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure><p>如果你更喜欢手动控制每一篇文章的视觉效果，就改用：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">post_top_img:</span></span><br><span class="line">  <span class="attr">mode:</span> <span class="string">top_img</span></span><br></pre></td></tr></table></figure><p>这样只有认真配置过 <code>top_img</code> 的文章才会显示顶部图，站点整体会更克制。</p><h2 id="页面的顶部图片"><a href="#页面的顶部图片" class="headerlink" title="页面的顶部图片"></a>页面的顶部图片</h2><p>在文章也支持了顶部图片后，其他类型页面也光速获得了支持。</p><p>但是其他页面只接收 <code>top_image:</code> 手动指定，毕竟页面部分不需要频繁更新，还是值得精挑细选准备一下的。</p><p>预览效果可以查看：</p><ul><li><a href="https://homulilly.com/friends/">Homulilly - 朋友圈</a></li></ul>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/06/26/flatpaper-post-top-img/</id>
    <link href="https://flatpaper.nep.me/2026/06/26/flatpaper-post-top-img/"/>
    <published>2026-06-26T06:30:00.000Z</published>
    <summary>
      <![CDATA[<p>FlatPaper 现在支持文章页顶部图了。它和首页 Hero 不一样：顶部图只服务于单篇文章阅读页，会铺在文章纸面最上方，标题、分类和日期信息直接叠加在图片上，图片再以半透明渐变自然过渡回正文纸面。</p>
<p>这个功能适合用来给长文增加一点视觉识别度。比如教程类文章可以放配置截图，游记和摄影记录可以放照片，主题更新日志可以放功能预览图。它不会强迫所有文章都显示图片，也不会改变没有配置图片的文章。</p>]]>
    </summary>
    <title>FlatPaper(v0.3.3) 文章、页面顶部图：top_img 与 post_top_img 配置</title>
    <updated>2026-07-01T19:01:09.570Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题开发" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91/"/>
    <category term="主题更新" scheme="https://flatpaper.nep.me/tags/%E4%B8%BB%E9%A2%98%E6%9B%B4%E6%96%B0/"/>
    <category term="朋友圈" scheme="https://flatpaper.nep.me/tags/%E6%9C%8B%E5%8F%8B%E5%9C%88/"/>
    <category term="Friend Circle" scheme="https://flatpaper.nep.me/tags/Friend-Circle/"/>
    <content>
      <![CDATA[<p>在这个信息茧房愈发封闭的时代，独立博客之间的互联显得尤为珍贵。如果你也拥有一群热爱写作的博主好友，那你一定对「朋友圈（Friend Circle）」这个概念不陌生——它能将你友链中朋友们的最新文章汇聚在一起，形成一个像社交媒体 Feed 流一样的页面。</p><p>今天，<strong>FlatPaper 主题已正式集成 Friend-Circle-Lite (FCL) 朋友圈功能！</strong></p><span id="more"></span><h2 id="纸质感与动态设计的完美碰撞"><a href="#纸质感与动态设计的完美碰撞" class="headerlink" title="纸质感与动态设计的完美碰撞"></a>纸质感与动态设计的完美碰撞</h2><p>Flatpaper 的朋友圈信息流与主题标志性的「纸质手账风」视觉设计完美融合：</p><ol><li><strong>手帐胶带与拍立得相框</strong>：每篇朋友圈动态都包裹在带有虚线边框、内嵌坐标网格的「纸片」中。左上角贴着标志性的斜角彩色胶带，头像则采用了带有白边和底部投影的拍立得微倾斜相框。</li><li><strong>彩色分页书签（Tab）</strong>：卡片的右侧点缀了一抹对应主色调的彩色书签。当你将鼠标悬浮（Hover）在卡片上时，卡片会轻微浮起回正，右侧的标签则会像抽屉一样灵动地<strong>向外探出 14px</strong>。</li><li><strong>色彩循环系统</strong>：动态列表遵循了「黄、蓝、粉、绿」的四色 <code>4n</code> 循环体系，每一片纸都有属于自己独特的微小倾斜角度（<code>-0.25deg</code> 到 <code>0.3deg</code> 不等），打破了常规列表的死板，让整个 Feed 流像是一叠随意堆放但又错落有致的卡片。</li><li><strong>友链页面设计统一</strong>：在引入朋友圈的同时，我们也同步升级了传统的 <code>/links/</code> 友链页面。现在两边的卡片视觉语言已经达到 100% 的高度统一，无论是单页导航还是信息流速览，都能获得连贯的视觉享受。</li></ol><p>演示站的预览界面：<a href="https://flatpaper.nep.me/friends/">Flatpaper - DEMO</a></p><h2 id="极致轻量的技术实现"><a href="#极致轻量的技术实现" class="headerlink" title="极致轻量的技术实现"></a>极致轻量的技术实现</h2><p>除了在视觉上做到极致，FlatPaper 在底层架构上也坚持了一贯的 <strong>「零外部依赖、极致轻量」</strong> 的原则：</p><ul><li><strong>Vanilla JS 动态渲染</strong>：放弃了引入 Vue、React 等繁重的框架，我们在 <code>main.js</code> 中手写了纯原生 JavaScript 的异步渲染逻辑。从拉取 JSON 到构建 DOM 节点，一切都在浏览器最底层的 API 上高效运行。</li><li><strong>Hexo 纯静态桥接</strong>：自带了 <code>fcl-friend-json.js</code> 生成脚本。你只需要正常配置 Hexo 的友链数据，主题会在构建时自动生成标准的 <code>all.json</code> 静态数据接口，真正实现了零后端的全静态化托管。</li><li><strong>原生暗色模式</strong>：深色模式下，信息流卡片的线格、投影和标签边框会平滑过渡到夜间纸张风格，不仅护眼，而且完全无需加载额外的 CSS 负担。</li></ul><h2 id="如何开启体验？"><a href="#如何开启体验？" class="headerlink" title="如何开启体验？"></a>如何开启体验？</h2><h3 id="使用-Firend-Circle-Lite-抓取-RSS"><a href="#使用-Firend-Circle-Lite-抓取-RSS" class="headerlink" title="使用 Firend Circle Lite 抓取 RSS"></a>使用 Firend Circle Lite 抓取 RSS</h3><p>不需要服务器，友链通过 <a href="https://github.com/willow-god/Friend-Circle-Lite">Firend Circle Lite</a> 进行抓取，无需使用服务器，依托免费的 GitHub Actions 进行更新。 </p><p>主题会在生成静态文件时，生成 FCL 所需的 <code>friend.json</code> 。</p><h3 id="在-GitHub-上部署-Firend-Circle-Lite"><a href="#在-GitHub-上部署-Firend-Circle-Lite" class="headerlink" title="在 GitHub 上部署 Firend Circle Lite"></a>在 GitHub 上部署 Firend Circle Lite</h3><p>在 GitHub 上部署通过 Fork 部署 Firend Circle Lite 即可。</p><p>编辑 FCL 的 <code>conf.yaml</code> ，设置域名即可</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">spider_settings:</span><br><span class="line">  enable: true</span><br><span class="line">  json_url: &quot;https://flatpaper.nep.me/friend.json&quot;</span><br><span class="line">  article_count: 5</span><br></pre></td></tr></table></figure><p>运行 Action 后，可以在 page 分支获取到 <code>all.json</code> ，也不需要解析域名。</p><p>直接使用 RAW 链接即可：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://raw.githubusercontent.com/&lt;UserName&gt;/&lt;RepoName&gt;/refs/heads/page/all.json</span><br></pre></td></tr></table></figure><h3 id="创建朋友圈所需的页面"><a href="#创建朋友圈所需的页面" class="headerlink" title="创建朋友圈所需的页面"></a>创建朋友圈所需的页面</h3><p>在主题的 <code>source/friends/</code> 下面创建 <code>index.md</code> ，填写下面的内容，替换 <code>fcl_all_json</code> 的链接。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">朋友圈</span></span><br><span class="line"><span class="attr">type:</span> <span class="string">friends-feed</span></span><br><span class="line"><span class="attr">comments:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">fcl_all_json:</span> <span class="string">https://raw.githubusercontent.com/&lt;UserName&gt;/&lt;RepoName&gt;/refs/heads/page/all.json</span></span><br><span class="line"><span class="attr">page_size:</span> <span class="number">20</span></span><br><span class="line"><span class="attr">source_label:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 顶部图片，删除 # 即可使用或是替换为你自己的图片</span></span><br><span class="line"><span class="comment">#top_img: https://img.nep.me/p/flatpaper/fcircle-top.webp</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><div class="flatpaper-note flatpaper-note--info"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>链接配置在页面里进行设置，所以支持不同的页面可以使用不同的链接，实现不同内容的展示。</p></div></div><h3 id="然后更新导航链接"><a href="#然后更新导航链接" class="headerlink" title="然后更新导航链接"></a>然后更新导航链接</h3><p>在主题的配置文件 <code>_config.flatpaper.yml</code> 中：</p><ol><li>确保你的导航菜单（<code>menu</code>）里添加了朋友圈页面（主题新增了 <code>users</code>、<code>compass</code> 或 <code>aperture</code> 作为图标！）：<figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">menu:</span></span><br><span class="line">  <span class="attr">Friends:</span> </span><br><span class="line">    <span class="attr">link:</span> <span class="string">/friends/</span></span><br><span class="line">    <span class="attr">icon:</span> <span class="string">users</span></span><br><span class="line">  <span class="attr">Moments:</span></span><br><span class="line">    <span class="attr">link:</span> <span class="string">/friends/feed/</span></span><br><span class="line">    <span class="attr">icon:</span> <span class="string">compass</span></span><br></pre></td></tr></table></figure></li></ol><p>这不仅是一个功能的增加，更是 Flatpaper 对独立博客「去中心化阅读」体验的一次致敬。</p><p>快去升级你的 FlatPaper 主题，享受属于你和朋友们的优雅阅读时光吧！</p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/06/24/introducing-friend-circle-lite/</id>
    <link href="https://flatpaper.nep.me/2026/06/24/introducing-friend-circle-lite/"/>
    <published>2026-06-24T07:00:00.000Z</published>
    <summary>
      <![CDATA[<p>在这个信息茧房愈发封闭的时代，独立博客之间的互联显得尤为珍贵。如果你也拥有一群热爱写作的博主好友，那你一定对「朋友圈（Friend Circle）」这个概念不陌生——它能将你友链中朋友们的最新文章汇聚在一起，形成一个像社交媒体 Feed 流一样的页面。</p>
<p>今天，<strong>FlatPaper 主题已正式集成 Friend-Circle-Lite (FCL) 朋友圈功能！</strong></p>]]>
    </summary>
    <title>FlatPaper(v0.3.1) 主题重磅更新：优雅的朋友圈 (Friend Circle) 信息流</title>
    <updated>2026-07-01T21:31:10.867Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题开发" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91/"/>
    <category term="FlatPaper" scheme="https://flatpaper.nep.me/tags/FlatPaper/"/>
    <category term="主题" scheme="https://flatpaper.nep.me/tags/%E4%B8%BB%E9%A2%98/"/>
    <category term="字体" scheme="https://flatpaper.nep.me/tags/%E5%AD%97%E4%BD%93/"/>
    <category term="Google Fonts" scheme="https://flatpaper.nep.me/tags/Google-Fonts/"/>
    <content>
      <![CDATA[<p>FlatPaper 现在支持通过主题配置加载 <a href="https://fonts.google.com/">Google Fonts</a> 了。你可以给正文和代码块分别设置字体，也可以配置 CDN 域名，用镜像服务替代默认的 <code>fonts.googleapis.com</code>。</p><p>这个功能默认关闭，不会影响已有站点。开启后，主题会在页面 <code>&lt;head&gt;</code> 里注入 Google Fonts 样式表，并用 CSS 变量把字体应用到正文或代码块。</p><p>支持代码字体与中文字体分别设置，支持字体字重（Font Weight），也支持 text 限定请求字体，从大字体文件中仅下载需要的部分。</p><span id="more"></span><h2 id="演示站使用配置"><a href="#演示站使用配置" class="headerlink" title="演示站使用配置"></a>演示站使用配置</h2><p>当前演示站使用了这组配置，设置了英文字体 <code>Sniglet</code> 与 代码字体 <code>Source Code Pro</code>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Google Fonts。默认关闭；开启后会在 &lt;head&gt; 注入 Google Fonts CSS。</span></span><br><span class="line"><span class="comment"># cdn 可填写镜像域名，用于覆盖 https://fonts.googleapis.com，例如 https://fonts.loli.net。</span></span><br><span class="line"><span class="attr">google_fonts:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">cdn:</span> <span class="string">https://fonts.loli.net</span></span><br><span class="line">  <span class="comment"># text_font: New Tegomin</span></span><br><span class="line">  <span class="comment"># text: |-</span></span><br><span class="line">  <span class="comment">#   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !&quot;#$%&amp;&#x27;()*+,-./:;&lt;=&gt;?@[\]^_`&#123;|&#125;~</span></span><br><span class="line">  <span class="comment"># 按顺序填写字体名称即可；第一个字体会优先用于正文。</span></span><br><span class="line">  <span class="attr">fonts:</span></span><br><span class="line">    <span class="comment"># - Caveat</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">Sniglet</span></span><br><span class="line">  <span class="comment"># 等宽字体单独配置；也可以只填写 mono，不改变正文字体。</span></span><br><span class="line">  <span class="attr">mono:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">Source</span> <span class="string">Code</span> <span class="string">Pro</span></span><br></pre></td></tr></table></figure><p><code>fonts</code> 用于正文，按顺序填写字体名称即可；<code>mono</code> 用于代码块，也按顺序填写等宽字体名称。如果只想改代码字体，可以只配置 <code>mono</code>，不写 <code>fonts</code>。</p><p>默认情况下只写字体名称就够了。如果某个字体确实需要指定字重，可以使用 Google Fonts 的写法，例如 <code>Noto Sans SC:wght@400;700</code>；主题会用完整配置请求字体，同时在本地 CSS 字体栈里自动保留正确的字体名。</p><h2 id="字段说明"><a href="#字段说明" class="headerlink" title="字段说明"></a>字段说明</h2><table><thead><tr><th>字段</th><th>说明</th></tr></thead><tbody><tr><td><code>enable</code></td><td>是否启用 Google Fonts 加载，默认 <code>false</code>，设置 <code>true</code> 开启</td></tr><tr><td><code>cdn</code></td><td>加载 Google Fonts 资源的域名，可改为镜像域名，适用于优化无法访问 Google 服务的地区</td></tr><tr><td><code>text_font</code></td><td>可选裁剪字体，会排在 <code>fonts</code> 前面</td></tr><tr><td><code>text</code></td><td>配合 <code>text_font</code> 使用，只请求这些字符的字形</td></tr><tr><td><code>fonts</code></td><td>正文字体列表，越靠前优先级越高</td></tr><tr><td><code>mono</code></td><td>代码块等宽字体列表，越靠前优先级越高</td></tr></tbody></table><p>字体加载固定使用 <code>display=swap</code>，所以即使远程字体加载较慢，页面也会先用本地 fallback 字体显示，不会长时间空白。</p><h2 id="text-特性介绍"><a href="#text-特性介绍" class="headerlink" title="text&#x3D; 特性介绍"></a>text&#x3D; 特性介绍</h2><p><code>text=</code> 参数用于只请求指定文本中需要的字形，从而减少字体文件体积。适合比如单独喜欢某个中文、日文字符集的英文部分，但是又不希望请求整个字体的情况，又或是只想让某个 Google Fonts 字体覆盖固定英文标题、logo 或按钮，可以用 <code>text_font</code> 搭配 <code>text</code> 来减少字体文件体积。</p><p>比如只使用 <a href="https://fonts.google.com/specimen/New+Tegomin">New Tegomin</a> 的英文数字部分，效果可以参考 <a href="https://homulilly.com/">Aores’s Blog | Homulilly</a>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">google_fonts:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">text_font:</span> <span class="string">New</span> <span class="string">Tegomin</span></span><br><span class="line">  <span class="comment"># 只覆盖英文数字与标点符号</span></span><br><span class="line">  <span class="attr">text:</span> <span class="string">|-</span></span><br><span class="line"><span class="string">    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !&quot;#$%&amp;&#x27;()*+,-./:;&lt;=&gt;?@[\]^_`&#123;|&#125;~</span></span><br><span class="line"><span class="string"></span>  <span class="comment"># 可以同时再指定正文字体，不指定时则使用系统字体</span></span><br><span class="line">  <span class="comment"># fonts:</span></span><br><span class="line">  <span class="comment">#   - Noto Sans SC </span></span><br></pre></td></tr></table></figure><p>生成后的字体栈顺序会是：裁剪后的 <code>text_font</code>、完整的 <code>fonts</code>、系统 fallback。没有包含在 <code>text</code> 字符集里的正文内容会回退到完整正文字体，因此它更适合固定文案，不适合用户生成内容或频繁变化的正文。</p><p>如果只需要请求英文数字，使用一行即可</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">google_fonts:</span></span><br><span class="line">  <span class="attr">text_font:</span> <span class="string">New</span> <span class="string">Tegomin</span></span><br><span class="line">  <span class="attr">text:</span> <span class="string">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789</span></span><br></pre></td></tr></table></figure><p>如果想要包含标点符号，由于字符里包含双引号、单引号、反斜杠这类容易触发 YAML 转义的字符，推荐写成 literal block：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">google_fonts:</span></span><br><span class="line">  <span class="attr">text_font:</span> <span class="string">New</span> <span class="string">Tegomin</span></span><br><span class="line">  <span class="attr">text:</span> <span class="string">|-</span></span><br><span class="line">    <span class="string">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789</span> <span class="string">!&quot;#$%&amp;&#x27;()*+,-./:;&lt;=&gt;?@[\]^_`&#123;|&#125;~</span></span><br></pre></td></tr></table></figure><h2 id="小提示"><a href="#小提示" class="headerlink" title="小提示"></a>小提示</h2><ul><li>字体名称直接写 Google Fonts 里的名称即可，不需要写复杂的 <code>family=</code> 查询参数。</li><li>有特殊字重需求时再追加 <code>:wght@...</code>，普通使用保持字体名称即可。</li><li><code>text</code> 会自动 URL encode，配置里直接写需要保留的字符即可。</li><li><code>cdn</code> 只负责替换 Google Fonts CSS 的域名；实际字体文件地址由返回的 CSS 决定。</li><li>中文字体通常体积较大，建议只加载确实需要的字体。</li><li>像 <code>Caveat</code> 这样的字体主要覆盖拉丁字符，中文仍会回退到主题默认中文字体栈。</li></ul>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/06/24/flatpaper-google-fonts-support/</id>
    <link href="https://flatpaper.nep.me/2026/06/24/flatpaper-google-fonts-support/"/>
    <published>2026-06-23T15:55:00.000Z</published>
    <summary>
      <![CDATA[<p>FlatPaper 现在支持通过主题配置加载 <a href="https://fonts.google.com/">Google Fonts</a> 了。你可以给正文和代码块分别设置字体，也可以配置 CDN 域名，用镜像服务替代默认的 <code>fonts.googleapis.com</code>。</p>
<p>这个功能默认关闭，不会影响已有站点。开启后，主题会在页面 <code>&lt;head&gt;</code> 里注入 Google Fonts 样式表，并用 CSS 变量把字体应用到正文或代码块。</p>
<p>支持代码字体与中文字体分别设置，支持字体字重（Font Weight），也支持 text 限定请求字体，从大字体文件中仅下载需要的部分。</p>]]>
    </summary>
    <title>FlatPaper(v0.3.0) 现在支持 Google Fonts 了</title>
    <updated>2026-07-01T21:34:21.454Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题开发" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91/"/>
    <category term="FlatPaper" scheme="https://flatpaper.nep.me/tags/FlatPaper/"/>
    <category term="视觉设计" scheme="https://flatpaper.nep.me/tags/%E8%A7%86%E8%A7%89%E8%AE%BE%E8%AE%A1/"/>
    <category term="主题" scheme="https://flatpaper.nep.me/tags/%E4%B8%BB%E9%A2%98/"/>
    <category term="图片" scheme="https://flatpaper.nep.me/tags/%E5%9B%BE%E7%89%87/"/>
    <content>
      <![CDATA[<p>FlatPaper 现在有了完整的首页 Hero 配置。它不只是给首页加一张大图，而是把标题、简介、头像、背景图、跳转箭头、社交链接、主题工具按钮和 sticker 贴纸组织成一个独立的开屏区域。</p><p>这个功能适合想让首页第一屏更有识别度的站点：个人博客可以放一张代表近期状态的照片，摄影站可以放作品封面，作品集可以用视觉图建立风格，轻量手账站也可以继续使用默认纸张背景和便签贴纸。</p><p>Sticker 贴纸 <strong>可以拖动</strong>。</p><p>带背景的 <a href="https://homulilly.com/">预览</a> ：</p><img src="https://img.nep.me/blog/homlilly-og.webp" alt="homlilly-og.png" style="width:50%;max-width:100%;height:auto" /><span id="more"></span><h2 id="开启-Hero"><a href="#开启-Hero" class="headerlink" title="开启 Hero"></a>开启 Hero</h2><p>Hero 默认关闭，不影响已有站点。要启用它，在主题配置里设置：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">home_hero:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><p>开启后，Hero 只会在首页第一页显示。继续翻页或进入文章页时，页面会回到原本的列表和阅读布局。</p><h2 id="文案与头像"><a href="#文案与头像" class="headerlink" title="文案与头像"></a>文案与头像</h2><p>Hero 默认会复用 <code>profile</code> 里的头像、简介、社交链接与 RSS。如果你想让首页开屏使用独立内容，可以在 <code>home_hero</code> 里覆盖：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">home_hero:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">title:</span> <span class="string">我的手账</span></span><br><span class="line">  <span class="attr">subtitle:</span> <span class="string">今日份记录</span></span><br><span class="line">  <span class="attr">bio:</span> <span class="string">写给路过此处的你。</span></span><br><span class="line">  <span class="attr">avatar:</span> <span class="string">/images/avatar.jpg</span></span><br><span class="line">  <span class="attr">avatar_shape:</span> <span class="string">circle</span></span><br></pre></td></tr></table></figure><p>这些字段的作用分别是：</p><ul><li><code>title</code>：Hero 主标题，默认使用站点标题。</li><li><code>subtitle</code>：标题上方的小标签文字，默认可复用 profile role。</li><li><code>bio</code>：标题下方的简介文字，默认可复用 profile bio。</li><li><code>avatar</code>：头像图片路径。</li><li><code>avatar_shape</code>：头像形状，支持 <code>circle</code> 或默认方形。</li></ul><p>如果没有配置头像，Hero 会显示一个主题内置的简化头像块，保证布局不会空掉。</p><h2 id="背景图"><a href="#背景图" class="headerlink" title="背景图"></a>背景图</h2><p>Hero 可以保持默认纸张背景，也可以设置图片背景。最简单的配置是一张图：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">home_hero:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">image:</span> <span class="string">/images/hero.jpg</span></span><br></pre></td></tr></table></figure><p><code>image</code> 支持站内相对路径，也支持完整 URL。站内图片可以放在 Hexo 的 <code>source/images/</code> 目录下，然后用 <code>/images/hero.jpg</code> 引用。</p><p>建议选择横向图，画面主体不要过于贴边。Hero 中央会叠加标题、简介、头像和社交链接，右上角还可能有工具按钮，所以图片需要给内容层留出空间。</p><h2 id="随机背景图"><a href="#随机背景图" class="headerlink" title="随机背景图"></a>随机背景图</h2><p>如果想让首页每次打开都有一点变化，可以把 <code>image</code> 写成数组：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">home_hero:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">image:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">/images/hero-1.jpg</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">/images/hero-2.jpg</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">/images/hero-3.jpg</span></span><br></pre></td></tr></table></figure><p>浏览器载入时会从数组里随机挑选一张。这个方式适合一组同风格图片，比如同一套摄影、同一个角色主题、同一个颜色主题，或者一组季节感封面。</p><h2 id="图片遮罩"><a href="#图片遮罩" class="headerlink" title="图片遮罩"></a>图片遮罩</h2><p>主题在使用壁纸后会添加阴影遮罩降低亮度，Hero 提供 <code>image_overlay</code> 来控制图片上方的暗色渐变遮罩，主题的默认是 0.2 - 0.2 的均匀遮罩：</p><p>可以根据图片效果调整</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">home_hero:</span></span><br><span class="line">  <span class="attr">image_overlay:</span> [<span class="number">0.2</span>, <span class="number">0.2</span>]</span><br></pre></td></tr></table></figure><p>数组里第一个值是顶部透明度，第二个值是底部透明度，范围是 <code>0</code> 到 <code>1</code>。数值越高，遮罩越深。</p><p>常见调整思路：</p><ul><li>图片偏亮时，增大数字，例如 <code>[0.25, 0.35]</code>。 可以形成上浅下深的渐变遮罩。</li><li>图片本身已经很暗时，降低数字，例如 <code>[0.1, 0.1]</code>。</li></ul><p>当然你无需每次重启服务器，可以在这里提前预览调整 ：<a href="https://hexotag.nep.me/hero">FlatPaper Tools - Hero</a></p><h2 id="跳转箭头"><a href="#跳转箭头" class="headerlink" title="跳转箭头"></a>跳转箭头</h2><p>Hero 底部有一个向下的箭头，用来进入首页内容区。默认目标是首页文章列表区域，也可以自定义：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">home_hero:</span></span><br><span class="line">  <span class="attr">cta_link:</span> <span class="string">&quot;#flatpaper-home-content&quot;</span></span><br></pre></td></tr></table></figure><p>如果你在首页放了自定义锚点，也可以把 <code>cta_link</code> 指向那个位置。</p><h2 id="工具按钮与社交链接"><a href="#工具按钮与社交链接" class="headerlink" title="工具按钮与社交链接"></a>工具按钮与社交链接</h2><p>Hero 右上角会显示主题工具按钮，例如明暗模式切换；如果启用了可拖动 sticker，还会显示重排 sticker 的按钮。社交链接区域则复用 <code>profile.social</code> 或主题全局 <code>social</code> 配置。</p><p>这样 Hero 不只是静态封面，也保留了进入站点内容、切换阅读模式和访问外部主页的入口。</p><h2 id="Sticker-贴纸"><a href="#Sticker-贴纸" class="headerlink" title="Sticker 贴纸"></a>Sticker 贴纸</h2><p>Hero 仍然保留 FlatPaper 的手账感贴纸。内置便签和自定义图片 sticker 可以同时使用：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">home_hero:</span></span><br><span class="line">  <span class="attr">stickers:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">draggable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">note_text:</span> <span class="string">今日</span></span><br><span class="line">    <span class="attr">items:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">image:</span> <span class="string">/images/stickers/github.png</span></span><br><span class="line">        <span class="attr">alt:</span> <span class="string">GitHub</span></span><br><span class="line">        <span class="attr">size:</span> <span class="number">96</span></span><br><span class="line">        <span class="attr">link:</span> <span class="string">https://github.com/yourname</span></span><br></pre></td></tr></table></figure><p><code>stickers</code> 的几个常用字段：</p><ul><li><code>enable</code>：是否显示贴纸。</li><li><code>draggable</code>：是否允许拖动贴纸。</li><li><code>note_text</code>：内置便签贴纸的文字。</li><li><code>items</code>：自定义图片贴纸列表。</li><li><code>size</code>：单个图片贴纸尺寸。</li><li><code>link</code>：可选链接，配置后贴纸可以作为入口跳转；不配置时贴纸只是装饰。</li></ul><p>配置了 <code>link</code> 的 sticker 不会在点击时立刻跳转，而是先弹出访问确认。这样在拖动贴纸、整理位置或误点时，不会直接离开当前页面；确认后才会打开对应链接。</p><p>自定义图片 sticker 最多渲染 5 张。加上内置便签后，Hero 最多显示 6 个 sticker。</p><h2 id="完整示例"><a href="#完整示例" class="headerlink" title="完整示例"></a>完整示例</h2><p>下面是一段较完整的 Hero 配置：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">home_hero:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">title:</span> <span class="string">我的手账</span></span><br><span class="line">  <span class="attr">subtitle:</span> <span class="string">今日份记录</span></span><br><span class="line">  <span class="attr">bio:</span> <span class="string">生活不是每天都精彩，但总有值得收藏的片段。</span></span><br><span class="line">  <span class="attr">avatar:</span> <span class="string">/images/avatar.jpg</span></span><br><span class="line">  <span class="attr">avatar_shape:</span> <span class="string">circle</span></span><br><span class="line">  <span class="attr">image:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">/images/hero-1.jpg</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">/images/hero-2.jpg</span></span><br><span class="line">  <span class="attr">image_overlay:</span> [<span class="number">0.22</span>, <span class="number">0.58</span>]</span><br><span class="line">  <span class="attr">cta_link:</span> <span class="string">&quot;#flatpaper-home-content&quot;</span></span><br><span class="line">  <span class="attr">stickers:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">draggable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">note_text:</span> <span class="string">今日</span></span><br><span class="line">    <span class="attr">items:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">image:</span> <span class="string">/images/stickers/github.png</span></span><br><span class="line">        <span class="attr">alt:</span> <span class="string">GitHub</span></span><br><span class="line">        <span class="attr">size:</span> <span class="number">96</span></span><br><span class="line">        <span class="attr">link:</span> <span class="string">https://github.com/yourname</span></span><br></pre></td></tr></table></figure><h2 id="移动端表现"><a href="#移动端表现" class="headerlink" title="移动端表现"></a>移动端表现</h2><p>在窄屏上，Hero 会优先保证文字、头像和操作入口的稳定性。图片背景不会强行压缩所有内容，也不会让正文入口被视觉元素遮住。这样桌面端可以更有开屏感，移动端仍然保持 FlatPaper 一贯的阅读节奏。</p><h2 id="用工具生成配置"><a href="#用工具生成配置" class="headerlink" title="用工具生成配置"></a>用工具生成配置</h2><p>如果不想手写 YAML，可以使用 FlatPaper Tools 的 Hero 工具。它现在提供两个独立片段：</p><ul><li>遮罩配置：生成 <code>image_overlay</code>，并用示例图预览遮罩效果。</li><li>Sticker 配置：生成 <code>stickers</code>，填写图片地址后可以在底部预览贴纸图像。</li></ul><p>复制出来的片段会带有 <code># home_hero:</code> 注释作为定位提示。粘贴到已有 <code>home_hero:</code> 下方时，只需要保留子项缩进即可。</p><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>新的首页 Hero 让 FlatPaper 有了更完整的第一屏表达：可以保持纸张与便签的默认气质，也可以用背景图、头像、简介、社交链接和贴纸组成更个人化的入口。它不会改变文章页的阅读体验，但会让首页更像一个有主题、有状态的站点门面。</p><div class="flatpaper-note flatpaper-note--info"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>示例网站的贴纸来自于：<a href="https://github.com/fenxer/llm-things">https://github.com/fenxer/llm-things</a></p></div></div><p><img src="https://img.nep.me/sticker/claudecode.webp" alt="claudecode.png"></p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/06/22/flatpaper-hero-image-support/</id>
    <link href="https://flatpaper.nep.me/2026/06/22/flatpaper-hero-image-support/"/>
    <published>2026-06-22T05:50:00.000Z</published>
    <summary>
      <![CDATA[<p>FlatPaper 现在有了完整的首页 Hero 配置。它不只是给首页加一张大图，而是把标题、简介、头像、背景图、跳转箭头、社交链接、主题工具按钮和 sticker 贴纸组织成一个独立的开屏区域。</p>
<p>这个功能适合想让首页第一屏更有识别度的站点：个人博客可以放一张代表近期状态的照片，摄影站可以放作品封面，作品集可以用视觉图建立风格，轻量手账站也可以继续使用默认纸张背景和便签贴纸。</p>
<p>Sticker 贴纸 <strong>可以拖动</strong>。</p>
<p>带背景的 <a href="https://homulilly.com/">预览</a> ：</p>
<img src="https://img.nep.me/blog/homlilly-og.webp" alt="homlilly-og.png" style="width:50%;max-width:100%;height:auto" />]]>
    </summary>
    <title>FlatPaper 首页 Hero：开屏、背景图与贴纸配置</title>
    <updated>2026-06-26T20:02:06.523Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题开发" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91/"/>
    <category term="Markdown" scheme="https://flatpaper.nep.me/tags/Markdown/"/>
    <category term="主题" scheme="https://flatpaper.nep.me/tags/%E4%B8%BB%E9%A2%98/"/>
    <category term="排版" scheme="https://flatpaper.nep.me/tags/%E6%8E%92%E7%89%88/"/>
    <category term="代码块" scheme="https://flatpaper.nep.me/tags/%E4%BB%A3%E7%A0%81%E5%9D%97/"/>
    <category term="测试" scheme="https://flatpaper.nep.me/tags/%E6%B5%8B%E8%AF%95/"/>
    <content>
      <![CDATA[<p>这篇文章用于集中预览主题在文章页里的主要内容块：标题、段落、链接、引用、提示块、选项卡、表格、代码、图片、脚注、列表和长文本换行。它适合作为主题改样式后的快速回归检查页面。</p><span id="more"></span><h2 id="1-正文排版"><a href="#1-正文排版" class="headerlink" title="1. 正文排版"></a>1. 正文排版</h2><p>普通段落需要在长时间阅读时保持稳定节奏。这里混合展示 <strong>加粗文字</strong>、<em>强调文字</em>、<code>行内代码</code>、<del>删除线</del>、中文标点、English words，以及一个外部链接：<a href="https://hexo.io/docs/">Hexo 文档</a>。</p><p>当一段文字比较长时，行高、段落间距、链接下划线和深浅色模式下的文字对比都会同时被检查。主题不应该让正文看起来像按钮说明，也不应该让链接被普通文字淹没。</p><h3 id="1-1-小标题层级"><a href="#1-1-小标题层级" class="headerlink" title="1.1 小标题层级"></a>1.1 小标题层级</h3><p>三级标题适合文章内部的小节。</p><h4 id="1-1-1-四级标题"><a href="#1-1-1-四级标题" class="headerlink" title="1.1.1 四级标题"></a>1.1.1 四级标题</h4><p>四级标题通常只在较长文章里出现，字号不宜压过三级标题。</p><h2 id="2-列表"><a href="#2-列表" class="headerlink" title="2. 列表"></a>2. 列表</h2><p>无序列表：</p><ul><li>首页卡片：标题、摘要、封面和标签需要稳定排列。</li><li>文章详情：正文、目录、上一篇&#x2F;下一篇和互动区共同工作。</li><li>移动端：长标题、长链接和图片不能撑破页面。</li></ul><p>有序列表：</p><ol><li>修改主题样式。</li><li>运行本地构建。</li><li>打开这篇文章检查所有块。</li><li>在浅色和深色模式下各看一遍。</li></ol><p>任务列表：</p><ul><li><input checked="" disabled="" type="checkbox"> 检查普通段落</li><li><input checked="" disabled="" type="checkbox"> 检查 note 与 tabs</li><li><input disabled="" type="checkbox"> 检查真实长文内容</li></ul><h2 id="3-引用块"><a href="#3-引用块" class="headerlink" title="3. 引用块"></a>3. 引用块</h2><blockquote><p>引用块适合放一段需要从正文中分离出来的话。它应该比普通段落更醒目，但不能抢走 note block 或代码块的层级。</p><p>第二段引用用于检查连续段落的间距。</p></blockquote><h2 id="4-Note-提示块"><a href="#4-Note-提示块" class="headerlink" title="4. Note 提示块"></a>4. Note 提示块</h2><div class="flatpaper-note flatpaper-note--default"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>Default 提示用于普通补充说明。这里包含 <code>inline code</code> 和一个 <a href="/archives/">内部链接</a>。</p></div></div><div class="flatpaper-note flatpaper-note--primary"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>Primary 提示通常跟当前主题强调色有关，适合放较重要但不危险的信息。</p></div></div><div class="flatpaper-note flatpaper-note--success"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>Success 提示用于完成状态、推荐做法或通过检查的结果。</p></div></div><div class="flatpaper-note flatpaper-note--info"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>Info 提示适合放背景信息、兼容性说明和阅读提示。</p></div></div><div class="flatpaper-note flatpaper-note--warning"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>Warning 提示用于需要注意但不一定错误的内容。</p></div></div><div class="flatpaper-note flatpaper-note--danger"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>Danger 提示用于破坏性操作、风险说明或强烈不建议的做法。</p></div></div><details class="flatpaper-note flatpaper-note--warning"><summary class="flatpaper-note__title"><span class="flatpaper-note__icon" aria-hidden="true"></span><span class="flatpaper-note__label">可折叠提示</span><span class="flatpaper-note__chevron" aria-hidden="true"></span></summary><div class="flatpaper-note__body"><p>带标题的 note 会渲染为可折叠块。展开后应该能正常显示段落、列表和代码：</p><ul><li>第一项内容</li><li>第二项内容</li></ul><p><code>hexo generate</code></p></div></details><h3 id="4-1-VitePress-风格容器"><a href="#4-1-VitePress-风格容器" class="headerlink" title="4.1 VitePress 风格容器"></a>4.1 VitePress 风格容器</h3><details class="flatpaper-note flatpaper-note--info"><summary class="flatpaper-note__title"><span class="flatpaper-note__icon" aria-hidden="true"></span><span class="flatpaper-note__label">容器语法提示</span><span class="flatpaper-note__chevron" aria-hidden="true"></span></summary><div class="flatpaper-note__body"><p><code>:::</code> 容器语法会被主题改写为等价的 note block，适合写新文章时减少标签噪音。</p></div></details><div class="flatpaper-note flatpaper-note--success"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>没有标题的容器也应该正常显示。</p></div></div><h2 id="5-Tabs-选项卡"><a href="#5-Tabs-选项卡" class="headerlink" title="5. Tabs 选项卡"></a>5. Tabs 选项卡</h2><div class="flatpaper-tabs"><div class="flatpaper-tabs__intro"><p>下面的选项卡用于检查按钮组、面板切换、默认激活项和面板内部排版。</p></div><div class="flatpaper-tabs__nav" role="tablist"><button type="button" role="tab" id="tabs-3-tab-0" aria-controls="tabs-3-panel-0" aria-selected="true" class="flatpaper-tabs__nav-item is-active" data-index="0">段落</button><button type="button" role="tab" id="tabs-3-tab-1" aria-controls="tabs-3-panel-1" aria-selected="false" class="flatpaper-tabs__nav-item" data-index="1">列表</button><button type="button" role="tab" id="tabs-3-tab-2" aria-controls="tabs-3-panel-2" aria-selected="false" class="flatpaper-tabs__nav-item" data-index="2">代码</button></div><div class="flatpaper-tabs__panels"><section role="tabpanel" id="tabs-3-panel-0" aria-labelledby="tabs-3-tab-0" class="flatpaper-tabs__panel is-active" data-index="0"><p>选项卡内可以放普通段落、<strong>加粗文字</strong> 和 <code>行内代码</code>。</p><blockquote><p>这里还有一个嵌套在 tab 内的引用块。</p></blockquote></section><section role="tabpanel" id="tabs-3-panel-1" aria-labelledby="tabs-3-tab-1" class="flatpaper-tabs__panel" data-index="1" hidden><ul><li>Alpha</li><li>Beta</li><li>Gamma</li></ul><ol><li>第一步</li><li>第二步</li><li>第三步</li></ol></section><section role="tabpanel" id="tabs-3-panel-2" aria-labelledby="tabs-3-tab-2" class="flatpaper-tabs__panel" data-index="2" hidden><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> theme = &#123;</span><br><span class="line">  <span class="attr">name</span>: <span class="string">&#x27;framedinfra&#x27;</span>,</span><br><span class="line">  <span class="attr">accent</span>: <span class="string">&#x27;blue&#x27;</span>,</span><br><span class="line">  <span class="attr">noteStyle</span>: <span class="string">&#x27;flat&#x27;</span></span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">`<span class="subst">$&#123;theme.name&#125;</span>:<span class="subst">$&#123;theme.accent&#125;</span>`</span>);</span><br></pre></td></tr></table></figure></section></div></div><div class="flatpaper-tabs is-collapsible"><div class="flatpaper-tabs__intro"><p>这个 tabs 使用 <code>-1</code>，默认不展开任何面板。</p></div><div class="flatpaper-tabs__nav" role="tablist"><button type="button" role="tab" id="tabs-4-tab-0" aria-controls="tabs-4-panel-0" aria-selected="false" class="flatpaper-tabs__nav-item" data-index="0">配置</button><button type="button" role="tab" id="tabs-4-tab-1" aria-controls="tabs-4-panel-1" aria-selected="false" class="flatpaper-tabs__nav-item" data-index="1">说明</button></div><div class="flatpaper-tabs__panels"><section role="tabpanel" id="tabs-4-panel-0" aria-labelledby="tabs-4-tab-0" class="flatpaper-tabs__panel" data-index="0" hidden><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">note:</span></span><br><span class="line">  <span class="attr">style:</span> <span class="string">flat</span></span><br><span class="line">  <span class="attr">icons:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">code:</span></span><br><span class="line">  <span class="attr">theme:</span> <span class="string">simple</span></span><br></pre></td></tr></table></figure></section><section role="tabpanel" id="tabs-4-panel-1" aria-labelledby="tabs-4-tab-1" class="flatpaper-tabs__panel" data-index="1" hidden><p>点击当前 tab 应该可以打开或收起内容。</p></section></div></div><h2 id="6-表格"><a href="#6-表格" class="headerlink" title="6. 表格"></a>6. 表格</h2><table><thead><tr><th align="left">场景（左对齐）</th><th align="center">检查点(居中)</th><th align="right">期望(右对齐)</th></tr></thead><tbody><tr><td align="left">普通表格</td><td align="center">边框、行高、单元格间距</td><td align="right">易扫描</td></tr><tr><td align="left">长文本</td><td align="center">单元格自动换行</td><td align="right">不撑破文章区域</td></tr><tr><td align="left">行内代码</td><td align="center"><code>code_theme</code>、<code>note_style</code></td><td align="right">颜色清晰</td></tr><tr><td align="left">链接</td><td align="center"><a href="/about/">配置页</a></td><td align="right">可识别</td></tr></tbody></table><p>下面这张表用于检查窄屏最低列宽：较短的列不应因为旁边有超长内容而挤到两三个字母一行，超长内容可以在自身列内换行。</p><table><thead><tr><th align="left">名称</th><th align="center">状态</th><th align="right">超长标识</th></tr></thead><tbody><tr><td align="left">EnglishWord</td><td align="center">Ready</td><td align="right">flatpaper-demo-theme-table-overflow-check-super-long-unbroken-token-20260702</td></tr><tr><td align="left">中文短词</td><td align="center">OK</td><td align="right"><a href="https://example.com/flatpaper/table/overflow/regression/check/with/a/very/long/path">https://example.com/flatpaper/table/overflow/regression/check/with/a/very/long/path</a></td></tr></tbody></table><h2 id="7-代码块"><a href="#7-代码块" class="headerlink" title="7. 代码块"></a>7. 代码块</h2><p>JavaScript:</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">buildExcerpt</span>(<span class="params">input, limit = <span class="number">96</span></span>) &#123;</span><br><span class="line">  <span class="keyword">const</span> text = <span class="title class_">String</span>(input).<span class="title function_">replace</span>(<span class="regexp">/&lt;[^&gt;]+&gt;/g</span>, <span class="string">&#x27;&#x27;</span>).<span class="title function_">trim</span>();</span><br><span class="line">  <span class="keyword">if</span> (text.<span class="property">length</span> &lt;= limit) <span class="keyword">return</span> text;</span><br><span class="line">  <span class="keyword">return</span> text.<span class="title function_">slice</span>(<span class="number">0</span>, limit) + <span class="string">&#x27;...&#x27;</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>CSS:</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-class">.article-content</span> &#123;</span><br><span class="line">  <span class="attribute">line-height</span>: <span class="number">1.75</span>;</span><br><span class="line">  <span class="attribute">overflow-wrap</span>: break-word;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.article-content</span> <span class="selector-tag">a</span> &#123;</span><br><span class="line">  <span class="attribute">text-underline-offset</span>: <span class="number">3px</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Shell:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">hexo clean</span><br><span class="line">hexo generate --config _multiconfig.yml</span><br></pre></td></tr></table></figure><p>单行代码样式</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo s</span><br></pre></td></tr></table></figure><p>长行代码用于检查横向滚动：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://example.com/articles/theme-preview-checklist?utm_source=demo-blog&amp;utm_medium=markdown&amp;utm_campaign=long-url-wrapping-and-code-scroll-behavior</span><br></pre></td></tr></table></figure><h2 id="8-图片与图文块"><a href="#8-图片与图文块" class="headerlink" title="8. 图片与图文块"></a>8. 图片与图文块</h2><p>单张 Markdown 图片：</p><p><img src="/images/preview-gallery/paper-notes.svg" alt="纸张笔记"></p><p>HTML figure:</p><figure>  <img src="/images/preview-gallery/reading-corner.svg" alt="阅读角落">  <figcaption>图片说明文字用于检查 figcaption 的字号、颜色和间距。</figcaption></figure><p>双列图片：</p><div class="gallery-preview-row">  <figure>    <img src="/images/preview-gallery/morning-desk.svg" alt="晨间书桌">    <figcaption>晨间书桌</figcaption>  </figure>  <figure>    <img src="/images/preview-gallery/city-window.svg" alt="城市窗景">    <figcaption>城市窗景</figcaption>  </figure></div><h2 id="9-长链接与换行"><a href="#9-长链接与换行" class="headerlink" title="9. 长链接与换行"></a>9. 长链接与换行</h2><p>下面这条链接故意很长，用于检查正文区域是否会被撑开：</p><p><a href="https://example.com/articles/framedinfra-theme-feature-overview/very/long/path/with/query?utm_source=theme-preview&utm_medium=markdown&utm_campaign=layout-regression-check&section=long-url-wrapping">https://example.com/articles/framedinfra-theme-feature-overview/very/long/path/with/query?utm_source=theme-preview&amp;utm_medium=markdown&amp;utm_campaign=layout-regression-check&amp;section=long-url-wrapping</a></p><h2 id="10-脚注"><a href="#10-脚注" class="headerlink" title="10. 脚注"></a>10. 脚注</h2><p>脚注适合放补充说明，不应该打断正文节奏。这里有一个手写脚注标记<sup id="fnref-preview"><a href="#fn-preview">1</a></sup>，以及另一个更长的说明<sup id="fnref-style"><a href="#fn-style">2</a></sup>。</p><section class="footnotes" aria-label="脚注">  <ol>    <li id="fn-preview">这篇文章可以作为主题样式调整后的人工检查清单。<a class="footnote-backref" href="#fnref-preview" aria-label="返回正文">↩</a></li>    <li id="fn-style">当颜色、间距或字体改动影响范围较大时，集中预览页比随机打开文章更容易发现回归。<a class="footnote-backref" href="#fnref-style" aria-label="返回正文">↩</a></li>  </ol></section><h2 id="11-结束检查"><a href="#11-结束检查" class="headerlink" title="11. 结束检查"></a>11. 结束检查</h2><p>如果这篇文章里的所有块在 <mark>桌面、移动端、浅色模式和深色模式</mark> 下都能保持清晰，那么文章页的大部分基础样式就处在比较稳定的状态。</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">mark</span>&gt;</span></span>桌面、移动端、浅色模式和深色模式<span class="language-xml"><span class="tag">&lt;/<span class="name">mark</span>&gt;</span></span></span><br></pre></td></tr></table></figure><h2 id="12-文章内-hr"><a href="#12-文章内-hr" class="headerlink" title="12. 文章内 hr"></a>12. 文章内 hr</h2><hr>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/06/11/theme-feature-overview/</id>
    <link href="https://flatpaper.nep.me/2026/06/11/theme-feature-overview/"/>
    <published>2026-06-11T09:30:00.000Z</published>
    <summary>
      <![CDATA[<p>这篇文章用于集中预览主题在文章页里的主要内容块：标题、段落、链接、引用、提示块、选项卡、表格、代码、图片、脚注、列表和长文本换行。它适合作为主题改样式后的快速回归检查页面。</p>]]>
    </summary>
    <title>主题效果总览：文章块与交互组件预览</title>
    <updated>2026-07-01T20:50:14.291Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题开发" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91/"/>
    <category term="主题" scheme="https://flatpaper.nep.me/tags/%E4%B8%BB%E9%A2%98/"/>
    <category term="更新日志" scheme="https://flatpaper.nep.me/tags/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97/"/>
    <content>
      <![CDATA[<p>文章底部那一行「评论 &#x2F; 分享」的互动区，现在可以追加你自己的条目了。最常见的用法就是<strong>赞赏码</strong>：放一个按钮，点一下气泡里弹出收款二维码。支持配置多个，支付宝、微信、PayPal 的图标都已内置。</p><span id="more"></span><h2 id="它长什么样"><a href="#它长什么样" class="headerlink" title="它长什么样"></a>它长什么样</h2><p>在文章底部互动区（<code>article-reactions</code>）里，自定义条目和「评论」「分享」并排排布：</p><ul><li>一个圆形图标按钮 + 旁边一行文字（比如「微信」「支付宝」「赞赏」）</li><li>hover 或点击后，按钮上方弹出一个气泡，里面是你提供的图片（一般是收款二维码）</li><li>再点一次、点页面其他地方、或按 <code>Esc</code> 都会收起气泡</li><li>多个条目互斥：打开一个会自动收起其他的</li></ul><div class="flatpaper-note flatpaper-note--info"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>当前自定义条目只支持 <code>image</code> 一种类型——hover 或点击弹出一张图片。后续可以按同样的结构扩展更多类型。</p></div></div><p>说是“赞赏码”，其实这项功能本质上只是展示一张图片。赞赏二维码只是最常见的用途，你也可以放活动海报、群二维码、作品预览图、联系方式卡片，或者任何适合在文章底部临时展开查看的图片。现在它已经支持鼠标 hover 显示，桌面端不用点击也能快速查看。</p><h2 id="怎么配置"><a href="#怎么配置" class="headerlink" title="怎么配置"></a>怎么配置</h2><p>在站点的 <code>_config.flatpaper.yml</code> 里新增 <code>reactions.custom</code>，每个条目就是一张赞赏码：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">reactions:</span></span><br><span class="line">  <span class="attr">custom:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">type:</span> <span class="string">image</span>          <span class="comment"># 目前仅支持 image</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">微信</span>            <span class="comment"># 按钮旁的文字</span></span><br><span class="line">      <span class="attr">icon:</span> <span class="string">weixin</span>         <span class="comment"># 图标，见下表</span></span><br><span class="line">      <span class="attr">align:</span> <span class="string">left</span>          <span class="comment"># 靠左（与「评论」同侧）</span></span><br><span class="line">      <span class="attr">image:</span> <span class="string">https://img.nep.me/ooo/square-simple.webp</span>   <span class="comment"># 二维码图片</span></span><br><span class="line">      <span class="attr">title:</span> <span class="string">微信</span>           <span class="comment"># 可选，气泡标题，缺省用 name</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">type:</span> <span class="string">image</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">支付宝</span></span><br><span class="line">      <span class="attr">icon:</span> <span class="string">alipay</span></span><br><span class="line">      <span class="attr">align:</span> <span class="string">right</span>         <span class="comment"># 靠右（与「分享」同侧）</span></span><br><span class="line">      <span class="attr">image:</span> <span class="string">https://img.nep.me/ooo/square-simple.webp</span></span><br></pre></td></tr></table></figure><p>字段说明：</p><table><thead><tr><th>字段</th><th>说明</th></tr></thead><tbody><tr><td><code>type</code></td><td>条目类型，目前仅 <code>image</code>（点击弹出一张图片）</td></tr><tr><td><code>name</code></td><td>按钮旁文字，如 <code>赞赏</code> &#x2F; <code>微信</code> &#x2F; <code>支付宝</code>；缺省为 <code>赞赏</code></td></tr><tr><td><code>icon</code></td><td>图标名：<code>gift</code>（默认）、<code>alipay</code>、<code>weixin</code>、<code>paypal</code>、<code>heart</code>，或任意内置图标</td></tr><tr><td><code>align</code></td><td><code>left</code> 靠左（与「评论」同侧）&#x2F; <code>right</code> 靠右（与「分享」同侧，默认）</td></tr><tr><td><code>image</code></td><td>二维码图片：站点 <code>source/</code> 下的相对路径（如 <code>/images/reward.jpg</code>）或绝对 URL</td></tr><tr><td><code>title</code></td><td>可选，气泡标题；缺省用 <code>name</code></td></tr></tbody></table><h2 id="新增的支付图标"><a href="#新增的支付图标" class="headerlink" title="新增的支付图标"></a>新增的支付图标</h2><p>为了配合赞赏码，主题内置了这些常用图标。品牌图标现在由内置图标 Registry 提供，微信使用 Font Awesome Free 6 的 <code>weixin</code> 名称：</p><ul><li><code>alipay</code> — 支付宝</li><li><code>weixin</code> — 微信</li><li><code>paypal</code> — PayPal</li><li><code>gift</code> — 赞赏默认图标（描边风格）</li></ul><p>这些图标也进了<a href="/2026/05/17/builtin-icons-catalog/">内置图标速查</a>，正文里直接贴 <code>&lt;svg&gt;</code> 或在主题模板里 <code>partial(&#39;_partial/icons&#39;, &#123; icon: &#39;alipay&#39; &#125;)</code> 都能用。</p><h2 id="小提示"><a href="#小提示" class="headerlink" title="小提示"></a>小提示</h2><ul><li><code>image</code> 用绝对 URL 或站内相对路径都行，气泡里的二维码默认带了 <code>no-zoom</code>，不会被 Fancybox 灯箱再叠一层。</li><li>想把赞赏放在左边、分享类放右边，靠 <code>align</code> 自由组合即可。</li><li>不配置 <code>reactions.custom</code> 时，互动区保持原样，只有「评论 &#x2F; 分享」，不会多出任何东西。</li></ul>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/30/reactions-reward-qrcode/</id>
    <link href="https://flatpaper.nep.me/2026/05/30/reactions-reward-qrcode/"/>
    <published>2026-05-29T18:00:00.000Z</published>
    <summary>
      <![CDATA[<p>文章底部那一行「评论 &#x2F; 分享」的互动区，现在可以追加你自己的条目了。最常见的用法就是<strong>赞赏码</strong>：放一个按钮，点一下气泡里弹出收款二维码。支持配置多个，支付宝、微信、PayPal 的图标都已内置。</p>]]>
    </summary>
    <title>更新日志：FlatPaper 现已支持赞赏码</title>
    <updated>2026-07-01T19:45:24.839Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题开发" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91/"/>
    <category term="主题" scheme="https://flatpaper.nep.me/tags/%E4%B8%BB%E9%A2%98/"/>
    <category term="参考" scheme="https://flatpaper.nep.me/tags/%E5%8F%82%E8%80%83/"/>
    <content>
      <![CDATA[<blockquote><p><strong>更新版本：v0.3.4 - 2026-06-27</strong></p></blockquote><p>FlatPaper 主题采用内置的图标 Registry 系统，能够自动根据配置和模板文件<strong>按需提取并打包</strong>页面所用到的 SVG 图标。在 Hexo 生成时，只输出实际用到的 symbol，不加载外部图标 CDN。</p><p>对于主题配置（如菜单、个人资料社交链接），你可以使用任何匹配的内置图标（无前缀优先匹配 Lucide，Font Awesome Free 6 使用前缀，如 <code>fa-brands:github</code>、<code>fa-solid:trash-can</code>）。</p><span id="more"></span><h2 id="默认内置经典图标一览"><a href="#默认内置经典图标一览" class="headerlink" title="默认内置经典图标一览"></a>默认内置经典图标一览</h2><p>以下列出了主题默认必定打包的经典图标，你可以直接在主题配置或文章中通过名称调用。下方是该图标在 Registry 中的名称：</p><style>.icon-grid {  display: grid;  grid-template-columns: repeat(auto-fill, minmax(108px, 1fr));  gap: 10px;  margin: 14px 0 22px;}.icon-grid > figure {  margin: 0;  display: flex;  flex-direction: column;  align-items: center;  gap: 8px;  padding: 14px 8px;  border: 1px dashed var(--line, #d8d3c4);  border-radius: 10px;  background: var(--paper-warm, transparent);}.icon-grid > figure svg { display: block; color: var(--ink, currentColor); }.icon-grid > figure figcaption {  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;  font-size: 12px;  color: var(--muted, #777);  text-align: center;  word-break: break-all;  line-height: 1.3;}</style><h3 id="站点导航"><a href="#站点导航" class="headerlink" title="站点导航"></a>站点导航</h3><div class="icon-grid"><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m3 10 9-7 9 7"/><path d="M5 10v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V10"/><path d="M9 21v-6h6v6"/></svg><figcaption>home</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="20" height="5" x="2" y="3" rx="1"/><path d="M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8"/><path d="M10 12h4"/></svg><figcaption>archive</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg><figcaption>link</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg><figcaption>user</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg><figcaption>search</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12h16"/><path d="M4 6h16"/><path d="M4 18h16"/></svg><figcaption>menu</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2"/><path d="M9 3v18"/></svg><figcaption>panel-left</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="m14.31 8 5.74 9.94"/><path d="M9.69 8h11.48"/><path d="M7.38 12l5.74-9.94"/><path d="M9.69 16 3.95 6.06"/><path d="M14.31 16H2.83"/><path d="m13.79 4-5.74 9.94"/></svg><figcaption>aperture</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><polygon points="16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"/></svg><figcaption>compass</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg><figcaption>users</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4.9 19.1C1 15.2 1 8.8 4.9 4.9"/><path d="M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5"/><circle cx="12" cy="12" r="2"/><path d="M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5"/><path d="M19.1 4.9C23 8.8 23 15.1 19.1 19"/></svg><figcaption>radio</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="7" height="7" x="3" y="3" rx="1" /><rect width="7" height="7" x="14" y="3" rx="1" /><rect width="7" height="7" x="14" y="14" rx="1" /><rect width="7" height="7" x="3" y="14" rx="1" /></svg><figcaption>layout-grid</figcaption></figure></div><h3 id="方向与关闭"><a href="#方向与关闭" class="headerlink" title="方向与关闭"></a>方向与关闭</h3><div class="icon-grid"><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 19-7-7 7-7"/><path d="M19 12H5"/></svg><figcaption>arrow-left</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"/><path d="m12 5 7 7-7 7"/></svg><figcaption>arrow-right</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15 18-6-6 6-6"/></svg><figcaption>chevron-left</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg><figcaption>chevron-right</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg><figcaption>close / x</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m5 12 7-7 7 7"/><path d="M12 19V5"/></svg><figcaption>arrow-up</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg><figcaption>chevron-down</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m18 15-6-6-6 6"/></svg><figcaption>chevron-up</figcaption></figure></div><h3 id="时间与状态"><a href="#时间与状态" class="headerlink" title="时间与状态"></a>时间与状态</h3><div class="icon-grid"><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2"/><path d="M12 20v2"/><path d="m4.93 4.93 1.41 1.41"/><path d="m17.66 17.66 1.41 1.41"/><path d="M2 12h2"/><path d="M20 12h2"/><path d="m6.34 17.66-1.41 1.41"/><path d="m19.07 4.93-1.41 1.41"/></svg><figcaption>sun</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></svg><figcaption>moon</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"/><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"/><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"/><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"/><path d="M12 2C6.5 2 2 5.9 2 10.8c0 3.3 2.7 6 6 6h1.2c.8 0 1.4.6 1.4 1.4 0 .4-.2.8-.2 1.2 0 .8.6 1.6 1.6 1.6 5.5 0 10-4.2 10-9.4C22 6.3 17.5 2 12 2Z"/></svg><figcaption>palette</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 2v4"/><path d="M16 2v4"/><rect width="18" height="18" x="3" y="4" rx="2"/><path d="M3 10h18"/></svg><figcaption>calendar</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg><figcaption>clock</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 12a9 9 0 1 0 3-6.7L3 8"/><path d="M3 3v5h5"/><path d="M12 7v5l4 2"/></svg><figcaption>history</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z"/></svg><figcaption>flame</figcaption></figure></div><h3 id="内容与归档"><a href="#内容与归档" class="headerlink" title="内容与归档"></a>内容与归档</h3><div class="icon-grid"><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/></svg><figcaption>folder</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z"/><circle cx="7.5" cy="7.5" r=".5" fill="currentColor"/></svg><figcaption>tag</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="4" x2="20" y1="9" y2="9"/><line x1="4" x2="20" y1="15" y2="15"/><line x1="10" x2="8" y1="3" y2="21"/><line x1="16" x2="14" y1="3" y2="21"/></svg><figcaption>hash</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19.2 2.96a1 1 0 0 1 1.6.8c0 3-.6 7.74-4.16 11.31-2.66 2.66-6.74 3.99-9.65 3.99"/><path d="M2 21c0-3 1.85-5.36 5.08-6"/></svg><figcaption>leaf</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"/><circle cx="12" cy="12" r="3"/></svg><figcaption>eye</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M16 12H3"/><path d="M16 18H3"/><path d="M16 6H3"/><path d="M21 12h.01"/><path d="M21 18h.01"/><path d="M21 6h.01"/></svg><figcaption>table-of-contents / list-tree</figcaption></figure></div><h3 id="交互与通信"><a href="#交互与通信" class="headerlink" title="交互与通信"></a>交互与通信</h3><div class="icon-grid"><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.29 1.51 4.04 3 5.5l7 7Z"/></svg><figcaption>heart</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z"/></svg><figcaption>message-circle</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg><figcaption>message-square</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><line x1="8.59" x2="15.42" y1="13.51" y2="17.49"/><line x1="15.41" x2="8.59" y1="6.51" y2="10.49"/></svg><figcaption>share-2</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"/><path d="m21.854 2.147-10.94 10.939"/></svg><figcaption>send</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="20" height="16" x="2" y="4" rx="2"/><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"/></svg><figcaption>mail / email</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="8" width="18" height="4" rx="1"/><path d="M12 8v13"/><path d="M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7"/><path d="M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5"/></svg><figcaption>gift</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m18 14 4 4-4 4"/><path d="m18 2 4 4-4 4"/><path d="M2 18h1.4c1.3 0 2.5-.6 3.3-1.7l6.6-8.6C14.1 6.6 15.2 6 16.6 6H22"/><path d="M2 6h1.9c.9 0 1.8.4 2.4 1.1l1.4 1.8"/><path d="M22 18h-5.4c-1.3 0-2.5-.6-3.3-1.7l-.5-.7"/></svg><figcaption>shuffle</figcaption></figure></div><h3 id="订阅"><a href="#订阅" class="headerlink" title="订阅"></a>订阅</h3><div class="icon-grid"><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 11a9 9 0 0 1 9 9"/><path d="M4 4a16 16 0 0 1 16 16"/><circle cx="5" cy="19" r="1"/></svg><figcaption>rss</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><ellipse cx="12" cy="12" rx="11" ry="4.5"/><ellipse cx="12" cy="12" rx="11" ry="4.5" transform="rotate(60 12 12)"/><ellipse cx="12" cy="12" rx="11" ry="4.5" transform="rotate(120 12 12)"/></svg><figcaption>atom</figcaption></figure></div><h3 id="品牌（描边风格）"><a href="#品牌（描边风格）" class="headerlink" title="品牌（描边风格）"></a>品牌（描边风格）</h3><p><code>github</code> 和 <code>twitter</code> 这类无前缀名称会优先从 Lucide 解析；如果需要指定 Font Awesome 品牌图标，可使用 <code>fa-brands:</code> 前缀。</p><div class="icon-grid"><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.4 5.4 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"/><path d="M9 18c-4.51 2-5-2-7-2"/></svg><figcaption>github</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z"/></svg><figcaption>twitter</figcaption></figure></div><h3 id="品牌（填充风格-·-Font-Awesome）"><a href="#品牌（填充风格-·-Font-Awesome）" class="headerlink" title="品牌（填充风格 · Font Awesome）"></a>品牌（填充风格 · Font Awesome）</h3><p>新版 Twitter（X）以及其他常见平台来自内置 Font Awesome Free 6 品牌图标，使用 <code>fill=&quot;currentColor&quot;</code>。</p><div class="icon-grid"><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg><figcaption>x-twitter</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M11.979 0C5.678 0 .511 4.86.022 11.037l6.432 2.658c.545-.371 1.203-.59 1.912-.59.063 0 .125.004.188.006l2.861-4.142V8.91c0-2.495 2.028-4.524 4.524-4.524 2.494 0 4.524 2.031 4.524 4.527 0 2.496-2.03 4.525-4.524 4.525h-.105l-4.076 2.911c0 .052.004.105.004.159 0 1.875-1.515 3.396-3.39 3.396-1.635 0-3.016-1.173-3.331-2.727L.436 15.27C1.862 20.307 6.486 24 11.979 24c6.627 0 11.999-5.373 11.999-12S18.605 0 11.979 0M7.54 18.21l-1.473-.61c.262.543.714.999 1.314 1.25 1.297.539 2.793-.076 3.332-1.375a2.526 2.526 0 0 0 .003-1.94 2.516 2.516 0 0 0-1.378-1.36 2.5 2.5 0 0 0-1.876-.011l1.523.63c.957.4 1.409 1.5 1.009 2.455-.397.957-1.497 1.41-2.454 1.012m9.553-6.05c-1.66 0-3.012-1.353-3.012-3.015s1.351-3.013 3.012-3.013c1.66 0 3.012 1.351 3.012 3.013 0 1.661-1.351 3.015-3.012 3.015m0-5.273a2.262 2.262 0 0 0 0 4.525 2.262 2.262 0 1 0 0-4.525"/></svg><figcaption>steam</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M17.813 4.653h.854c1.51.054 2.769.578 3.773 1.574 1.004.995 1.524 2.249 1.56 3.76v7.36c-.036 1.51-.556 2.769-1.56 3.773s-2.262 1.524-3.773 1.56H5.333c-1.51-.036-2.769-.556-3.773-1.56S.036 18.858 0 17.347v-7.36c.036-1.511.556-2.765 1.56-3.76 1.004-.996 2.262-1.52 3.773-1.574h.774l-1.174-1.12a1.234 1.234 0 0 1-.373-.906c0-.356.124-.658.373-.907l.027-.027c.267-.249.573-.373.92-.373.347 0 .653.124.92.373L9.653 4.44c.071.071.134.142.187.213h4.267a.836.836 0 0 1 .16-.213l2.853-2.747c.267-.249.573-.373.92-.373.347 0 .662.151.929.4.267.249.391.551.391.907 0 .355-.124.657-.373.906zM5.333 7.24c-.746.018-1.373.276-1.88.773-.506.498-.769 1.13-.787 1.894v7.52c.018.748.28 1.38.787 1.887.507.506 1.134.769 1.88.787h13.334c.746-.018 1.373-.28 1.88-.787.506-.507.769-1.13.787-1.887v-7.52c-.018-.747-.28-1.378-.787-1.894-.507-.515-1.134-.773-1.88-.773zM8 11.107c.373 0 .684.124.933.373.25.249.383.569.4.96v1.173c-.017.391-.15.711-.4.96-.249.25-.56.374-.933.374s-.684-.125-.933-.374c-.25-.249-.383-.569-.4-.96V12.44c0-.373.129-.689.387-.947.258-.257.574-.386.946-.386zm8 0c.373 0 .684.124.933.373.25.249.383.569.4.96v1.173c-.017.391-.15.711-.4.96-.249.25-.56.374-.933.374s-.684-.125-.933-.374c-.25-.249-.383-.569-.4-.96V12.44c.017-.391.15-.711.4-.96.249-.249.56-.373.933-.373z"/></svg><figcaption>bilibili</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814M9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg><figcaption>youtube</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg><figcaption>facebook</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 0C8.74 0 8.333.015 7.053.072 5.775.132 4.905.333 4.14.63c-.789.306-1.459.717-2.126 1.384S.935 3.35.63 4.14C.333 4.905.131 5.775.072 7.053.012 8.333 0 8.74 0 12s.015 3.667.072 4.947c.06 1.277.261 2.148.558 2.913.306.788.717 1.459 1.384 2.126.667.666 1.336 1.079 2.126 1.384.766.296 1.636.499 2.913.558C8.333 23.988 8.74 24 12 24s3.667-.015 4.947-.072c1.277-.06 2.148-.262 2.913-.558.788-.306 1.459-.718 2.126-1.384.666-.667 1.079-1.335 1.384-2.126.296-.765.499-1.636.558-2.913.06-1.28.072-1.687.072-4.947s-.015-3.667-.072-4.947c-.06-1.277-.262-2.149-.558-2.913-.306-.789-.718-1.459-1.384-2.126C21.319 1.347 20.651.935 19.86.63c-.765-.297-1.636-.499-2.913-.558C15.667.012 15.26 0 12 0zm-.182 2.16h.182c3.158 0 3.535.014 4.78.071 1.156.05 1.785.243 2.205.405.553.213.95.469 1.367.886.417.417.673.813.886 1.367.162.42.355 1.049.405 2.205.057 1.245.07 1.622.07 4.78 0 3.158-.014 3.535-.071 4.78-.05 1.156-.243 1.785-.405 2.205-.213.553-.469.95-.886 1.367-.417.417-.813.673-1.367.886-.42.162-1.049.355-2.205.405-1.245.057-1.622.07-4.78.07-3.159 0-3.535-.013-4.78-.07-1.156-.05-1.785-.243-2.205-.405-.553-.213-.95-.469-1.367-.886-.417-.417-.673-.814-.886-1.367-.163-.42-.356-1.049-.405-2.205-.058-1.245-.07-1.622-.07-4.78s.014-3.535.07-4.78c.05-1.156.243-1.785.405-2.205.213-.553.469-.95.886-1.367.417-.417.813-.673 1.367-.886.42-.163 1.049-.356 2.205-.405 1.09-.05 1.515-.064 3.738-.066zm5.097 1.985a1.44 1.44 0 1 0 0 2.881 1.44 1.44 0 0 0 0-2.881zM12 5.838a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 0 0 0-12.324zM12 8a4 4 0 1 1 0 8 4 4 0 0 1 0-8z"/></svg><figcaption>instagram</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/></svg><figcaption>telegram</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10.098 20.323c-3.977.391-7.414-1.406-7.672-4.02-.259-2.609 2.759-5.047 6.74-5.441 3.979-.394 7.413 1.404 7.671 4.018.259 2.6-2.759 5.046-6.737 5.443zm9.482-9.227c-.34-.1-.572-.169-.395-.622.385-.992.425-1.844.011-2.448-.781-1.139-2.918-1.076-5.364-.046 0 0-.766.335-.57-.27.378-1.214.323-2.231-.266-2.819-1.342-1.343-4.916.045-7.983 3.111C2.715 10.302 1.398 12.79 1.398 14.939c0 4.107 5.262 6.608 10.408 6.608 6.738 0 11.229-3.926 11.229-7.034 0-1.878-1.581-2.94-3.456-3.408zm1.378-6.51c-1.671-1.854-4.115-2.541-6.376-2.069-.522.109-.857.626-.748 1.146.11.522.626.858 1.149.748 1.609-.336 3.351.154 4.546 1.475 1.195 1.32 1.514 3.108.989 4.65-.171.5.097 1.044.598 1.214.5.171 1.044-.097 1.213-.598.739-2.166.292-4.712-1.378-6.566zm-2.873 2.585c-.814-.903-2.013-1.246-3.114-1.014a.835.835 0 1 0 .342 1.634c.539-.114 1.125.058 1.519.494.396.439.477 1.039.272 1.541-.171.426.034.91.46 1.084.422.17.908-.034 1.083-.46.418-1.025.252-2.246-.554-3.279zM9.34 13.812c-2.187.279-3.834 1.74-3.681 3.265.155 1.523 2.057 2.533 4.243 2.255 2.188-.279 3.835-1.74 3.681-3.265-.156-1.523-2.057-2.534-4.243-2.255zm-.453 4.439c-.51.078-1.005-.119-1.105-.439-.099-.32.234-.643.745-.722.51-.079 1.005.119 1.105.438.099.32-.234.643-.745.722zm.972-1.667c-.183.103-.41.085-.508-.041-.097-.125-.024-.31.159-.413.184-.103.41-.084.508.041.097.126.025.31-.159.413z"/></svg><figcaption>weibo</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19.695 15.07c3.426 1.158 4.203 1.22 4.203 1.22V3.846c0-2.124-1.705-3.845-3.81-3.845H3.914C1.808.001.102 1.722.102 3.846v16.31c0 2.123 1.706 3.845 3.813 3.845h16.173c2.105 0 3.81-1.722 3.81-3.845v-.157s-6.19-2.602-9.315-4.119c-2.096 2.602-4.8 4.181-7.607 4.181-4.75 0-6.361-4.19-4.112-6.949.49-.602 1.324-1.175 2.617-1.497 2.025-.502 5.247.313 8.266 1.317a16.796 16.796 0 0 0 1.341-3.302H5.781v-.952h4.799V6.975H4.77v-.953h5.81V3.591s0-.409.411-.409h2.347v2.84h5.744v.951h-5.744v1.704h4.69a19.453 19.453 0 0 1-1.986 5.06c1.424.52 2.702 1.011 3.654 1.333m-13.81-2.032c-.596.06-1.71.325-2.321.869-1.83 1.608-.735 4.55 2.968 4.55 2.151 0 4.301-1.388 5.99-3.61-2.403-1.182-4.438-2.028-6.637-1.809"/></svg><figcaption>alipay</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 576 512" fill="currentColor" aria-hidden="true"><path d="M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z"/></svg><figcaption>weixin</figcaption></figure><figure><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M15.607 4.653H8.941L6.645 19.251H1.82L4.862 0h7.995c3.754 0 6.375 2.294 6.473 5.513-.648-.478-2.105-.86-3.722-.86m6.57 5.546c0 3.41-3.01 6.853-6.958 6.853h-2.493L11.595 24H6.74l1.845-11.538h3.592c4.208 0 7.346-3.634 7.153-6.949a5.24 5.24 0 0 1 2.848 4.686M9.653 5.546h6.408c.907 0 1.942.222 2.363.541-.195 2.741-2.655 5.483-6.441 5.483H8.714Z"/></svg><figcaption>paypal</figcaption></figure></div><h2 id="如何在文章中使用"><a href="#如何在文章中使用" class="headerlink" title="如何在文章中使用"></a>如何在文章中使用</h2><p>而在文章正文里（Markdown）使用时，最简单通用的方式依然是直接嵌入 <code>&lt;svg&gt;</code> 代码，把下方对应的 SVG 复制粘贴即可。</p><p>把对应图标的 <code>&lt;svg&gt;</code> 整段贴到 Markdown 里就行，颜色会跟随当前文字色（<code>currentColor</code>），大小可以修改 <code>width</code> &#x2F; <code>height</code>。</p><p><strong>描边风格（Lucide）模板：</strong></p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">svg</span> <span class="attr">xmlns</span>=<span class="string">&quot;http://www.w3.org/2000/svg&quot;</span> <span class="attr">width</span>=<span class="string">&quot;20&quot;</span> <span class="attr">height</span>=<span class="string">&quot;20&quot;</span> <span class="attr">viewBox</span>=<span class="string">&quot;0 0 24 24&quot;</span></span></span><br><span class="line"><span class="tag">     <span class="attr">fill</span>=<span class="string">&quot;none&quot;</span> <span class="attr">stroke</span>=<span class="string">&quot;currentColor&quot;</span> <span class="attr">stroke-width</span>=<span class="string">&quot;1.8&quot;</span></span></span><br><span class="line"><span class="tag">     <span class="attr">stroke-linecap</span>=<span class="string">&quot;round&quot;</span> <span class="attr">stroke-linejoin</span>=<span class="string">&quot;round&quot;</span> <span class="attr">aria-hidden</span>=<span class="string">&quot;true&quot;</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- 把对应图标的 &lt;path&gt;/&lt;circle&gt;/&lt;line&gt; 等子元素粘到这里 --&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">svg</span>&gt;</span></span><br></pre></td></tr></table></figure><p><strong>填充风格（Font Awesome &#x2F; 品牌）模板：</strong></p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">svg</span> <span class="attr">xmlns</span>=<span class="string">&quot;http://www.w3.org/2000/svg&quot;</span> <span class="attr">width</span>=<span class="string">&quot;20&quot;</span> <span class="attr">height</span>=<span class="string">&quot;20&quot;</span> <span class="attr">viewBox</span>=<span class="string">&quot;0 0 24 24&quot;</span></span></span><br><span class="line"><span class="tag">     <span class="attr">fill</span>=<span class="string">&quot;currentColor&quot;</span> <span class="attr">aria-hidden</span>=<span class="string">&quot;true&quot;</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- 品牌或填充风格的 path/circle 等元素 --&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">svg</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="调整尺寸与颜色"><a href="#调整尺寸与颜色" class="headerlink" title="调整尺寸与颜色"></a>调整尺寸与颜色</h2><ul><li><strong>大小</strong>：改 <code>&lt;svg&gt;</code> 的 <code>width</code> &#x2F; <code>height</code>。也可以直接给容器 CSS 设 <code>font-size</code>，配合 <code>width=&quot;1em&quot;</code>&#x2F;<code>height=&quot;1em&quot;</code> 跟随字号缩放。</li><li><strong>颜色</strong>：<code>stroke</code>（描边）和 <code>fill</code>（填充）都设成了 <code>currentColor</code>，会自动跟随当前文字色。想强调时，包一层带 <code>style=&quot;color: var(--green-deep)&quot;</code> 的容器即可。</li><li><strong>行内对齐</strong>：放在行内文字旁会基线偏移，可加 <code>style=&quot;vertical-align: -2px&quot;</code>。</li></ul><h2 id="想要使用更多图标？"><a href="#想要使用更多图标？" class="headerlink" title="想要使用更多图标？"></a>想要使用更多图标？</h2><p>得益于全新的内置 Registry 系统，你现在可以直接在配置文件中引入海量的第三方图标，而无需修改主题源码：</p><ul><li><strong>Lucide 图标</strong>：去 <a href="https://lucide.dev/">Lucide 官网</a> 浏览，直接在配置中填写图标名字（如 <code>bell</code>, <code>settings</code>）。</li><li><strong>Font Awesome 6 图标</strong>：去 <a href="https://fontawesome.com/">Font Awesome Free</a> 检索，加前缀填入配置中即可：<ul><li>品牌图标（Brands）前缀：<code>fa-brands:</code>（如 <code>fa-brands:mastodon</code>）</li><li>实心图标（Solid）前缀：<code>fa-solid:</code>（如 <code>fa-solid:bell</code>）</li><li>常规图标（Regular）前缀：<code>fa-regular:</code>（如 <code>fa-regular:bell</code>）</li></ul></li></ul><p>若想在文章正文（Markdown）中使用更多图标，直接将官网的 SVG 代码复制粘贴进文章中即可。</p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/17/builtin-icons-catalog/</id>
    <link href="https://flatpaper.nep.me/2026/05/17/builtin-icons-catalog/"/>
    <published>2026-05-17T01:00:00.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p><strong>更新版本：v0.3.4 - 2026-06-27</strong></p>
</blockquote>
<p>FlatPaper 主题采用内置的图标 Registry 系统，能够自动根据配置和模板文件<strong>按需提取并打包</strong>页面所用到的 SVG 图标。在 Hexo 生成时，只输出实际用到的 symbol，不加载外部图标 CDN。</p>
<p>对于主题配置（如菜单、个人资料社交链接），你可以使用任何匹配的内置图标（无前缀优先匹配 Lucide，Font Awesome Free 6 使用前缀，如 <code>fa-brands:github</code>、<code>fa-solid:trash-can</code>）。</p>]]>
    </summary>
    <title>FlatPaper 内置图标速查</title>
    <updated>2026-07-01T21:42:49.545Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="写作示例" scheme="https://flatpaper.nep.me/categories/%E5%86%99%E4%BD%9C%E7%A4%BA%E4%BE%8B/"/>
    <content>
      <![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo new <span class="string">&quot;My New Post&quot;</span></span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo server</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo generate</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo deploy</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/17/hello-world/</id>
    <link href="https://flatpaper.nep.me/2026/05/17/hello-world/"/>
    <published>2026-05-16T18:13:38.499Z</published>
    <summary>
      <![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for]]>
    </summary>
    <title>Hello World</title>
    <updated>2026-06-18T03:04:03.382Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="写作示例" scheme="https://flatpaper.nep.me/categories/%E5%86%99%E4%BD%9C%E7%A4%BA%E4%BE%8B/"/>
    <category term="Markdown" scheme="https://flatpaper.nep.me/tags/Markdown/"/>
    <category term="排版" scheme="https://flatpaper.nep.me/tags/%E6%8E%92%E7%89%88/"/>
    <category term="标题" scheme="https://flatpaper.nep.me/tags/%E6%A0%87%E9%A2%98/"/>
    <category term="目录" scheme="https://flatpaper.nep.me/tags/%E7%9B%AE%E5%BD%95/"/>
    <content>
      <![CDATA[<p>这篇文章用于测试 Markdown 多级标题在主题中的显示效果，包括标题字号、间距、锚点、目录生成和标题之间的层级关系。</p><p>FlatPaper 的正文标题样式是刻意收敛的：主题只为正文中的 h2、h3、h4 提供专门视觉层级；h1 保留给文章主标题语义，正文里的 h5、h6 则按更轻量的默认层级呈现，避免长文结构过度复杂。</p><span id="more"></span><h1 id="一级标题：文章内部的大章节"><a href="#一级标题：文章内部的大章节" class="headerlink" title="一级标题：文章内部的大章节"></a>一级标题：文章内部的大章节</h1><p>虽然文章页通常已经有一个页面标题，但正文里仍然可能出现一级标题。主题需要确保它不会和文章主标题混淆。</p><blockquote><p>FlatPaper 主题中的 TOC 不会显示一级标题</p></blockquote><h2 id="二级标题：主要内容分区"><a href="#二级标题：主要内容分区" class="headerlink" title="二级标题：主要内容分区"></a>二级标题：主要内容分区</h2><p>二级标题通常是正文中最常见的结构层级。它适合用来划分文章的主要部分，也经常出现在文章目录中。</p><h3 id="三级标题：分区下的小节"><a href="#三级标题：分区下的小节" class="headerlink" title="三级标题：分区下的小节"></a>三级标题：分区下的小节</h3><p>三级标题用来继续拆分内容。它的视觉层级应该明显低于二级标题，但仍然比普通段落更容易被扫描到。</p><h4 id="四级标题：细节说明"><a href="#四级标题：细节说明" class="headerlink" title="四级标题：细节说明"></a>四级标题：细节说明</h4><p>四级标题适合放在技术文章或教程中，用来解释某个步骤的细节。</p><h5 id="五级标题：补充层级"><a href="#五级标题：补充层级" class="headerlink" title="五级标题：补充层级"></a>五级标题：补充层级</h5><p>五级标题不常用，但主题仍然应该给它一个稳定样式，避免它看起来像普通加粗文本。</p><h6 id="六级标题：最小标题层级"><a href="#六级标题：最小标题层级" class="headerlink" title="六级标题：最小标题层级"></a>六级标题：最小标题层级</h6><p>六级标题是 Markdown 标题层级的最后一级。它适合测试字号、字重和段落间距的下限。</p><h2 id="连续标题测试"><a href="#连续标题测试" class="headerlink" title="连续标题测试"></a>连续标题测试</h2><p>下面故意放置一组连续标题，用来观察标题之间没有正文时的垂直间距。</p><h3 id="连续三级标题"><a href="#连续三级标题" class="headerlink" title="连续三级标题"></a>连续三级标题</h3><h4 id="连续四级标题"><a href="#连续四级标题" class="headerlink" title="连续四级标题"></a>连续四级标题</h4><h5 id="连续五级标题"><a href="#连续五级标题" class="headerlink" title="连续五级标题"></a>连续五级标题</h5><h6 id="连续六级标题"><a href="#连续六级标题" class="headerlink" title="连续六级标题"></a>连续六级标题</h6><p>连续标题不应该挤在一起，也不应该产生过大的空白。</p><h2 id="标题后接列表"><a href="#标题后接列表" class="headerlink" title="标题后接列表"></a>标题后接列表</h2><h3 id="检查项"><a href="#检查项" class="headerlink" title="检查项"></a>检查项</h3><ul><li>标题左侧装饰是否和文本对齐。</li><li>标题换行后是否仍然保持自然行高。</li><li>目录锚点是否能正确跳转。</li><li>移动端标题是否会溢出容器。</li></ul><h2 id="长标题测试：这是一个故意写得很长的二级标题，用来观察标题在文章正文中换行后的行高、间距和装饰元素位置是否仍然合理"><a href="#长标题测试：这是一个故意写得很长的二级标题，用来观察标题在文章正文中换行后的行高、间距和装饰元素位置是否仍然合理" class="headerlink" title="长标题测试：这是一个故意写得很长的二级标题，用来观察标题在文章正文中换行后的行高、间距和装饰元素位置是否仍然合理"></a>长标题测试：这是一个故意写得很长的二级标题，用来观察标题在文章正文中换行后的行高、间距和装饰元素位置是否仍然合理</h2><p>长标题经常出现在教程、复盘和问题记录中。如果标题换行后行距过紧，阅读会变得很累；如果装饰元素位置固定得不合理，也会显得突兀。</p><h3 id="长三级标题测试：当标题继续变长时，主题需要保证内容不会覆盖正文、目录或侧边栏区域"><a href="#长三级标题测试：当标题继续变长时，主题需要保证内容不会覆盖正文、目录或侧边栏区域" class="headerlink" title="长三级标题测试：当标题继续变长时，主题需要保证内容不会覆盖正文、目录或侧边栏区域"></a>长三级标题测试：当标题继续变长时，主题需要保证内容不会覆盖正文、目录或侧边栏区域</h3><p>这段正文用来观察长标题之后的段落起始位置。标题和正文之间应该有清晰但不过度的距离。</p><h2 id="标题后接代码块"><a href="#标题后接代码块" class="headerlink" title="标题后接代码块"></a>标题后接代码块</h2><h3 id="示例代码"><a href="#示例代码" class="headerlink" title="示例代码"></a>示例代码</h3><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">headingLevel</span>(<span class="params">markdownLine</span>) &#123;</span><br><span class="line">  <span class="keyword">const</span> match = markdownLine.<span class="title function_">match</span>(<span class="regexp">/^(#&#123;1,6&#125;)\s+/</span>);</span><br><span class="line">  <span class="keyword">return</span> match ? match[<span class="number">1</span>].<span class="property">length</span> : <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="标题后接引用"><a href="#标题后接引用" class="headerlink" title="标题后接引用"></a>标题后接引用</h2><h3 id="引用示例"><a href="#引用示例" class="headerlink" title="引用示例"></a>引用示例</h3><blockquote><p>标题负责组织结构，段落负责承载内容。好的主题应该让这两者各自清楚。</p></blockquote><h2 id="结尾"><a href="#结尾" class="headerlink" title="结尾"></a>结尾</h2><p>这篇文章适合用来检查文章页目录、标题锚点、正文层级和移动端换行。如果这些层级都清晰，长文阅读体验会更可靠。</p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/16/multi-level-headings-showcase/</id>
    <link href="https://flatpaper.nep.me/2026/05/16/multi-level-headings-showcase/"/>
    <published>2026-05-16T03:40:00.000Z</published>
    <summary>
      <![CDATA[<p>这篇文章用于测试 Markdown 多级标题在主题中的显示效果，包括标题字号、间距、锚点、目录生成和标题之间的层级关系。</p>
<p>FlatPaper 的正文标题样式是刻意收敛的：主题只为正文中的 h2、h3、h4 提供专门视觉层级；h1 保留给文章主标题语义，正文里的 h5、h6 则按更轻量的默认层级呈现，避免长文结构过度复杂。</p>]]>
    </summary>
    <title>多级标题测试：从一级标题到六级标题</title>
    <updated>2026-05-17T13:01:02.159Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="写作示例" scheme="https://flatpaper.nep.me/categories/%E5%86%99%E4%BD%9C%E7%A4%BA%E4%BE%8B/"/>
    <category term="外链" scheme="https://flatpaper.nep.me/tags/%E5%A4%96%E9%93%BE/"/>
    <category term="脚注" scheme="https://flatpaper.nep.me/tags/%E8%84%9A%E6%B3%A8/"/>
    <category term="Markdown" scheme="https://flatpaper.nep.me/tags/Markdown/"/>
    <category term="引用" scheme="https://flatpaper.nep.me/tags/%E5%BC%95%E7%94%A8/"/>
    <content>
      <![CDATA[<p>这篇文章用于测试外部链接、长链接换行、脚注、引用来源和链接密集段落的排版效果。真实博客里经常会引用文档、工具、文章和规范，主题需要让这些链接清晰可见，但不能打断阅读节奏。</p><span id="more"></span><h2 id="普通外链"><a href="#普通外链" class="headerlink" title="普通外链"></a>普通外链</h2><p>Hexo 的官方文档可以从 <a href="https://hexo.io/docs/">Hexo Documentation</a> 开始阅读。Markdown 基础语法可以参考 <a href="https://spec.commonmark.org/">CommonMark Spec</a>，前端兼容性问题常常会查阅 <a href="https://developer.mozilla.org/">MDN Web Docs</a>。</p><p>这些链接都在正文段落内，适合观察链接颜色、下划线、悬停状态和外链打开行为。</p><h2 id="长-URL-换行"><a href="#长-URL-换行" class="headerlink" title="长 URL 换行"></a>长 URL 换行</h2><p>下面是一条故意保留完整显示的长链接，用于检查正文容器是否会被撑破：</p><p><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_text/Wrapping_breaking_text#breaking_long_words">https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_text/Wrapping_breaking_text#breaking_long_words</a></p><p>还有一条更接近真实搜索和追踪参数的链接：</p><p><a href="https://example.com/articles/theme-preview-checklist?utm_source=demo-blog&utm_medium=markdown&utm_campaign=external-link-test&section=long-url-wrapping-behavior">https://example.com/articles/theme-preview-checklist?utm_source=demo-blog&amp;utm_medium=markdown&amp;utm_campaign=external-link-test&amp;section=long-url-wrapping-behavior</a></p><p>如果主题设置了合适的 <code>overflow-wrap</code> 或 <code>word-break</code>，这些 URL 应该能在窄屏中自然换行。</p><h2 id="链接密集段落"><a href="#链接密集段落" class="headerlink" title="链接密集段落"></a>链接密集段落</h2><p>构建一个 Hexo 主题时，可能会同时参考 <a href="https://hexo.io/docs/variables">Hexo 变量</a>、<a href="https://hexo.io/docs/helpers">辅助函数</a>、<a href="https://hexo.io/docs/themes">主题文档</a> 和 <a href="https://hexo.io/docs/front-matter">Front Matter</a>。链接密集段落适合测试文字颜色是否过重，以及多个链接相邻时是否容易识别。</p><h2 id="脚注"><a href="#脚注" class="headerlink" title="脚注"></a>脚注</h2><p>脚注适合放补充说明，而不是打断正文的解释。比如，文章摘要通常由 <code>excerpt</code> 或 <code>&lt;!-- more --&gt;</code> 控制<sup id="fnref-excerpt"><a href="#fn-excerpt">1</a></sup>；代码高亮则取决于站点配置和渲染器支持<sup id="fnref-highlight"><a href="#fn-highlight">2</a></sup>。</p><p>在中文文章中，脚注标记应该不会让行高变得突兀<sup id="fnref-line-height"><a href="#fn-line-height">3</a></sup>。如果脚注列表出现在文章底部，它需要和正文、上一篇下一篇导航保持清晰间距。</p><h2 id="引用来源"><a href="#引用来源" class="headerlink" title="引用来源"></a>引用来源</h2><blockquote><p>链接本身也是内容的一部分。它提供上下文、来源和继续阅读的路径。</p></blockquote><p>这段引用后面接一个来源链接：<a href="https://developer.mozilla.org/en-US/docs/Learn/Accessibility">阅读更多关于网页可访问性的内容</a>。</p><h2 id="混合列表"><a href="#混合列表" class="headerlink" title="混合列表"></a>混合列表</h2><ul><li>官方文档：<a href="https://hexo.io/docs/">Hexo</a></li><li>Markdown 规范：<a href="https://spec.commonmark.org/">CommonMark</a></li><li>CSS 换行参考：<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_text/Wrapping_breaking_text">Wrapping and breaking text</a></li><li>示例长域名：<a href="https://very-long-subdomain-name.example.com/path/to/a/very/deep/article/with/many/segments">https://very-long-subdomain-name.example.com/path/to/a/very/deep/article/with/many/segments</a></li></ul><h2 id="结尾"><a href="#结尾" class="headerlink" title="结尾"></a>结尾</h2><p>如果这篇文章在桌面端和移动端都没有横向滚动，并且脚注区域清晰可读，说明主题对外部引用型文章的支持已经比较稳定。</p><section class="footnotes" aria-label="脚注">  <ol>    <li id="fn-excerpt">Hexo 可以通过文章摘要控制首页卡片显示内容，常见做法是在正文中插入 <code>&lt;!-- more --&gt;</code>。<a class="footnote-backref" href="#fnref-excerpt" aria-label="返回正文">↩</a></li>    <li id="fn-highlight">当前站点配置使用 <code>highlight.js</code>。不同渲染器会生成不同的代码块 HTML 结构。<a class="footnote-backref" href="#fnref-highlight" aria-label="返回正文">↩</a></li>    <li id="fn-line-height">脚注标记通常会使用上标样式，行高过紧时容易影响正文阅读。<a class="footnote-backref" href="#fnref-line-height" aria-label="返回正文">↩</a></li>  </ol></section>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/16/external-links-and-footnotes/</id>
    <link href="https://flatpaper.nep.me/2026/05/16/external-links-and-footnotes/"/>
    <published>2026-05-16T03:05:00.000Z</published>
    <summary>
      <![CDATA[<p>这篇文章用于测试外部链接、长链接换行、脚注、引用来源和链接密集段落的排版效果。真实博客里经常会引用文档、工具、文章和规范，主题需要让这些链接清晰可见，但不能打断阅读节奏。</p>]]>
    </summary>
    <title>外链与脚注测试：链接样式、长 URL 与引用来源</title>
    <updated>2026-05-16T18:13:38.499Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="写作示例" scheme="https://flatpaper.nep.me/categories/%E5%86%99%E4%BD%9C%E7%A4%BA%E4%BE%8B/"/>
    <category term="Hexo" scheme="https://flatpaper.nep.me/tags/Hexo/"/>
    <category term="写作技巧" scheme="https://flatpaper.nep.me/tags/%E5%86%99%E4%BD%9C%E6%8A%80%E5%B7%A7/"/>
    <content>
      <![CDATA[<p>如果你写过 VitePress 或者 Docusaurus，应该对 <code>::: warning</code> 这种容器语法很熟。FlatPaper 主题现在同时支持这种写法 —— 你不再需要 <code>note</code> 标签和对应的 <code>endnote</code> 两端围起来，直接用 <code>:::</code> 开合即可。两种语法可以在同一篇文章里混用，老文章不受影响。</p><span id="more"></span><h2 id="1-基本写法"><a href="#1-基本写法" class="headerlink" title="1. 基本写法"></a>1. 基本写法</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">::: success</span><br><span class="line">一个 Success 提示</span><br><span class="line">:::</span><br></pre></td></tr></table></figure><p>效果：</p><div class="flatpaper-note flatpaper-note--success"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Success 提示</p></div></div><p>可以理解为 <code>:::</code> 是 <code>note</code> 标签的语法糖，两者<strong>完全等价</strong> —— 渲染出来的 DOM、折叠行为、样式都一模一样，只是更轻、更接近通用 markdown 习惯。</p><h2 id="2-折叠提示"><a href="#2-折叠提示" class="headerlink" title="2. 折叠提示"></a>2. 折叠提示</h2><p>只要在类型后跟标题，就会自动渲染为可折叠的 <code>&lt;details&gt;</code>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">::: warning 点我展开</span><br><span class="line">这里是被折叠的内容。</span><br><span class="line">:::</span><br></pre></td></tr></table></figure><details class="flatpaper-note flatpaper-note--warning"><summary class="flatpaper-note__title"><span class="flatpaper-note__icon" aria-hidden="true"></span><span class="flatpaper-note__label">点我展开</span><span class="flatpaper-note__chevron" aria-hidden="true"></span></summary><div class="flatpaper-note__body"><p>这里是被折叠的内容。</p></div></details><h2 id="3-支持的全部类型"><a href="#3-支持的全部类型" class="headerlink" title="3. 支持的全部类型"></a>3. 支持的全部类型</h2><p>和 <code>note</code> 标签共用同一套类型常量，一共 6 种：</p><div class="flatpaper-note flatpaper-note--default"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Default 提示</p></div></div><div class="flatpaper-note flatpaper-note--primary"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Primary 提示</p></div></div><div class="flatpaper-note flatpaper-note--success"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Success 提示</p></div></div><div class="flatpaper-note flatpaper-note--info"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Info 提示</p></div></div><div class="flatpaper-note flatpaper-note--warning"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Warning 提示</p></div></div><div class="flatpaper-note flatpaper-note--danger"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Danger 提示</p></div></div><p>对应代码：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">::: default</span><br><span class="line">一个 Default 提示</span><br><span class="line">:::</span><br><span class="line"></span><br><span class="line">::: primary</span><br><span class="line">一个 Primary 提示</span><br><span class="line">:::</span><br><span class="line"></span><br><span class="line">::: success</span><br><span class="line">一个 Success 提示</span><br><span class="line">:::</span><br><span class="line"></span><br><span class="line">::: info</span><br><span class="line">一个 Info 提示</span><br><span class="line">:::</span><br><span class="line"></span><br><span class="line">::: warning</span><br><span class="line">一个 Warning 提示</span><br><span class="line">:::</span><br><span class="line"></span><br><span class="line">::: danger</span><br><span class="line">一个 Danger 提示</span><br><span class="line">:::</span><br></pre></td></tr></table></figure><h2 id="4-与-note-标签的关系"><a href="#4-与-note-标签的关系" class="headerlink" title="4. 与 note 标签的关系"></a>4. 与 <code>note</code> 标签的关系</h2><table><thead><tr><th>维度</th><th><code>note</code> 标签</th><th><code>:::</code></th></tr></thead><tbody><tr><td>语法风格</td><td>Hexo &#x2F; Nunjucks 标签</td><td>通用 markdown 容器扩展（VitePress 派）</td></tr><tr><td>类型集合</td><td><code>default / primary / success / info / warning / danger</code></td><td>同左</td></tr><tr><td>折叠语义</td><td>跟在类型后写标题即折叠</td><td>同左</td></tr><tr><td>嵌套</td><td>不支持</td><td>不支持</td></tr><tr><td>代码块中出现</td><td>会被当成普通文本</td><td>同左（fenced &#x2F; indented 代码内安全）</td></tr><tr><td>编辑器预览</td><td>Typora 等看到的是裸 Nunjucks</td><td>标准 markdown 容器，预览更友好</td></tr></tbody></table><p>主题在 <code>before_post_render</code> 阶段把 <code>:::</code> 改写成等价的 <code>note</code> 标签，再交给 Hexo 后续流程处理。所以<strong>所有现有的 <code>note</code> 标签文章不需要改动，新写的可以选用更轻的 <code>:::</code></strong>。</p><h2 id="5-边界注意"><a href="#5-边界注意" class="headerlink" title="5. 边界注意"></a>5. 边界注意</h2><ul><li><code>:::</code> 开合两行必须各自独占一行，前后建议留空行（和 VitePress 行为一致）</li><li>类型名错拼（如 <code>::: succes</code>）不会被识别，会原样输出 <code>:::</code></li><li>不支持嵌套 —— 如果需要在 note 里再放 note，请直接用一层</li><li>代码块内的 <code>:::</code>（不管是 &#96;&#96;&#96; 还是 ~~~ 还是 4 空格缩进）都会被完整保留，不会误触发改写</li></ul>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/16/note-container-syntax/</id>
    <link href="https://flatpaper.nep.me/2026/05/16/note-container-syntax/"/>
    <published>2026-05-16T03:00:00.000Z</published>
    <summary>
      <![CDATA[<p>如果你写过 VitePress 或者 Docusaurus，应该对 <code>::: warning</code> 这种容器语法很熟。FlatPaper 主题现在同时支持这种写法 —— 你不再需要 <code>note</code> 标签和对应的 <code>endnote</code> 两端围起来，直接用 <code>:::</code> 开合即可。两种语法可以在同一篇文章里混用，老文章不受影响。</p>]]>
    </summary>
    <title>用 VitePress 风格的 note 容器语法</title>
    <updated>2026-06-17T05:58:33.512Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="图片排版" scheme="https://flatpaper.nep.me/categories/%E5%9B%BE%E7%89%87%E6%8E%92%E7%89%88/"/>
    <category term="图片" scheme="https://flatpaper.nep.me/tags/%E5%9B%BE%E7%89%87/"/>
    <category term="图文排版" scheme="https://flatpaper.nep.me/tags/%E5%9B%BE%E6%96%87%E6%8E%92%E7%89%88/"/>
    <category term="预览" scheme="https://flatpaper.nep.me/tags/%E9%A2%84%E8%A7%88/"/>
    <content>
      <![CDATA[<p>这篇文章用于测试主题在多张图片场景下的展示效果，包括单图、连续图片、图注、横向排布和图片之间的段落间距。</p><span id="more"></span><h2 id="单张大图"><a href="#单张大图" class="headerlink" title="单张大图"></a>单张大图</h2><p><img src="/images/preview-gallery/morning-desk.svg" alt="晨间书桌"></p><p><em>图 1：用于观察正文区域中的单张大图宽度、圆角、边距和上下留白。</em></p><h2 id="连续图片"><a href="#连续图片" class="headerlink" title="连续图片"></a>连续图片</h2><p>下面两张图片连续出现，适合检查图片之间的垂直间距是否过密，或者是否和普通段落之间产生不自然的断层。</p><p><img src="/images/preview-gallery/city-window.svg" alt="城市窗景"></p><p><img src="/images/preview-gallery/paper-notes.svg" alt="纸张笔记"></p><p>连续图片在移动端尤其容易暴露问题：如果图片宽度、容器边距和正文行宽不一致，页面会显得很松散。</p><h2 id="图文混排"><a href="#图文混排" class="headerlink" title="图文混排"></a>图文混排</h2><figure>  <img src="/images/preview-gallery/reading-corner.svg" alt="阅读角落">  <figcaption>图 2：HTML figure 写法，用于测试主题是否给 figcaption 留出合适的文字样式。</figcaption></figure><p>图片之后的正文应该自然回到文章节奏中。图注颜色可以更轻，但不能低到难以阅读。</p><h2 id="双图预览"><a href="#双图预览" class="headerlink" title="双图预览"></a>双图预览</h2><div class="gallery-preview-row">  <figure>    <img src="/images/preview-gallery/river-walk.svg" alt="河岸散步">    <figcaption>河岸散步</figcaption>  </figure>  <figure>    <img src="/images/preview-gallery/morning-desk.svg" alt="晨间书桌">    <figcaption>晨间书桌</figcaption>  </figure></div><p>如果主题没有专门处理 <code>.gallery-preview-row</code>，这段 HTML 仍然可以作为普通块级内容显示；后续也可以给它添加响应式双列样式。</p><h2 id="长段落后的图片"><a href="#长段落后的图片" class="headerlink" title="长段落后的图片"></a>长段落后的图片</h2><p>为了模拟真实写作，这里放一段较长的文字。很多文章不会只连续放图，而是在说明、观察和图片之间来回切换。主题需要保证图片不会抢占全部视觉重心，也不能被正文压得像附件。图片是内容的一部分，它和文字应该保持同一套排版秩序。</p><p><img src="/images/preview-gallery/river-walk.svg" alt="河岸散步"></p><p>这张图放在长段落之后，用于检查段落结束到图片开始之间的距离是否自然。</p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/16/image-gallery-preview/</id>
    <link href="https://flatpaper.nep.me/2026/05/16/image-gallery-preview/"/>
    <published>2026-05-16T02:10:00.000Z</published>
    <summary>
      <![CDATA[<p>这篇文章用于测试主题在多张图片场景下的展示效果，包括单图、连续图片、图注、横向排布和图片之间的段落间距。</p>]]>
    </summary>
    <title>图片排版预览：多图、图注与长图测试</title>
    <updated>2026-06-24T12:22:18.848Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="写作示例" scheme="https://flatpaper.nep.me/categories/%E5%86%99%E4%BD%9C%E7%A4%BA%E4%BE%8B/"/>
    <category term="代码块" scheme="https://flatpaper.nep.me/tags/%E4%BB%A3%E7%A0%81%E5%9D%97/"/>
    <category term="高亮" scheme="https://flatpaper.nep.me/tags/%E9%AB%98%E4%BA%AE/"/>
    <category term="JavaScript" scheme="https://flatpaper.nep.me/tags/JavaScript/"/>
    <category term="Python" scheme="https://flatpaper.nep.me/tags/Python/"/>
    <category term="CSS" scheme="https://flatpaper.nep.me/tags/CSS/"/>
    <content>
      <![CDATA[<p>这篇文章用于测试主题在不同代码语言下的高亮、行距、横向滚动和暗色背景表现。它包含前端、后端、配置文件、命令行和数据库查询等常见代码块。</p><span id="more"></span><h2 id="JavaScript"><a href="#JavaScript" class="headerlink" title="JavaScript"></a>JavaScript</h2><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> posts = [</span><br><span class="line">  &#123; <span class="attr">title</span>: <span class="string">&#x27;主题开发记录&#x27;</span>, <span class="attr">category</span>: <span class="string">&#x27;开发日志&#x27;</span> &#125;,</span><br><span class="line">  &#123; <span class="attr">title</span>: <span class="string">&#x27;Markdown 元素展示&#x27;</span>, <span class="attr">category</span>: <span class="string">&#x27;写作示例&#x27;</span> &#125;,</span><br><span class="line">  &#123; <span class="attr">title</span>: <span class="string">&#x27;周末散步记录&#x27;</span>, <span class="attr">category</span>: <span class="string">&#x27;生活&#x27;</span> &#125;</span><br><span class="line">];</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> grouped = posts.<span class="title function_">reduce</span>(<span class="function">(<span class="params">result, post</span>) =&gt;</span> &#123;</span><br><span class="line">  result[post.<span class="property">category</span>] ||= [];</span><br><span class="line">  result[post.<span class="property">category</span>].<span class="title function_">push</span>(post);</span><br><span class="line">  <span class="keyword">return</span> result;</span><br><span class="line">&#125;, &#123;&#125;);</span><br><span class="line"></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(grouped);</span><br></pre></td></tr></table></figure><h2 id="TypeScript"><a href="#TypeScript" class="headerlink" title="TypeScript"></a>TypeScript</h2><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> <span class="title class_">PostMeta</span> = &#123;</span><br><span class="line">  <span class="attr">title</span>: <span class="built_in">string</span>;</span><br><span class="line">  <span class="attr">date</span>: <span class="built_in">string</span>;</span><br><span class="line">  <span class="attr">tags</span>: <span class="built_in">string</span>[];</span><br><span class="line">  <span class="attr">draft</span>?: <span class="built_in">boolean</span>;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">isPublished</span>(<span class="params"><span class="attr">post</span>: <span class="title class_">PostMeta</span></span>): <span class="built_in">boolean</span> &#123;</span><br><span class="line">  <span class="keyword">return</span> post.<span class="property">draft</span> !== <span class="literal">true</span> &amp;&amp; <span class="title class_">Boolean</span>(post.<span class="property">title</span>.<span class="title function_">trim</span>());</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Python"><a href="#Python" class="headerlink" title="Python"></a>Python</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> pathlib <span class="keyword">import</span> Path</span><br><span class="line"></span><br><span class="line">posts_dir = Path(<span class="string">&quot;source/_posts&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> path <span class="keyword">in</span> posts_dir.glob(<span class="string">&quot;*.md&quot;</span>):</span><br><span class="line">    title = path.stem.replace(<span class="string">&quot;-&quot;</span>, <span class="string">&quot; &quot;</span>).title()</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">f&quot;<span class="subst">&#123;title&#125;</span>: <span class="subst">&#123;path.stat().st_size&#125;</span> bytes&quot;</span>)</span><br></pre></td></tr></table></figure><h2 id="HTML"><a href="#HTML" class="headerlink" title="HTML"></a>HTML</h2><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">article</span> <span class="attr">class</span>=<span class="string">&quot;post-card&quot;</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">h2</span>&gt;</span><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&quot;/posts/theme-layout-checklist/&quot;</span>&gt;</span>FlatPaper 主题页面检查清单<span class="tag">&lt;/<span class="name">a</span>&gt;</span><span class="tag">&lt;/<span class="name">h2</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">p</span>&gt;</span>用于检查首页卡片、文章详情、归档、分类和标签页的基础展示效果。<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">article</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="CSS"><a href="#CSS" class="headerlink" title="CSS"></a>CSS</h2><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-class">.post-card</span> &#123;</span><br><span class="line">  <span class="attribute">display</span>: grid;</span><br><span class="line">  <span class="attribute">grid-template-columns</span>: <span class="built_in">minmax</span>(<span class="number">120px</span>, <span class="number">180px</span>) <span class="number">1</span>fr;</span><br><span class="line">  <span class="attribute">gap</span>: <span class="number">24px</span>;</span><br><span class="line">  <span class="attribute">padding</span>: <span class="number">24px</span>;</span><br><span class="line">  <span class="attribute">border-radius</span>: <span class="number">8px</span>;</span><br><span class="line">  <span class="attribute">background</span>: <span class="number">#fffdf7</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.post-card</span> <span class="selector-tag">h2</span> &#123;</span><br><span class="line">  <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">8px</span>;</span><br><span class="line">  <span class="attribute">font-size</span>: <span class="number">1.25rem</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Shell"><a href="#Shell" class="headerlink" title="Shell"></a>Shell</h2><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/sh</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -eu</span><br><span class="line"></span><br><span class="line">POST_DIR=<span class="string">&quot;source/_posts&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> file <span class="keyword">in</span> <span class="string">&quot;<span class="variable">$POST_DIR</span>&quot;</span>/*.md; <span class="keyword">do</span></span><br><span class="line">  <span class="built_in">printf</span> <span class="string">&#x27;Checking %s\n&#x27;</span> <span class="string">&quot;<span class="variable">$file</span>&quot;</span></span><br><span class="line"><span class="keyword">done</span></span><br></pre></td></tr></table></figure><h2 id="Bash"><a href="#Bash" class="headerlink" title="Bash"></a>Bash</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/usr/bin/env bash</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -euo pipefail</span><br><span class="line"></span><br><span class="line">posts_dir=<span class="string">&quot;source/_posts&quot;</span></span><br><span class="line">latest_post=<span class="string">&quot;<span class="subst">$(find <span class="string">&quot;<span class="variable">$posts_dir</span>&quot;</span> -name &#x27;*.md&#x27; -print | sort | tail -n 1)</span>&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;Latest post file: <span class="variable">$&#123;latest_post&#125;</span>&quot;</span></span><br><span class="line">pnpm build</span><br></pre></td></tr></table></figure><h2 id="C"><a href="#C" class="headerlink" title="C"></a>C</h2><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">(<span class="type">void</span>)</span> &#123;</span><br><span class="line">    <span class="type">const</span> <span class="type">char</span> *title = <span class="string">&quot;FlatPaper theme test&quot;</span>;</span><br><span class="line">    <span class="type">size_t</span> length = <span class="built_in">strlen</span>(title);</span><br><span class="line"></span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Post title: %s\n&quot;</span>, title);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Title length: %zu\n&quot;</span>, length);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="PowerShell"><a href="#PowerShell" class="headerlink" title="PowerShell"></a>PowerShell</h2><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Get-ChildItem</span> source\_posts <span class="literal">-Filter</span> *.md |</span><br><span class="line">  <span class="built_in">Sort-Object</span> LastWriteTime <span class="literal">-Descending</span> |</span><br><span class="line">  <span class="built_in">Select-Object</span> Name, Length, LastWriteTime</span><br></pre></td></tr></table></figure><h2 id="JSON"><a href="#JSON" class="headerlink" title="JSON"></a>JSON</h2><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;flatpaper&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;version&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1.0.0&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;features&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;archives&quot;</span><span class="punctuation">,</span> <span class="string">&quot;categories&quot;</span><span class="punctuation">,</span> <span class="string">&quot;tags&quot;</span><span class="punctuation">,</span> <span class="string">&quot;code-highlight&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;theme&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;excerpt_length&quot;</span><span class="punctuation">:</span> <span class="number">96</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;recent_posts&quot;</span><span class="punctuation">:</span> <span class="number">3</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="YAML"><a href="#YAML" class="headerlink" title="YAML"></a>YAML</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">title:</span> <span class="string">多语言代码示例</span></span><br><span class="line"><span class="attr">date:</span> <span class="number">2026-05-16 10:20:00</span></span><br><span class="line"><span class="attr">categories:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">写作示例</span></span><br><span class="line"><span class="attr">tags:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">代码块</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">高亮</span></span><br></pre></td></tr></table></figure><h2 id="SQL"><a href="#SQL" class="headerlink" title="SQL"></a>SQL</h2><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">select</span></span><br><span class="line">  category,</span><br><span class="line">  <span class="built_in">count</span>(<span class="operator">*</span>) <span class="keyword">as</span> post_count,</span><br><span class="line">  <span class="built_in">max</span>(published_at) <span class="keyword">as</span> latest_post</span><br><span class="line"><span class="keyword">from</span> posts</span><br><span class="line"><span class="keyword">where</span> draft <span class="operator">=</span> <span class="literal">false</span></span><br><span class="line"><span class="keyword">group</span> <span class="keyword">by</span> category</span><br><span class="line"><span class="keyword">order</span> <span class="keyword">by</span> latest_post <span class="keyword">desc</span>;</span><br></pre></td></tr></table></figure><h2 id="EJS"><a href="#EJS" class="headerlink" title="EJS"></a>EJS</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">&lt;% posts.forEach(function(post) &#123; %&gt;</span><br><span class="line">  &lt;article class=&quot;archive-item&quot;&gt;</span><br><span class="line">    &lt;time&gt;&lt;%= date(post.date, &#x27;YYYY-MM-DD&#x27;) %&gt;&lt;/time&gt;</span><br><span class="line">    &lt;a href=&quot;&lt;%- url_for(post.path) %&gt;&quot;&gt;&lt;%= post.title %&gt;&lt;/a&gt;</span><br><span class="line">  &lt;/article&gt;</span><br><span class="line">&lt;% &#125;) %&gt;</span><br></pre></td></tr></table></figure><h2 id="长行测试"><a href="#长行测试" class="headerlink" title="长行测试"></a>长行测试</h2><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">这是一行很长的文本，用来检查代码块在窄屏下是否会正确横向滚动，而不是撑破文章容器或者覆盖侧边栏内容。</span><br></pre></td></tr></table></figure><p>如果这些代码块在文章详情页里都能保持可读，说明主题的代码高亮基础样式已经比较稳定。</p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/16/multi-language-code-samples/</id>
    <link href="https://flatpaper.nep.me/2026/05/16/multi-language-code-samples/"/>
    <published>2026-05-16T01:20:00.000Z</published>
    <summary>
      <![CDATA[<p>这篇文章用于测试主题在不同代码语言下的高亮、行距、横向滚动和暗色背景表现。它包含前端、后端、配置文件、命令行和数据库查询等常见代码块。</p>]]>
    </summary>
    <title>多语言代码示例：用于测试代码高亮</title>
    <updated>2026-05-16T18:13:38.500Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="写作示例" scheme="https://flatpaper.nep.me/categories/%E5%86%99%E4%BD%9C%E7%A4%BA%E4%BE%8B/"/>
    <category term="Hexo" scheme="https://flatpaper.nep.me/tags/Hexo/"/>
    <content>
      <![CDATA[<p>在 Hexo 中可以插入一些很酷的提示块，效果如下：</p><h2 id="1-基本语法"><a href="#1-基本语法" class="headerlink" title="1. 基本语法"></a>1. 基本语法</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt;Markdown 的引用块样式</span><br></pre></td></tr></table></figure><blockquote><p>Markdown 的引用块样式</p></blockquote><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note success %&#125;</span><br><span class="line">一个 Success 提示</span><br><span class="line">&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><div class="flatpaper-note flatpaper-note--success"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Success 提示</p></div></div><span id="more"></span><p>提示块可以实现折叠   </p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note success 一个折叠的提示 %&#125;</span><br><span class="line">一个折叠的 Success 提示</span><br><span class="line">&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><details class="flatpaper-note flatpaper-note--success"><summary class="flatpaper-note__title"><span class="flatpaper-note__icon" aria-hidden="true"></span><span class="flatpaper-note__label">一个折叠的提示</span><span class="flatpaper-note__chevron" aria-hidden="true"></span></summary><div class="flatpaper-note__body"><p>一个折叠的 Success 提示</p></div></details><blockquote><p>引用内容预览</p></blockquote><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt;引用内容预览</span><br></pre></td></tr></table></figure><h2 id="2-更多风格"><a href="#2-更多风格" class="headerlink" title="2. 更多风格"></a>2. 更多风格</h2><p>下面是全部支持的样式</p><div class="flatpaper-note flatpaper-note--default"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Default 提示</p></div></div><div class="flatpaper-note flatpaper-note--primary"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Primary 提示</p></div></div><div class="flatpaper-note flatpaper-note--success"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Success 提示</p></div></div><div class="flatpaper-note flatpaper-note--info"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Info 提示</p></div></div><div class="flatpaper-note flatpaper-note--warning"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Warning 提示</p></div></div><div class="flatpaper-note flatpaper-note--danger"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Danger 提示</p></div></div><p>对应的代码</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note default %&#125;</span><br><span class="line">一个 default 提示</span><br><span class="line">&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% note primary %&#125;</span><br><span class="line">一个 primary 提示</span><br><span class="line">&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% note success %&#125;</span><br><span class="line">一个 success 提示</span><br><span class="line">&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% note info %&#125;</span><br><span class="line">一个 info 提示</span><br><span class="line">&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% note warning %&#125;</span><br><span class="line">一个 warning 提示</span><br><span class="line">&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% note danger %&#125;</span><br><span class="line">一个 danger 提示</span><br><span class="line">&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><h2 id="3-支持四种样式"><a href="#3-支持四种样式" class="headerlink" title="3. 支持四种样式"></a>3. 支持四种样式</h2><p>当前使用的 <code>flat</code> 的风格 </p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Note tag (bootstrap callout)</span></span><br><span class="line"><span class="attr">note:</span></span><br><span class="line">  <span class="comment"># Note tag style values:</span></span><br><span class="line">  <span class="comment">#  - simple    bootstrap callout old alert style. Default.</span></span><br><span class="line">  <span class="comment">#  - modern    bootstrap callout new (v2-v3) alert style.</span></span><br><span class="line">  <span class="comment">#  - flat      flat callout style with background, like on Mozilla or StackOverflow.</span></span><br><span class="line">  <span class="comment">#  - disabled  disable all CSS styles import of note tag.</span></span><br><span class="line">  <span class="attr">style:</span> <span class="string">flat</span></span><br><span class="line">  <span class="attr">icons:</span> <span class="literal">false</span></span><br><span class="line">  <span class="comment"># Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6).</span></span><br><span class="line">  <span class="comment"># Offset also applied to label tag variables. This option can work with disabled note tag.</span></span><br><span class="line">  <span class="attr">light_bg_offset:</span> <span class="number">0</span></span><br></pre></td></tr></table></figure><h2 id="4-使用-Tabs-标签"><a href="#4-使用-Tabs-标签" class="headerlink" title="4. 使用 Tabs 标签"></a>4. 使用 Tabs 标签</h2><p>还可以在文章内设置选项卡</p><p>每个子标签显示为 <code>标签 + 数字序号</code> ，默认展开第 1 个选项卡，如果是 -1 则只显示标签，不显示内容，点击可以显示内容</p><div class="flatpaper-tabs"><div class="flatpaper-tabs__intro"><p>描述内容： 每个子标签显示为 <code>标签 + 数字序号</code> ，默认展开第 1 个选项卡，如果是 -1 则只显示标签，不显示内容，点击可以显示内容</p></div><div class="flatpaper-tabs__nav" role="tablist"><button type="button" role="tab" id="tabs-1-tab-0" aria-controls="tabs-1-panel-0" aria-selected="true" class="flatpaper-tabs__nav-item is-active" data-index="0">标签 1</button><button type="button" role="tab" id="tabs-1-tab-1" aria-controls="tabs-1-panel-1" aria-selected="false" class="flatpaper-tabs__nav-item" data-index="1">标签 2</button><button type="button" role="tab" id="tabs-1-tab-2" aria-controls="tabs-1-panel-2" aria-selected="false" class="flatpaper-tabs__nav-item" data-index="2">TAB 三</button></div><div class="flatpaper-tabs__panels"><section role="tabpanel" id="tabs-1-panel-0" aria-labelledby="tabs-1-tab-0" class="flatpaper-tabs__panel is-active" data-index="0"><p><strong>选项卡 1</strong></p></section><section role="tabpanel" id="tabs-1-panel-1" aria-labelledby="tabs-1-tab-1" class="flatpaper-tabs__panel" data-index="1" hidden><p><strong>选项卡 2</strong></p></section><section role="tabpanel" id="tabs-1-panel-2" aria-labelledby="tabs-1-tab-2" class="flatpaper-tabs__panel" data-index="2" hidden><p><strong>选项卡 3</strong> 名字为 <code>TAB 三</code></p></section></div></div><p>下面是上面标签的代码</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&#123;% tabs 标签, 1 %&#125; </span><br><span class="line">描述内容： 每个子标签显示为 `标签 + 数字序号` ，默认展开第 1 个选项卡，如果是 -1 则只显示标签，不显示内容，点击可以显示内容</span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line">**选项卡 1** </span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line">**选项卡 2**</span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line">&lt;!-- tab 标签三 --&gt;</span><br><span class="line">**选项卡 3** , 名字为 `TAB三`</span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure><p>第一行 <code>&#123;% tabs 标签, 1 %&#125;</code> 设置每个子标签在不指定标题时显示为 <code>标签 + 数字序号</code><br><code>1</code> 表示默认展开第 1 个选项卡，如果是 <code>-1</code> 则只显示标签标题，隐藏内容，点击可以显示内容</p><h3 id="无描述的-Tabs"><a href="#无描述的-Tabs" class="headerlink" title="无描述的 Tabs"></a>无描述的 Tabs</h3><div class="flatpaper-tabs"><div class="flatpaper-tabs__nav" role="tablist"><button type="button" role="tab" id="tabs-2-tab-0" aria-controls="tabs-2-panel-0" aria-selected="true" class="flatpaper-tabs__nav-item is-active" data-index="0">标签 1</button><button type="button" role="tab" id="tabs-2-tab-1" aria-controls="tabs-2-panel-1" aria-selected="false" class="flatpaper-tabs__nav-item" data-index="1">标签 2</button><button type="button" role="tab" id="tabs-2-tab-2" aria-controls="tabs-2-panel-2" aria-selected="false" class="flatpaper-tabs__nav-item" data-index="2">TAB 三</button></div><div class="flatpaper-tabs__panels"><section role="tabpanel" id="tabs-2-panel-0" aria-labelledby="tabs-2-tab-0" class="flatpaper-tabs__panel is-active" data-index="0"><p><strong>选项卡 1</strong></p></section><section role="tabpanel" id="tabs-2-panel-1" aria-labelledby="tabs-2-tab-1" class="flatpaper-tabs__panel" data-index="1" hidden><p><strong>选项卡 2</strong></p></section><section role="tabpanel" id="tabs-2-panel-2" aria-labelledby="tabs-2-tab-2" class="flatpaper-tabs__panel" data-index="2" hidden><p><strong>选项卡 3</strong> 名字为 <code>TAB 三</code></p></section></div></div><p>\ Awesome! &#x2F;</p><p><strong>Ref:</strong> <a href="https://jinnsjj.github.io/uncategorized/hexo-next-note/">在hexo-NexT中插入note提示块</a></p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/16/hexo-use-note-and-tabs-block/</id>
    <link href="https://flatpaper.nep.me/2026/05/16/hexo-use-note-and-tabs-block/"/>
    <published>2026-05-15T17:17:28.000Z</published>
    <summary>
      <![CDATA[<p>在 Hexo 中可以插入一些很酷的提示块，效果如下：</p>
<h2 id="1-基本语法"><a href="#1-基本语法" class="headerlink" title="1. 基本语法"></a>1. 基本语法</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt;Markdown 的引用块样式</span><br></pre></td></tr></table></figure>

<blockquote>
<p>Markdown 的引用块样式</p>
</blockquote>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note success %&#125;</span><br><span class="line">一个 Success 提示</span><br><span class="line">&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure>

<div class="flatpaper-note flatpaper-note--success"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>一个 Success 提示</p></div></div>]]>
    </summary>
    <title>在 Hexo 中使用 NOTE 提示块</title>
    <updated>2026-06-17T05:56:04.111Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题开发" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91/"/>
    <category term="主题" scheme="https://flatpaper.nep.me/tags/%E4%B8%BB%E9%A2%98/"/>
    <category term="Hexo" scheme="https://flatpaper.nep.me/tags/Hexo/"/>
    <category term="测试" scheme="https://flatpaper.nep.me/tags/%E6%B5%8B%E8%AF%95/"/>
    <content>
      <![CDATA[<p>这篇文章用于快速检查首页卡片、文章详情、归档、分类和标签页的基础展示效果。它刻意包含较短段落、清单和多个二级标题，方便观察排版节奏。</p><span id="more"></span><h2 id="首页卡片"><a href="#首页卡片" class="headerlink" title="首页卡片"></a>首页卡片</h2><p>首页最容易暴露间距问题。卡片标题需要在一行、两行和三行之间保持稳定，摘要截断后也不应该挤压元信息区域。</p><p>测试重点：</p><ul><li>标题字号是否清晰。</li><li>摘要是否在不同长度下自然截断。</li><li>日期、分类和评论数字是否对齐。</li><li>缩略图与正文区域是否有稳定比例。</li></ul><h2 id="文章详情"><a href="#文章详情" class="headerlink" title="文章详情"></a>文章详情</h2><p>详情页需要关注正文可读性。行高、段落间距、标题层级和代码块宽度会直接影响阅读体验。</p><blockquote><p>一个主题的精致感，通常来自大量不显眼的小距离。</p></blockquote><h2 id="分类与标签"><a href="#分类与标签" class="headerlink" title="分类与标签"></a>分类与标签</h2><p>这篇文章归入“主题开发”，并带有多个标签。它适合用来检查分类页、标签页、归档页之间的跳转是否正确。</p><h2 id="结论"><a href="#结论" class="headerlink" title="结论"></a>结论</h2><p>如果这篇文章在首页、文章页和归档页都表现稳定，主题的主要内容流已经具备基本可用性。</p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/10/theme-layout-checklist/</id>
    <link href="https://flatpaper.nep.me/2026/05/10/theme-layout-checklist/"/>
    <published>2026-05-10T00:30:00.000Z</published>
    <summary>
      <![CDATA[<p>这篇文章用于快速检查首页卡片、文章详情、归档、分类和标签页的基础展示效果。它刻意包含较短段落、清单和多个二级标题，方便观察排版节奏。</p>]]>
    </summary>
    <title>FlatPaper 主题页面检查清单</title>
    <updated>2026-05-16T18:13:38.500Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="写作示例" scheme="https://flatpaper.nep.me/categories/%E5%86%99%E4%BD%9C%E7%A4%BA%E4%BE%8B/"/>
    <category term="Markdown" scheme="https://flatpaper.nep.me/tags/Markdown/"/>
    <category term="排版" scheme="https://flatpaper.nep.me/tags/%E6%8E%92%E7%89%88/"/>
    <category term="代码块" scheme="https://flatpaper.nep.me/tags/%E4%BB%A3%E7%A0%81%E5%9D%97/"/>
    <content>
      <![CDATA[<p>这篇文章集中展示 Markdown 常用元素，适合检查主题对正文内容的默认样式支持。</p><span id="more"></span><h2 id="文本样式"><a href="#文本样式" class="headerlink" title="文本样式"></a>文本样式</h2><p>普通段落应该保持轻松的阅读节奏。这里包含 <strong>加粗文字</strong>、<em>强调文字</em>、<code>行内代码</code> 和一个普通链接：<a href="https://hexo.io/">Hexo 官网</a>。</p><h2 id="表格"><a href="#表格" class="headerlink" title="表格"></a>表格</h2><table><thead><tr><th>模块</th><th>检查内容</th><th>期望效果</th></tr></thead><tbody><tr><td>文章标题</td><td>字号、行高、换行</td><td>清晰且不拥挤</td></tr><tr><td>元信息</td><td>日期、分类、标签</td><td>层级低于标题</td></tr><tr><td>正文段落</td><td>行宽、行高、颜色</td><td>长时间阅读不疲劳</td></tr><tr><td>代码块</td><td>横向滚动、背景色</td><td>不破坏页面宽度</td></tr></tbody></table><h2 id="代码块"><a href="#代码块" class="headerlink" title="代码块"></a>代码块</h2><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">createExcerpt</span>(<span class="params">content, limit = <span class="number">96</span></span>) &#123;</span><br><span class="line">  <span class="keyword">const</span> plainText = content.<span class="title function_">replace</span>(<span class="regexp">/&lt;[^&gt;]+&gt;/g</span>, <span class="string">&#x27;&#x27;</span>).<span class="title function_">trim</span>();</span><br><span class="line">  <span class="keyword">return</span> plainText.<span class="property">length</span> &gt; limit</span><br><span class="line">    ? <span class="string">`<span class="subst">$&#123;plainText.slice(<span class="number">0</span>, limit)&#125;</span>...`</span></span><br><span class="line">    : plainText;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-class">.article-content</span> &#123;</span><br><span class="line">  <span class="attribute">line-height</span>: <span class="number">1.82</span>;</span><br><span class="line">  <span class="attribute">word-break</span>: break-word;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="引用"><a href="#引用" class="headerlink" title="引用"></a>引用</h2><blockquote><p>好的内容样式不需要抢走注意力。它只需要让作者的表达更容易被读完。</p></blockquote><h2 id="有序步骤"><a href="#有序步骤" class="headerlink" title="有序步骤"></a>有序步骤</h2><ol><li>准备几篇不同长度的文章。</li><li>运行 Hexo 本地服务。</li><li>在桌面和移动宽度下检查列表与详情页。</li><li>根据真实内容调整间距，而不是只看空白模板。</li></ol>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/09/markdown-elements-showcase/</id>
    <link href="https://flatpaper.nep.me/2026/05/09/markdown-elements-showcase/"/>
    <published>2026-05-09T05:15:00.000Z</published>
    <summary>
      <![CDATA[<p>这篇文章集中展示 Markdown 常用元素，适合检查主题对正文内容的默认样式支持。</p>]]>
    </summary>
    <title>Markdown 元素展示：表格、代码与引用</title>
    <updated>2026-05-16T18:13:38.500Z</updated>
  </entry>
  <entry>
    <author>
      <name>Author</name>
    </author>
    <category term="主题开发" scheme="https://flatpaper.nep.me/categories/%E4%B8%BB%E9%A2%98%E5%BC%80%E5%8F%91/"/>
    <category term="FlatPaper" scheme="https://flatpaper.nep.me/tags/FlatPaper/"/>
    <category term="视觉设计" scheme="https://flatpaper.nep.me/tags/%E8%A7%86%E8%A7%89%E8%AE%BE%E8%AE%A1/"/>
    <category term="阅读体验" scheme="https://flatpaper.nep.me/tags/%E9%98%85%E8%AF%BB%E4%BD%93%E9%AA%8C/"/>
    <content>
      <![CDATA[<p>FlatPaper 的视觉方向适合内容型博客：它不依赖复杂装饰，而是通过纸张、标签、阴影和简化插画营造温和的阅读氛围。</p><span id="more"></span><h2 id="纸感不是拟物"><a href="#纸感不是拟物" class="headerlink" title="纸感不是拟物"></a>纸感不是拟物</h2><p>纸感并不意味着把页面做得像真实纸张。更有效的做法是保留轻微的层次、明确的边界和足够的呼吸空间。</p><p>可观察的细节包括：</p><ul><li>卡片阴影是否足够克制。</li><li>背景色与内容纸面的对比是否柔和。</li><li>边框和胶带元素是否服务于层级，而不是成为噪音。</li></ul><h2 id="留白的作用"><a href="#留白的作用" class="headerlink" title="留白的作用"></a>留白的作用</h2><p>留白不是空出来的地方，而是内容之间的秩序。列表页需要紧凑，文章页需要舒展，侧边栏则需要让信息可以被快速扫读。</p><h2 id="字体层级"><a href="#字体层级" class="headerlink" title="字体层级"></a>字体层级</h2><p>主题测试时可以重点观察三种文字：</p><ul><li>标题：承担识别和导航。</li><li>摘要：帮助判断是否继续阅读。</li><li>元信息：提供辅助信息，不能比正文更抢眼。</li></ul><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>当页面里同时有短标题、长标题、长摘要、代码块和表格时，主题的真实质量会比静态预览图更容易暴露出来。</p>]]>
    </content>
    <id>https://flatpaper.nep.me/2026/05/07/flatpaper-design-notes/</id>
    <link href="https://flatpaper.nep.me/2026/05/07/flatpaper-design-notes/"/>
    <published>2026-05-07T11:40:00.000Z</published>
    <summary>
      <![CDATA[<p>FlatPaper 的视觉方向适合内容型博客：它不依赖复杂装饰，而是通过纸张、标签、阴影和简化插画营造温和的阅读氛围。</p>]]>
    </summary>
    <title>FlatPaper 设计札记：纸感、留白与轻量界面</title>
    <updated>2026-06-17T06:07:11.080Z</updated>
  </entry>
</feed>
