快速开始

5 分钟跑通一个最小示例:写内容 → 准备模板 → 发布前注入。

你需要什么

这个方案不依赖构建器、不依赖运行时。你要做的只是在发布前,把一段固定的 HTML 片段插到每个页面的 </body> 之前

三步走

  1. 写页面内容

    让 AI(或你自己)生成页面,只保留正文部分。不要写 header、侧边栏、footer——这些属于模板。

  2. 准备一份模板

    把站点的标题、导航、页脚写进一个 <template shadowrootmode="open"> 里,中间留一个 <slot> 作为内容投影口。整站只需要这一份。

  3. 发布前注入

    在你的发布流程里,把模板片段插入每个 HTML 的 </body> 之前。手动、脚本、CI 都行。

最小示例

1. 页面文件 about.html

注意:没有 header、没有导航、没有 footer。样式也只为正文服务。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>关于我们</title>
  <style>
    article {
      max-width: 720px;
      margin: 0 auto;
      padding: 40px 24px;
    }
    h1 { font-size: 28px; }
  </style>
</head>
<body>
  <article>
    <h1>关于我们</h1>
    <p>我们是一支专注于静态网站的小团队。</p>
  </article>
</body>
</html>

2. 模板片段 site-template.txt

整站共用一份。<slot> 的位置决定了页面内容出现在哪里。

<template shadowrootmode="open">
  <style>
    :host { display: block; font-family: system-ui, sans-serif; }
    header { padding: 16px 24px; border-bottom: 1px solid #e2e8f0; }
    nav a { margin-right: 16px; }
    footer { padding: 24px; text-align: center; color: #94a3b8; }
  </style>
  <header>我的网站</header>
  <nav>
    <a href="/">首页</a>
    <a href="/about.html">关于</a>
  </nav>
  <slot></slot>
  <footer>© 2026 我的网站</footer>
</template>

3. 注入后的 about.html

就是在 </body> 之前多了一段。页面内容和模板都不用改。

<body>
  <article>
    <h1>关于我们</h1>
    <p>我们是一支专注于静态网站的小团队。</p>
  </article>

  <!-- 注入的模板 -->
  <template shadowrootmode="open"></template>
</body>

验证一下

用浏览器打开这个文件,你会看到:

独立打开也没问题。注入前,每个页面都是一个完整、能直接阅读的 HTML;注入后,它自动获得站点级的布局与风格。两种状态都不冲突。

什么时候注入?

任何"文件将要被发布出去"的时刻都可以:

具体写法见 如何注入

常见疑问

浏览器兼容性如何?

声明式 Shadow DOM(shadowrootmode 属性)在 Chrome / Edge 111+、Safari 16.4+、Firefox 123+ 均已支持。旧浏览器会忽略 <template>,页面仍能显示内容,只是没有站点布局。

会不会影响 SEO?

不会。页面内容和模板都在同一个 HTML 文档里,爬虫能看到全部内容。这也是它比 iframe 更适合静态站的原因。

样式真的不会互相污染吗?

是的,双向隔离。唯一会穿透的是可继承属性(如 colorfont-family)和 CSS 自定义属性。详见 核心概念