Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成

Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成

优雅的大纲导航体验,让文档结构一目了然

认识 Obsidian 的 Quiet Outline 插件

在 Obsidian 这款强大的知识管理工具中,Quiet outline 插件扮演着文档导航中枢的角色。它能自动解析当前文档的标题层级结构,在侧边栏生成清晰的可视化大纲。无论是编辑长文档还是快速定位内容,这个插件都提供了无可替代的导航效率

Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成--认识 Obsidian 的 Quiet Outline 插件

然而,原生样式存在几个痛点:

  • 多行标题内部行距过大,与标题间距混淆 Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成--认识 Obsidian 的 Quiet Outline 插件
  • 层级结构视觉区分度不足
  • 交互反馈不够优雅
  • 与主题配色缺乏协调

基于 Blue Topaz 主题的优雅起点

优秀的 Blue Topaz 主题为 Quiet Outline 提供了坚实的美学基础

  • 圆角设计融入现代 UI 风格
  • 按钮与输入框视觉统一
  • 进度条动态色彩适配
  • 节点悬停微交互效果 (更清楚将切换到哪个标题)

Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成--基于 Blue Topaz 主题的优雅起点

这些优化让大纲区域不再突兀,成为工作空间和谐的功能组件。但多行标题区分度问题仍未解决,层级视觉提示也有提升空间。

Note

为了启用 Blue Topaz 主题对 Quiet Outline 插件的优化,你需要使用 obsidian-style-settings 插件。

启用 style settings 插件后,会自动开启优化(可在 style settings 插件的设置中关闭)。

Blue Topaz 主题中的优化还涉及一些影响体验的 bug:

  • 缩小时产生多个滑动条; Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成--基于 Blue Topaz 主题的优雅起点
  • 侧边父节点展开的引导线消失;
  • 插件设置中配置的侧边父节点展开的引导线颜色消失。

我的深度优化方案

在 Blue Topaz 的基础上,我进行了多项突破性改进,重点解决原生插件的核心痛点。

Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成--我的深度优化方案

🌟 精准的多行标题处理

  • 智能行距压缩技术:通过精密计算字体尺寸与行高比例,将标题内部行距压缩 40%,同时保持标题间距不变
  • 视觉补偿机制:采用微妙的上下边距补偿,消除压缩带来的布局断裂感
  • 效果对比
    • 优化前:多行标题内部行距与标题间距相同,难以区分内容边界 Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成--🌟 精准的多行标题处理
    • 优化后:多行标题内部紧凑连贯;两个标题间距清晰可辨 Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成--🌟 精准的多行标题处理

🎨 动态色彩继承系统

  • 层级色彩映射:自动继承主题设置的 H1-H6 标题颜色
  • 智能回退机制:超过六级的标题优雅回退到强调色
  • 四重状态指示
    • 悬停状态:半透明强调色背景 (来自 Blue Topaz)
    • 选中状态:文字高亮 (来自 Blue Topaz),但去除白色背景增强造成的视觉干扰。
    • 定位状态:与 Obsidian 主题定义的文档标题色彩同步
    • 顶部导航栏:进度条与主题色彩同步 Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成--🎨 动态色彩继承系统

Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成--🎨 动态色彩继承系统

🌈 层级深度可视化

  • 引导线透明度渐变:随层级加深,引导线透明度从 100% 逐级递减至 20%
  • 视觉深度暗示:通过透明度变化形成自然视觉纵深感
  • 滚动条优化:消除 BT 主题多余滚动条的 bug
  • 边界优化:修复了父节点引导线消失的问题 Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成--🌈 层级深度可视化

Quiet Outline 插件深度优化分享:更简明的多行标题与主题集成--🌈 层级深度可视化

🧩 布局精细调整

  • 功能栏边距重置:重新平衡底部空间利用率与美观。左右边距压缩至 5px,空间更紧凑。
  • 容器内边距优化:底部空间利用率提升,减少空白浪费
  • 输入框统一高度:搜索框与按钮保持 32px 一致高度
  • 图标居中校准:所有功能图标完美垂直居中

效果对比与用户体验提升

