将 markdown 里面的 所有 headings 放在文章旁边,就像这样,这是可以用css做到的...
创建于:2025年6月8日
创建于:2025年6月8日
可以,纯靠 CSS 就能把 Markdown 里的各级标题“拉”到正文左侧做成边注(margin notes)的效果,在 Obsidian 里只要放一段 CSS Snippet 并启用即可。下面给出一个思路和示例代码,你可以按自己的主题再微调。
给整篇预览区设一个相对定位容器
这样标题就能用 position:absolute
精确定位到容器左侧。
把正文整体右移留出边注宽度
用一个自定义变量 --margin-note-width
控制留白大小,方便以后统一调。
让所有 h1–h6 标题脱离文流定位到左侧
position:absolute; left:0; width:var(--margin-note-width)
text-align:right
让文字靠右排,形成“眉批”效果防止正文被标题遮挡
标题脱离文流后,需要给标题再加一点 pointer-events:none
(可选)或透明背景,避免遮挡点击。
css/* === Margin Headings / 边注标题 === */ .markdown-preview-view { /* 1. 让后代绝对定位时的参考系 */ position: relative; /* 2. 边注宽度:可自行调整 */ --margin-note-width: 180px; } /* 3. 正文整体右移 */ .markdown-preview-view .markdown-preview-section { margin-left: var(--margin-note-width); } /* 4. 所有标题放到左侧边注 */ .markdown-preview-view h1, .markdown-preview-view h2, .markdown-preview-view h3, .markdown-preview-view h4, .markdown-preview-view h5, .markdown-preview-view h6 { position: absolute; left: 0; /* 让每个标题的宽度等于边注宽度 */ width: calc(var(--margin-note-width) - 0.5rem); /* 让文字靠右,与正文对齐 */ text-align: right; /* 视觉样式,可自己改 */ font-style: italic; font-weight: 600; color: var(--text-faint); /* 不要挡住正文点击 */ pointer-events: none; } /* 5. 细调不同级别的字号 */ .markdown-preview-view h1 { font-size: 1.1rem; } .markdown-preview-view h2 { font-size: 1.0rem; } .markdown-preview-view h3 { font-size: 0.9rem; } /* 依此类推 … */
.../.obsidian/snippets/margin-headings.css
项目 | 说明 |
---|---|
编辑模式 | Live Preview 下也能生效,但如果用纯 Source 模式就看不到;Mobile 端可能版式太窄不适合。 |
兼容性 | 与某些主题/插件的自定义排版(特别是 callout、嵌入块等)可能重叠,需要额外 z-index 或选择器排除。 |
长标题 | 如果标题太长会溢出边注,可以考虑 text-overflow: ellipsis 或增加 --margin-note-width 。 |
行内标签 | 若标题里有 YAML-front-matter锚点或其它元素,需要再加更具体选择器过滤。 |
只要理解 “留白 + 绝对定位” 这两个核心点,你可以自由把任何元素(章节编号、脚注、插图等)放到侧边,打造自己喜欢的排版。祝折腾愉快!