自定义

调色板

通过 themeColor / themeColorLight 覆盖深色或浅色调色板:

blogTheme({
  : {
    : '#fb923c',
    : '#dc2626',
    : '#1a0a00',
    : '#2d1200',
  },
  : {
    : '#c2410c',
    : '#fef9f0',
    : '#fde8c8',
  },
})
ts

未设置的字段保持主题默认。运行时会作为 CSS 自定义属性注入到 [data-theme="dark"] .sp-blog-root[data-theme="light"] .sp-blog-root 作用域。

CSS 自定义属性

所有组件都读取这些变量,你可以在自己的样式里覆盖以做精细调整:

变量用途
--sp-blog-bg页面背景
--sp-blog-surface卡片/侧边栏背景
--sp-blog-border分隔线、卡片边框
--sp-blog-text主文本(标题)
--sp-blog-content正文
--sp-blog-muted元信息文本(日期、计数)
--sp-blog-primary主色(链接、标签、按钮)
--sp-blog-secondary辅色

替换组件

src/routes/ 下的脚手架文件会从 @sveltepress/theme-blog/components/* 导入组件。要替换其中任意一个——比如文章卡片——编辑 src/routes/+page.svelte,换上你自己的组件:

src/routes/+page.svelte
<script lang="ts">
  import  from '$lib/MyGrid.svelte'

  const {  } = ()
</script>

< ={.posts} />
svelte

主题重新导出了以下可复用组件:

  • @sveltepress/theme-blog/PostLayout.svelte
  • @sveltepress/theme-blog/components/MasonryGrid.svelte
  • @sveltepress/theme-blog/components/Timeline.svelte
  • @sveltepress/theme-blog/components/Pagination.svelte
  • @sveltepress/theme-blog/components/Sidebar.svelte
  • @sveltepress/theme-blog/components/SearchModal.svelte
  • @sveltepress/theme-blog/components/ReadingProgress.svelte
  • @sveltepress/theme-blog/components/GiscusComments.svelte
  • @sveltepress/theme-blog/components/RelatedPosts.svelte
  • @sveltepress/theme-blog/components/TaxonomyHeader.svelte

子路径部署

svelte.config.js 读取 BASE_PATH,在 vite.config.ts 读取 SITE_URL

svelte.config.js
export default {
  kit: {
    paths: {
      base: process.env.BASE_PATH ?? '',
      relative: false,
    },
  },
}
js
vite.config.ts
blogTheme({
  : .. ?? 'http://localhost:4173',
  // ...
})
ts

同时设置两个变量进行构建,例如部署到 GitHub Pages 项目站点 user.github.io/repo/blog

BASE_PATH=/repo/blog SITE_URL=https://user.github.io/repo/blog \
  pnpm vite build && pnpm pagefind --site dist
bash

主题组件中的所有内部链接都使用 SvelteKit 的 $app/paths base,因此在子路径下也能正确解析。OG 图片 URL 与 RSS 条目 URL 使用 SITE_URL,确保社交平台爬虫拿到的是完整绝对路径。

增加页面

src/routes/ 下脚手架未占用的一切都是你的。保持 src/routes/+layout.svelte 不动即可让自定义页面自动被 GlobalLayout 包裹——每个路由都会渲染在侧边栏 + 主网格之内。

最后更新于: 2026/04/17 03:36:00