功能维度原插件Blue Topaz 主题本样式优化后
顶部导航栏支持自定义颜色仅白色默认为主题颜色,也支持自定义颜色
层级视觉引导支持颜色区分,但手动配置麻烦无,缺乏深度感透明度渐变,层次分明;同时支持颜色区分
多行标题区分度行距相同,难以区分边界行距相同,难以区分边界内部紧凑,间距清晰
当前标题指示统一高亮,缺乏层级信息高亮在非纯白背景下造成过曝动态继承文档各级标题颜色
交互反馈生硬的高亮切换平滑的状态过渡平滑的状态过渡
空间利用率底部无优化,割裂不美观底部存在过多无效空白边距优化,空间充分利用
图标布局与圆角按钮布局错乱,方正图标边缘过于锐利按钮布局调整过时导致错乱,但有美观圆角按钮针对最新版调整正中,有美观圆角。

使用指南

  1. 创建 CSS 文件:在 Obsidian 库目录的 .obsidian/snippets/ 中新建 CSS 文件(任意名称,如文件夹不存在手动创建即可)
  2. 应用优化代码:复制本文提供的完整 CSS 样式
  3. 启用代码片段:在 Obsidian 设置 > 外观 > CSS 代码片段中启用
  4. 重启生效:重新启动 Obsidian 即可体验优化效果

提示:

  1. 关闭 Quiet Outline 插件的 “Ellipsis” 功能以获得最佳多行标题显示效果
  2. 关闭 Quiet Outline 插件的 “Set Primary Clolor” 功能以自适应主题颜色

结语

这些精心设计的优化方案,使 Quiet Outline 从功能性插件蜕变为视觉与体验俱佳的导航工具。多行标题的清晰呈现让复杂文档结构一目了然,动态色彩继承使大纲与编辑区形成视觉统一,而细腻的交互反馈则让导航过程变得愉悦流畅。

站在 Blue Topaz 主题的肩膀上,我们解决了原生插件长期存在的痛点,特别是多行标题的可读性这一核心问题。每一次导航都成为视觉享受,这正是知识管理工具应有的优雅体验。


优化无止境,欢迎在评论区分享您的使用体验和改进建议!

CSS 样式分享

/*

 * 目标:选择 n-tree-node-content__text 类内部的 p 标签

 * 效果:减小段落内部多行文本之间的行距,而不影响段落与段落之间的间距

 * 注明:电脑上测试字体大小是13px,而当 p 的line-height变为 1.6em时,将与原格式一致。

 * 补偿计算:

  13px * 1.6 = 原始行高像素值;

  (13px * 1.6 -13px)/2 = 原始单侧空白;

  13px * line-height = 新行高的像素值;

  (13px * line-height - 13px)/2 = 新单侧空白;

  原始单侧空白 - 新单侧空白 = 损失的单侧空白 = margin-top = margin-bottom;

*/

  

.quiet-outline .n-tree-node-content__text p {

  line-height: 1.2em; /* 调整原始段落行距 */

  margin-top: 2.6px;  /* 微调段落上方的间距使与改line-height前一致 */

  margin-bottom: 2.6px;  /* 微调段落上方的间距使与改line-height前一致 */

}

  
  

/* 移除点击高亮(Blue Topaz主题已经有了) */

.n-tree.n-tree--block-line .n-tree-node:not(.n-tree-node--disabled).n-tree-node--selectable:not(:hover) {

  background-color: transparent !important;

}

  
  

/* 移除误触发的多余滚动条 */

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline {

  margin-bottom: 0px ;  /* 应该通过padding调整而非margin */

  padding-bottom: 10px; /* make use of wasted spaces */

  /* below are from Blue Topaz theme -> .quiet-outline-optimize */

  padding-top: 10px;

  border-radius: var(--radius-l);

  

}

  

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .function-bar > :first-child {

  margin-left: 5px;

}

  

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .function-bar {

  margin-right: 5px;

}

  

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-2 .n-tree-node-indent,

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-3 .n-tree-node-indent:first-child,

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent:first-child,

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:first-child,

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:first-child {

  border-right: 1px solid auto;

  opacity: 1;

}

  

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-3 .n-tree-node-indent,

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent:nth-child(2),

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:nth-child(2),

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(2) {

  border-right: 1px solid auto;

  opacity: 0.8;

}

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent,

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:nth-child(3),

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(3) {

  border-right: 1px solid auto;

  opacity: 0.6;

}

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent,

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(4) {

  border-right: 1px solid auto;

  opacity: 0.4;

}

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent {

  border-right: 1px solid auto;

  opacity: 0.2;

}

  

