Skip to content

主题开发

概述

Obsidian 主题是一组 CSS 样式规则,用于改变 Obsidian 的外观。

主题结构

基本文件

my-theme/
├── obsidian.css    # 主题样式文件(必需)
└── manifest.json   # 主题清单(必需)

manifest.json

json
{
  "name": "My Theme",
  "version": "1.0.0",
  "minAppVersion": "1.0.0",
  "author": "Your Name",
  "authorUrl": "https://github.com/yourusername"
}

CSS 选择器

常用类名

css
/* 主题颜色 */
.theme-dark { }  /* 深色主题 */
.theme-light { } /* 浅色主题 */

/* 编辑器 */
.markdown-source-view { }  /* 源码模式 */
.markdown-reading-view { } /* 阅读模式 */
.cm-editor { }             /* CodeMirror 编辑器 */

/* 侧边栏 */
.workspace-leaf { }        /* 侧边栏面板 */
.workspace-drawer { }      /* 移动端抽屉 */

/* 文件列表 */
.nav-files-container { }   /* 文件列表容器 */
.nav-file { }              /* 文件项 */
.nav-folder { }            /* 文件夹项 */

元素选择

css
/* 标题 */
.markdown-preview-view h1 { }
.markdown-preview-view h2 { }

/* 段落 */
.markdown-preview-view p { }

/* 链接 */
.internal-link { }  /* 内部链接 */
.external-link { }  /* 外部链接 */
.is-unresolved { }  /* 未解析链接 */

/* 代码 */
.code-block { }
.cm-inline-code { }
pre code { }

/* 列表 */
.markdown-preview-view ul { }
.markdown-preview-view ol { }

/* 引用 */
.markdown-preview-view blockquote { }

CSS 变量

颜色变量

css
.theme-dark {
  /* 背景色 */
  --background-primary: #1e1e1e;
  --background-secondary: #252526;
  --background-modifier-border: #3c3c3c;

  /* 文字颜色 */
  --text-normal: #d4d4d4;
  --text-muted: #8a8a8a;
  --text-faint: #5a5a5a;

  /* 强调色 */
  --accent-h: 210;
  --accent-s: 100%;
  --accent-l: 50%;

  /* 交互状态 */
  --interactive-accent: #007acc;
  --interactive-hover: #1e1e1e;
}

.theme-light {
  --background-primary: #ffffff;
  --background-secondary: #f3f3f3;
  --text-normal: #333333;
}

布局变量

css
:root {
  /* 字体 */
  --font-text: -apple-system, BlinkMacSystemFont, sans-serif;
  --font-monospace: 'JetBrains Mono', monospace;
  --font-interface: var(--font-text);

  /* 字体大小 */
  --font-size-normal: 16px;
  --font-size-small: 13px;

  /* 间距 */
  --size-4-1: 4px;
  --size-4-2: 8px;
  --size-4-3: 12px;
  --size-4-4: 16px;

  /* 圆角 */
  --radius-s: 4px;
  --radius-m: 8px;
  --radius-l: 12px;
}

常用样式

字体设置

css
/* 设置编辑器字体 */
.markdown-source-view {
  font-family: 'Inter', 'PingFang SC', sans-serif;
  font-size: 15px;
  line-height: 1.6;
}

/* 设置代码字体 */
code, pre {
  font-family: 'JetBrains Mono', monospace;
}

颜色方案

css
/* 深色主题配色 */
.theme-dark {
  --background-primary: #0d1117;
  --background-secondary: #161b22;
  --text-normal: #c9d1d9;
  --text-muted: #8b949e;
  --accent-color: #58a6ff;
}

/* 浅色主题配色 */
.theme-light {
  --background-primary: #ffffff;
  --background-secondary: #f6f8fa;
  --text-normal: #24292f;
  --text-muted: #57606a;
  --accent-color: #0969da;
}

链接样式

css
/* 内部链接 */
.internal-link {
  color: var(--accent-color);
  text-decoration: none;
  border-bottom: 1px solid transparent;
}

