Obsidian 自定义主题开发指南
自定义主题可以完全掌控 Obsidian 的外观和体验。
准备工作
安装开发工具
- 安装 Node.js
- 安装 Obsidian CLI:
npm install -g @obxd/obsidian-cli
|
创建项目
obsidian themes new my-theme
|
主题结构
my-theme/ ├── styles.css ├── manifest.json ├── theme.json ├── preview.png └── README.md
|
核心概念
常用 CSS 选择器
.markdown-source-view { }
.markdown-preview-view { }
.side-dock-settings { }
.settings-container { }
|
常用类名
h1, h2, h3, h4, h5, h6
p
.cm-s-obsidian pre .cm-s-obsidian code
a
img
ul, ol, li
table
pre
blockquote
|
主题变量
使用主题变量
.theme-light { --background-primary: #ffffff; --text-normal: #242424; }
.theme-dark { --background-primary: #1e1e1e; --text-normal: #d4d4d4; }
|
可用变量列表
--background-primary --background-secondary --background-modifier-border --text-normal --text-accent --interactive-normal --interactive-hover --interactive-active --interactive-success --interactive-error
|
实战:创建极简主题
styles.css
.markdown-source-view { --font-editor: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
.theme-dark { --background-primary: #1a1a1a; --background-secondary: #2a2a2a; --text-normal: #e0e0e0; }
.theme-light { --background-primary: #ffffff; --background-secondary: #f5f5f5; --text-normal: #333333; }
.markdown-preview-view pre { background: #282c34; border-radius: 8px; padding: 16px; }
a { color: var(--interactive-accent); text-decoration: none; }
hr { border: none; border-top: 1px solid var(--background-modifier-border); }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid var(--background-modifier-border); padding: 8px; }
|
manifest.json
{ "name": "My Minimal Theme", "id": "my-minimal-theme", "version": "1.0.0", "minAppVersion": "0.15.0", "description": "A minimal, clean theme for Obsidian", "author": "Your Name", "isDesktopOnly": false }
|
自定义颜色
定义颜色
:root { --my-accent-color: #6366f1; }
.theme-dark { --background-primary: #121212; --my-accent-color: #818cf8; }
.theme-light { --background-primary: #ffffff; --my-accent-color: #4f46e5; }
|
使用自定义颜色
.plugin-button { background: var(--my-accent-color); }
h1, h2, h3 { color: var(--my-accent-color); }
|
交互效果
按钮悬停效果
.mod-button:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); }
|
平滑滚动
html { scroll-behavior: smooth; }
|
过渡动画
.transition-all { transition: all 0.3s ease; }
.transition-colors { transition: background-color 0.2s, color 0.2s; }
|
调试技巧
实时预览
启用开发模式
使用浏览器开发者工具
- 启动开发服务器
- 打开 Obsidian
- 使用浏览器开发者工具检查元素
发布主题
打包主题
obsidian themes pack my-theme
|
发布到社区
- 在 Obsidian 社区插件仓库 上传主题
- 填写主题信息
- 上传预览图和说明文档
进阶技巧
响应式设计
@media (max-width: 768px) { .sidebar { width: 100% !important; } }
|
动画效果
@keyframes fade-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
.fade-in { animation: fade-in 0.5s ease; }
|
字体优化
body { font-family: system-ui, -apple-system, sans-serif; }
code, pre, .inline-code { font-family: 'Fira Code', 'Consolas', monospace; }
|
常见问题
主题不生效
检查文件路径和配置。
样式冲突
使用 !important 或更具体的选择器。
兼容性问题
查看 Obsidian 版本和主题变量支持情况。
学习资源
开始创建属于你自己的主题吧!