/*

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selectable.located p {

  color: var(--interactive-accent);

}

*/

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selectable.level-1.located p {

  color: var(--h1-color);

}

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selectable.level-2.located p {

  color: var(--h2-color);

}

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selectable.level-3.located p {

  color: var(--h3-color);

}

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selectable.level-4.located p {

  color: var(--h4-color);

}

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selectable.level-5.located p {

  color: var(--h5-color);

}

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selectable.level-6.located p {

  color: var(--h6-color);

}

/* for headings over h6*/

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selectable.located p {

  color: var(--interactive-accent);

}

  

/* Below are from Blue Topaz Theme, deleted .quiet-outline-optimize */

/* ================================== */

/* ============== quiet-outline ============= */

/* ================================== */

  

/**quiet outline**/

body .workspace-leaf-content[data-type=quiet-outline] .view-content {

  padding: unset;

}

body .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-rail {

  background-color: var(--background-secondary-alt);

  box-shadow: 0 3px 5px var(--background-modifier-box-shadow);

}

/*

body .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-rail .n-slider-rail__fill {

  background-color: var(--background-modifier-border);

}

*/

body .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-dots .n-slider-dot {

  background-color: var(--background-primary);

  border: 2px solid var(--background-modifier-border);

}

body .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-dots .n-slider-dot.n-slider-dot--active {

  border: 2px solid var(--interactive-accent);

}

  
  

body .workspace-leaf-content[data-type=quiet-outline] .n-button {

  width: 32px;

  height: 32px;

  background-color: var(--background-secondary-alt);

  border: 0px;

  border-radius: var(--radius-l);

}

body .workspace-leaf-content[data-type=quiet-outline] .n-button .n-button__icon svg {

  display: flex;

  align-items: center;

  justify-content: center;

}

body .workspace-leaf-content[data-type=quiet-outline] .n-button .n-button__border,

body .workspace-leaf-content[data-type=quiet-outline] .n-button .n-button__state-border {

  display: none;

}

  

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node-content__text p {

  color:var(--text-normal);

}

  
  

/*

body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline {

  padding-top: 10px;

  padding-bottom: 28px;

  margin-bottom: 5px;

  border-radius: var(--radius-l);

}

*/

  

/*

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-2 .n-tree-node-indent,

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-3 .n-tree-node-indent:first-child,

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent:first-child,

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:first-child,

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:first-child {

  border-right: 1px solid auto;

  opacity: 0.6;

}

  

body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-3 .n-tree-node-indent,

body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent:nth-child(2),

body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:nth-child(2),

body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(2) {

  border-right: 1px solid rgb(var(--accent-2-rgb),0.5) ;

}

body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent,

body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:nth-child(3),

body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(3) {

  border-right: 1px solid rgb(var(--accent-3-rgb),0.5) ;

}

body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent,

body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(4) {

  border-right: 1px solid rgb(var(--accent-4-rgb),0.5) ;

}

body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent {

  border-right: 1px solid rgb(var(--accent-5-rgb),0.5) ;

}

  

*/

  

body .workspace-leaf-content[data-type=quiet-outline] .n-tree.n-tree--block-line .n-tree-node:not(.n-tree-node--disabled):hover {

  background-color: hsla(var(--interactive-accent-hsl),0.2)

}

body .workspace-leaf-content[data-type=quiet-outline] .n-tree.n-tree--block-line .n-tree-node:not(.n-tree-node--disabled):hover p {

  color: var(--text-accent-hover);

}

/*

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selectable.located p {

  color: var(--text-accent-hover);

}

*/

body .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selected p {

  color: var(--text-accent-hover);

  font-weight: 600;

  background-color: hsla(var(--interactive-accent-hsl),0.2)

}

  

body .workspace-leaf-content[data-type=quiet-outline] .n-input {

  height: 32px;

  background-color: var(--background-primary);

  border-radius: var(--radius-l);

}

body .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__border {

  border: 0;

}

body .workspace-leaf-content[data-type=quiet-outline] .n-input:not(.n-input--disabled):hover .n-input__state-border,

body .workspace-leaf-content[data-type=quiet-outline] .n-input:not(.n-input--disabled).n-input--focus .n-input__state-border {

  border: 0;

  box-shadow: unset;

}

body .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__placeholder {

  display: none;

}

body .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__input input {

  caret-color: var(--interactive-accent);

}

body .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__input input::placeholder {

  color: var(--text-faint);

}

/* #end quiet outline */

讨论

若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。



反馈交流

其他渠道

版权声明
pkmer forum 论坛相关