.internal-link:hover {
  border-bottom-color: var(--accent-color);
}

/* 外部链接 */
.external-link {
  color: var(--text-muted);
}

.external-link::after {
  content: ' ↗';
  font-size: 0.8em;
}

代码块样式

css
/* 代码块背景 */
pre {
  background: var(--background-secondary);
  border-radius: var(--radius-m);
  padding: 16px;
  overflow-x: auto;
}

/* 行内代码 */
code {
  background: var(--background-modifier-border);
  padding: 2px 6px;
  border-radius: var(--radius-s);
}

表格样式

css
/* 表格美化 */
table {
  width: 100%;
  border-collapse: collapse;
}

th, td {
  padding: 8px 12px;
  border: 1px solid var(--background-modifier-border);
}

th {
  background: var(--background-secondary);
  font-weight: 600;
}

tr:nth-child(even) {
  background: var(--background-secondary);
}

响应式设计

移动端适配

css
/* 手机端 */
.is-mobile {
  --font-size-normal: 14px;
}

/* 平板端 */
@media (min-width: 768px) {
  .markdown-preview-view {
    max-width: 750px;
    margin: 0 auto;
  }
}

/* 桌面端 */
@media (min-width: 1024px) {
  .markdown-preview-view {
    max-width: 800px;
  }
}

暗色/亮色切换

css
/* 同时支持两种主题 */
.theme-light {
  --bg-color: #ffffff;
  --text-color: #333333;
}

.theme-dark {
  --bg-color: #1a1a1a;
  --text-color: #e0e0e0;
}

body {
  background: var(--bg-color);
  color: var(--text-color);
  transition: background 0.3s, color 0.3s;
}

高级技巧

图谱样式

css
/* 图谱节点颜色 */
.graph-view.color-fill {
  color: var(--accent-color);
}

/* 图谱连线 */
.graph-view.color-line {
  color: var(--background-modifier-border);
}

/* 高亮状态 */
.graph-view.color-fill-highlight {
  color: #ff6b6b;
}

动画效果

css
/* 平滑过渡 */
body {
  transition: background-color 0.3s ease, color 0.3s ease;
}

/* 链接悬停 */
.internal-link {
  transition: color 0.2s ease, border-color 0.2s ease;
}

/* 按钮效果 */
button {
  transition: transform 0.1s ease, box-shadow 0.1s ease;
}

button:hover {
  transform: translateY(-1px);
  box-shadow: 0 2px 8px rgba(0,0,0,0.2);
}

自定义滚动条

css
/* Webkit 滚动条 */
::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

::-webkit-scrollbar-track {
  background: var(--background-secondary);
}

::-webkit-scrollbar-thumb {
  background: var(--background-modifier-border);
  border-radius: 4px;
}

::-webkit-scrollbar-thumb:hover {
  background: var(--text-muted);
}

Style Settings 支持

添加设置选项

在主题 CSS 文件顶部添加注释:

css
/* @settings

name: My Theme Settings
id: my-theme
settings:

  -
    id: accent-color
    title: Accent Color
    type: class-select
    allowEmpty: false
    default: accent-blue
    options:
      -
        label: Blue
        value: accent-blue
      -
        label: Green
        value: accent-green

  -
    id: font-size
    title: Font Size
    type: variable-number
    default: 16
    format: px

*/

.accent-blue { --accent-color: #007acc; }
.accent-green { --accent-color: #28a745; }

设置类型

类型说明
class-select下拉选择
variable-number数字输入
variable-text文本输入
variable-color颜色选择器
class-toggle开关切换

发布主题

GitHub 发布

  1. 创建 GitHub 仓库
  2. 上传主题文件
  3. 创建 Release

提交到社区

  1. Fork obsidian-releases 仓库
  2. 编辑 community-css-themes.json
  3. 提交 Pull Request
json
{
  "name": "My Theme",
  "author": "Your Name",
  "repo": "yourusername/my-theme",
  "branch": "main"
}

下一步

最后更新:2026年2月16日编辑此页反馈问题