@canofold/themes

中文文档
0.8.3发布于 2026/10/21MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 1960

卡诺福德主题合同和官方视觉主题.

中文使用文档
文档目录3 节
  1. 官方主题
  2. 开发第三方主题包
  3. CSS 职责契约

@canofold/themes

English

Canofold 的主题契约与官方视觉主题包。主题负责本地化名称、视觉变量、主题专属样式和可选择外观;Canofold Core 负责布局、交互、无障碍、持久化和构建时 CSS 装配。

官方主题

import {
  bauhaus,
  canofold,
  cyberChinese,
  dopamineDesign,
  glassmorphism,
  handDrawnDoodle,
  memphis,
  minimalistFlat,
  neoBrutalist,
  neumorphism,
  outrun,
  pixelAnime,
  sketchStyle,
  shoujoManga
} from '@canofold/themes'

canofold 包含浅色与深色两个外观,其余官方主题各包含一个固定外观。站点只启用导入并放进 themes 的定义;Core 不维护主题注册表。

导出名主题 ID外观
canofoldcanofold浅色、深色
glassmorphismglassmorphism深色
sketchStylesketch-style浅色
handDrawnDoodlehand-drawn-doodle浅色
minimalistFlatminimalist-flat浅色
bauhausbauhaus浅色
neoBrutalistneo-brutalist浅色
neumorphismneumorphism浅色
memphismemphis浅色
cyberChinesecyber-chinese深色
pixelAnimepixel-anime深色
dopamineDesigndopamine-design浅色
shoujoMangashoujo-manga浅色
outrunoutrun深色

开发第三方主题包

第三方主题包把 @canofold/themes 声明为 peer dependency,并分别导出主题定义与 CSS。最小包结构如下:

{
  "name": "@acme/canofold-theme",
  "type": "module",
  "exports": {
    ".": {
      "types": "./index.d.ts",
      "import": "./index.js"
    },
    "./aurora.css": "./aurora.css"
  },
  "peerDependencies": {
    "@canofold/themes": "^0.6.0"
  }
}

包入口导出一份通过 defineTheme 创建的定义:

import { defineTheme } from '@canofold/themes'

export default defineTheme({
  id: 'aurora',
  name: { zh: '极光', en: 'Aurora' },
  styles: ['@acme/canofold-theme/aurora.css'],
  appearances: [
    {
      id: 'default',
      name: { zh: '默认', en: 'Default' },
      colorScheme: 'light'
    }
  ]
})

id 和外观 ID 使用小写 kebab-case;name 按 BCP 47 locale 或基础语言提供显示名称;styles 按级联顺序列出包导出的 CSS,也可在项目内主题中使用相对 canofold.config.ts 工作目录的路径;appearances 至少包含一个外观。CSS 使用 html[data-cf-theme='aurora'] 作用域声明语义变量与主题专属外观;多外观主题还可以使用 data-cf-theme-appearance。

消费方直接导入第三方定义,不需要注册表或 Core 改动:

import { canofold } from '@canofold/themes'
import { defineConfig } from 'canofold'
import aurora from '@acme/canofold-theme'

export default defineConfig({
  themes: [canofold, aurora]
})

数组第一项的第一个外观是默认选择。Core 只把所选主题的 CSS 写入站点,并根据主题元数据生成切换菜单、首屏恢复状态和 iframe Demo 外观同步。布局、交互状态和无障碍样式不得由主题包重写。

CSS 职责契约

@canofold/themes/shared.css 是主题与渲染层之间唯一稳定的 CSS 契约:Core 与 Markdown 负责 DOM 结构、布局尺寸、对齐、响应式规则、显隐、滚动、点击区域、焦点行为和无障碍;主题负责语义颜色、字体、圆角、阴影、材质、边框和纯视觉动效。

第三方主题应优先在自己的 html[data-cf-theme='<id>'] 作用域覆盖 shared.css 中的 --cf-* 视觉 Hook。只有变量无法表达主题特征时,才使用同一作用域下的 .cf-* 组件选择器。主题 CSS 不得设置 display、position、尺寸、间距、网格或 Flex 布局、对齐、溢出、z-index、pointer-events、visibility 等结构或行为属性,也不得接管主题选择器的选中状态。这样同一份 Core/Markdown 结构在所有主题下具有一致的功能与可访问性。

主题专属页面视觉也遵循这一边界。例如首页插画的滤镜、透明度和动画使用 --cf-hero-visual-* Hook;插画的位置、宽高和响应式布局仍由 Core 管理。shared.css 为所有 Hook 提供安全默认值,因此第三方主题只需覆盖自己真正需要改变的部分。

独立渲染 Markdown 时,引入 @canofold/markdown/base.css,再按所选主题定义中 styles 的顺序引入 CSS。Markdown 基础样式已包含共享主题契约;实现同一契约的非 Markdown 界面仍可单独使用 @canofold/themes/shared.css。canofold-site.css 只包含默认站点首页的品牌化样式。

版本与发布记录

@canofold/themes 共发布 16 个版本,首次发布于 2026/10/13;过去 12 个月发布了 16 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.8.3latest2026/10/2119 天前
0.8.22026/10/1921 天前
0.8.12026/10/1822 天前
0.8.02026/10/1822 天前
0.7.12026/10/1822 天前
0.7.02026/10/1723 天前

关于 @canofold/themes 的常见问题

@canofold/themes 是什么?

卡诺福德主题合同和官方视觉主题.

如何安装 @canofold/themes?

在项目目录运行 npm install @canofold/themes,或使用 pnpm add / yarn add / bun add。

@canofold/themes 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@canofold/themes 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@canofold/themes 可以商用吗?

@canofold/themes 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@canofold/themes 的下载量有多少?

根据 npm 官方下载统计,@canofold/themes 在 2026/10/09 – 2026/11/07 这 30 天内被下载 1,960 次,日均约 65 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@canofold/themes 还在维护吗?

最新版本 0.8.3 发布于 2026/10/21(19 天前);至今共发布 16 个版本,其中过去 12 个月发布了 16 个;首次发布于 2026/10/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。