1. 为什么 Typora 没有“字体颜色”按钮:Markdown 的边界与两条可行路线
如果你正在 Typora 里写笔记,想把某个结论标成红色,大概率会在菜单栏里翻几遍——字体、字号、加粗、斜体都有,唯独没有字体颜色。这不是 Typora 偷懒,而是 Markdown 本身就没有“颜色”这个抽象概念。标准 Markdown 语法只负责表示结构,比如标题、列表、引用、代码块,至于“这个字是红色还是蓝色”,它根本不关心。
也因此,所有坚持“原生 Markdown 语法”的编辑器都不敢公开放一个字体颜色按钮。一旦加入这种富文本能力,文档的纯文本属性就被打破了:你复制一段文字到别处,可能带着一堆看不见的格式标记;协作场景下,颜色到底算内容还是算样式,会变成一场灾难。Typora 定位是“所见即所得的 Markdown 编辑器”,但它更想做的是 Markdown 的优雅渲染器,而不是第二个 Word。所以它把颜色问题留给你,也留给 CSS。
1.1 Markdown 标准里没有“颜色”这个抽象概念
Markdown 的核心设计哲学很简单:用纯文本表达排版意图,让人在不渲染的情况下也能读得懂。#表示标题,**表示加粗,>表示引用。这些标记全部是 ASCII 字符,理解成本极低。而“颜色”本质上是一个样式属性,需要给字符附加额外信息,Markdown 一直没有为此提供统一语法。社区里有人提议过[color=red]这类写法,但没被主流接纳,各家编辑器自然也不愿贸然支持。
在你频繁使用 Typora 之后,其实很容易形成一个错觉:我能在编辑器里看到彩色文字,说明 Typora 支持颜色。真相是,Typora 渲染效果背后是一套主题 CSS,标题是什么颜色、链接是什么颜色、代码块是什么背景,这些都是主题作者用 CSS 写死的。你看到的那点颜色,全都是“给元素类型设定的默认样式”,而不是“给某个具体字符指定的颜色”。
所以如果你想自由地给文字上色,本质上只有两条路:要么直接写 HTML 标签,绕开 Markdown 语法;要么通过 CSS 片段自定义样式,再配合 HTML 标签使用。两条路最终都指向 CSS,区别只是你在哪里写样式。
1.2 两条路线:内联 HTML 与 CSS 片段
路线 A 是内联 HTML,即直接在文档里写<span style="color: red">文字</span>。Typora 的底层渲染机制是“Markdown 转 HTML,再用 CSS 呈现页面”,所以它是认这些标签的。你输入完一个合法的 span 标签,编辑器会立刻把它渲染成带颜色的文字。这个方案的优势是零配置、即时生效,缺点是写起来啰嗦,而且源文件里会混入大量标签,看着不够干净。
路线 B 是 CSS 片段,也就是在 Typora 的主题文件夹里新建一个base.user.css文件,然后在里面定义自己的颜色类。比如我定义了.c-red,正文中只需要写<span class="c-red">重点</span>,就能得到统一的红色。写起来比路线 A 短,改起来也方便:某天你想把“重点红”换成更柔和的砖红色,只需改 CSS 文件里的一行,全文所有使用.c-red的地方都会跟着变。
如果你只是偶尔给一句话标个色,路线 A 足够。但如果你像我一样,每天都在笔记里标重点、写批注、区分关键词和结论,路线 B 更值得花五分钟配置。
1.3 我的选型建议
我的经验是:把两种方案分开用。临时想标一下,直接<span style="color:#...">,写完就忘,不需要维护。但凡是会反复出现的标注场景,比如“重要结论”“待办事项”“危险提醒”“引用摘录”,我一定会先在 CSS 里定义好对应的类名,再在正文里引用。
这样做的最大好处是“语义化”。我不用每次想用什么颜色,只要知道这段文字属于“结论”,就用.c-conclusion;属于“提醒”,就用.c-warning。至于结论该是蓝色还是深绿色,那是样式层的决策,跟内容本身完全解耦。时间一长,整套笔记的颜色体系会非常稳定,不会出现同一类内容一会儿红一会儿蓝的情况。
2. 给单个词语上色:三种内联 HTML 写法与 Typora 渲染逻辑
先解决最直接的需求:我就想让一句话里的某几个字变成红色,不改样式文件,怎么做?答案是写内联 HTML。在 Typora 编辑区直接输入<span style="color:red">文字</span>,输入结束的瞬间,那段文字就会以红色渲染出来。这不是 Typora 的隐藏功能,而是底层渲染引擎的行为。
2.1 标准写法:span + style 属性
span是行内元素,不会打断段落结构,最适合做局部文字着色。标准写法如下:
这是一段普通文字,<span style="color: #d9534f;">这里是被标红的重点内容</span>,后面继续正常。颜色取值可以用几种形式:英文颜色名(red、blue、green)、十六进制色值(#d9534f)、RGB 函数(rgb(217, 83, 79))。我建议日常使用十六进制色值,因为控制更精确。比如“红色”的red在 CSS 里其实是#f00,太刺眼;换成#d9534f这种偏暖的砖红,在白色背景下阅读更舒服。
如果你把光标移到标签附近,Typora 的源码模式和预览模式同时存在。输入途中标签尚未闭合时,它可能显示为纯文本;一旦输入完整的>闭合标签,整行就会立刻变成带样式的渲染效果。这一点刚开始用的人可能会困惑:为什么打了一半字一直是黑字?不用担心,这是正常的。
2.2 老派写法:font 标签也能用,但不推荐
除了 span,HTML 老用户可能习惯用<font color="red">文字</font>。这个标签在 Typora 里同样能渲染,效果跟 span 差不多。
<font color="#1890ff">这里的字会变成蓝色</font>但要提醒你,font标签在 HTML5 规范里已经被废弃,虽然浏览器和 Typora 出于兼容性仍然会渲染它,但它不支持现代 CSS 类、语义也更弱。如果你只是快速用一下,问题不大;如果你想长期维护一套标注体系,还是建议用 span 加 class 的方式。
2.3 为什么 Typora 能渲染 HTML?先了解它的渲染模型
Typora 不是普通的富文本编辑器,它内部工作的链路基本是:Markdown 源码 → 解析器转换成 HTML DOM → 用主题 CSS 渲染页面。这意味着你在编辑区看到的文字,并不是纯字符组成的,而是已经构建好的 DOM 树。你的 Markdown 语法生成了一部分 DOM,你手动插入的 HTML 标签则直接成为 DOM 的一部分,样式自然有效。
理解了这一点,很多现象就解释得通:为什么标题点一下就能折叠?是 Typora 给标题节点的可交互行为。为什么图片能拖拽缩放?是 DOM 节点的属性。为什么<span>能渲染成彩色?因为它就是一段合法 HTML,浏览器内核当然认得。同理,你也可以在 Typora 里使用<u>、<sub>、<sup>这些行内标签,它们全都有效。
2.4 直接复制能用的内联颜色示例
给你一段可以直接粘贴到 Typora 里测试的文字:
这里是正文内容,<span style="color:#d9534f;">红色的关键结论</span>,中间混着<font color="#1890ff">蓝色的次要说明</font>,还有<span style="background:#fff7e0; color:#d46b08;">带背景色的提醒文字</span>。如果这段文字在你的 Typora 里成功显示了三种颜色,说明内联 HTML 路线已经走通。如果你发现背景色和文字颜色同时生效但不协调,可以自己调整色值。这个方案最大的价值是零依赖,换台电脑、换主题,效果都能原样保留,因为样式直接写在标签里。
3. 一劳永逸:用 base.user.css 做自己的“字体调色板”
内联方案虽然够用,但每次写一长串style="color:#..."确实很烦,尤其当你标记频率高的时候,手都会打字打出肌肉记忆。我真正推荐的是用一个自定义 CSS 文件,把常用颜色固化成几个类名,之后正文里只需要写<span class="c-red">就够了。
3.1 找到 Typora 的主题文件夹,并创建 base.user.css
Typora 允许你通过用户样式覆盖默认主题,实现方式是主题文件夹里的.user.css文件。里面有两个层级:base.user.css对所有主题生效,xxx.user.css只对名为 xxx 的主题生效(比如github.user.css只作用于 github 主题)。
打开主题文件夹的路径有两条。一是在 Typora 菜单栏依次点击文件 → 偏好设置 → 外观 → 打开主题文件夹;二是直接手动定位,不同系统的路径大致如下:
| 系统 | 路径 |
|---|---|
| Windows | C:\Users\你的用户名\AppData\Roaming\Typora\themes |
| macOS | ~/Library/Application Support/Typora/themes |
| Linux | ~/.config/Typora/themes/ |
在这个文件夹里新建一个文件,命名为base.user.css。注意后缀必须是.css,文件名必须包含.user这一段,否则 Typora 不会把它识别为用户自定义样式。
3.2 把常用颜色写成 CSS 类
打开这个新建文件,写入下面这段内容。它定义了几种常用颜色类,几乎覆盖了笔记标注的大部分场景:
.c-red { color: #d9534f !important; } .c-blue { color: #1890ff !important; } .c-green { color: #52c41a !important; } .c-orange { color: #fa8c16 !important; } .c-purple { color: #722ed1 !important; } .c-gray { color: #8c8c8c !important; } .c-key { color: #d46b08 !important; font-weight: 600; } .bg-warm { background: #fff7e0 !important; padding: 0 4px; border-radius: 3px; }保存后重启 Typora,或者在某些版本里直接切一下主题再切回来,样式就会生效。之后你在正文里输入<span class="c-red">关键内容</span>,文字就会变成红色。
你可能注意到我加了!important。这是为了对抗主题原有样式的优先级。Typora 自带主题的 CSS 往往会对正文、段落里的文字设置颜色,自定义样式的类名如果不加!important,可能会被主题样式压住,导致颜色不生效。加上之后,至少能保证大部分主题下都能正常显示。
3.3 正文里如何使用这些颜色类
用法很简单,例如:
这部分是普通叙述。<span class="c-red">这里强调风险</span>,<span class="c-blue">这里是补充说明</span>,<span class="bg-warm">这里是要重点回看的提醒</span>。相比之下,内联写style会显得臃肿,而class让文档结构更干净。更重要的是,你不需要记住色值,只需要记住类名。
我个人的类名命名逻辑是“颜色前缀 + 用途后缀”。比如只按颜色取名的有c-red、c-blue;按用途取名的有c-key(关键词)、bg-warm(暖色背景提醒)。这样既能随手用,也能在需要时快速扩展。
3.4 深色主题下的颜色适配
如果你长期使用深色主题,直接套用上面的浅色背景色值可能会踩坑。比如深色背景上,默认的#8c8c8c灰色可能对比度不足,读起来费劲;某些主题的正文是浅色文字,你再给它套一个浅色 class,反而看不出来颜色差别。
解决办法有两种。第一种是全局调亮,把深色主题下偏暗的色值换成亮度更高的版本。例如蓝色从#1890ff换成#40a9ff,红色从#d9534f换成#ff7875,橙色从#fa8c16换成#ffa940。第二种是只在特定主题里覆盖,做法不是改base.user.css,而是新建一个与该主题同名的.user.css,例如night.user.css,然后在里面重新定义颜色类。这样浅色主题用浅色色板,深色主题用深色色板,互不干扰。
4. 不嵌 HTML 的间接变色:mark 高亮、行内代码与代码块的组合技法
很多人不习惯在 Markdown 文档里看到一串串 HTML 标签,哪怕它们能渲染。如果你希望“尽量少写标签、依然能变色”,也有几条偏门路线。它们本质上是重新定义 Typora 已有的元素样式,不算真正的“任意文字着色”,但用好了效果非常自然。
4.1 默认高亮==文字==的本质
Typora 原生支持==高亮==语法。你输入两个等号夹住一段文字,渲染时它会被转换成<mark>标签。默认样式通常是黄色背景配深色文字,类似荧光笔。
既然它最终也是 HTML 节点,我们就能通过 CSS 改变它的呈现。在base.user.css里加一段:
mark { background-color: #fff566; color: #333333; border-radius: 3px; padding: 0 3px; }这样就可以把默认高亮改成更顺眼的颜色。如果你想让高亮变成红色背景白字,就把背景色改成#d9534f、文字颜色改成#fff。这个方案的好处是你写文档时不需要碰 HTML,直接用==语法,源码干净;坏处是全局只有一个mark样式,你没法同时拥有“黄底高亮”和“蓝底高亮”两种效果。想要多色高亮,仍然得借助 span 加类名。
4.2 把高亮从“黄色背景”改成“红字/蓝字”
如果你其实不太想要背景色,只想要文字变色,也可以只调整 mark 的文字颜色:
mark { background-color: transparent; color: #d9534f; font-weight: 600; }这样==重点==看起来就像红色加粗文字,而不是荧光笔效果。从视觉上,它几乎等同于<span class="c-red">重点</span>。对于不想写 HTML 的人,这是一个非常顺手的折中方案。代价仍然是“只此一种”,无法区分“红色重点”“蓝色补充”。
4.3 行内代码作为低调的彩色标注
另一个能改颜色的元素是行内代码`代码`。Typora 默认把行内代码渲染成灰底等宽字体,但我们可以在 CSS 里把它调成一种截然不同的风格。例如:
code { background: #f0f4ff; color: #1d39c4; padding: 0 4px; border-radius: 4px; }这样行内代码就变成浅蓝底、深蓝字的标注样式。你在正文里用反引号括住某个词,视觉上会比普通文字突出很多,而且完全不用写 HTML。这种用法比较适合“术语标注”“参数名”“文件名”等场景。注意,这个样式会影响所有行内代码,包括你贴的一些技术名词,所以如果你很在意代码原本的等宽语义,建议把颜色调得克制一点。
4.4 组合玩法:代码区块与高亮语法的分工
你还可以利用 Typora 的代码块功能做整段标注。比如把一段需要强调的注意事项放进```warning代码块里,然后通过 CSS 给[class="warning"]的代码块设置边框或背景色。这其实不是给文字着色,而是通过整体区块的视觉反差,达到“这里内容不一样”的效果。
不过我不建议把它当成日常文字颜色方案。代码块内部的文本默认是等宽字体,不适合大段笔记内容。更好的做法是保持“正文颜色用 span 或 mark,整段重点用区块视觉”的分工。这样层次清晰:颜色变化是小范围词级别的强调,区块背景是段落级强调。
4.5 什么时候该用 HTML,什么时候该用 mark
我给自己的判断标准很简单:临时標注用==或行内代码,因为它们最省事,不打断写作流;频繁、稳定的标记用 span 加 CSS 类,因为它们语义清楚、可全局调整;真正要导出发给别人的文档,优先用内联<span style>,因为样式完全内嵌,不依赖任何自定义 CSS,到哪都不会丢。
5. 踩坑实录:改 Typora 字体颜色时最容易翻车的五个细节
任何自定义样式的玩法,听上去简单,实操时总有几个让人满头问号的瞬间。下面这些坑,我几乎都踩过,分享一下排查思路。
5.1 CSS 优先级不足,颜色根本没变
最常见的现象是:你写好了<span class="c-red">重点</span>,也创建了base.user.css,但文字还是黑色。第一步先检查类名是否拼写一致,第二步检查 CSS 文件是否保存并重启,第三步就要考虑优先级问题。
主题 CSS 对.md容器内的正文颜色定义往往权重很高,直接写.c-red { color: red; }不一定压得过它。所以我建议在自定义颜色类里统一加上!important。这个写法虽然粗暴,但对普通用户来说最稳妥。你不想加也行,那就把选择器写得更具体,比如p span.c-red { color: red; },或者#write .c-red { color: red; },但代码会变繁琐,不划算。
5.2 换主题之后自定义样式“消失”
如果你把颜色类写进了github.user.css,那么切换到内置的gothic主题时,这些样式就不会生效,因为github.user.css只被加载到 github 主题上。这不是 Typora 出 bug,是作用域限定的结果。
想让所有主题都能用,就把颜色类放到base.user.css。如果你只想在某个主题下调试颜色,再用对应主题的 user.css。切换主题后颜色不对,先想想自己把代码写进了哪个文件,这是最容易忽略的问题。
5.3 导出 PDF 和 Word 时颜色丢失
颜色写好了,导出 PDF 时发现变黑变灰;导出 Word 时更夸张,直接变普通文字。原因要分开看:导出 PDF,Typora 基本走浏览器打印线路,HTML 里的内联样式和自定义 class 解析后通常都能保留;但如果你的样式依赖base.user.css中某个类名,PDF 渲染时加载了该 CSS,一般没问题。真正容易丢的是 Word,因为 Word 不是 HTML 渲染器,Typora 要把 Markdown/HTML 结构转换为 Word 原生样式,复杂的内联样式经常丢失或降级。
我的对策是:需要稳定导出 Word 的文档,尽量少用自定义颜色类,直接使用内联<span style="">,并要求接受“部分样式可能被 Word 简化”的现实。相反,导出 PDF 和 HTML 时,自定义颜色基本不用担心。
5.4 span 标签没闭合,导致后面整段文字都变红
HTML 标签必须闭合,这个道理谁都懂,但写笔记时手一快就容易漏。例如:
<span class="c-red">这段文字我想标红,后面还有文字呢因为没有闭合</span>,浏览器解析时会把后面所有内容都当成这个 span 的内容,直到遇到新的闭合标签或文档结尾。表现就是后面一大片文字全部变红。排查办法很简单:看到颜色“蔓延”到不该红的位置,优先检查上游最近的<span是否缺少闭合标签。养成写完标签立刻补全的习惯,可以减少很多刺眼渲染。
5.5 中文输入法下尖括号被吞、标签写残
这个问题主要出在 Windows + 中文输入法环境。输入<时如果输入法还处于中文状态,可能直接输出成中文的全角符号,导致标签解析失败。你会看到<span style=“color:red”>这种引号都是中文全角的代码,Typora 当然不认。
我的写法习惯是:先切换到英文输入法,完整打出<span class="c-red"></span>,再回到开头位置在标签里填中文内容。或者反过来,先把整段中文写好,再回头插入标签。不要一边输入中文一边打尖括号,很容易卡在输入法状态切换上。
6. 让颜色标注再快一步:色板速查表、复用模板与多设备同步
把颜色类配好只是第一步。真正让工作效率提升的,是你形成一套顺手的工作流。我现在打开 Typora 面对一篇新笔记,根本不需要回忆“这个颜色类叫什么”,因为所有常用信息都在速查表里,复制粘贴即可。
6.1 自建一份色板速查表
我建议你在自己的笔记系统里维护一张表格,列出所有用过的自定义颜色类,以及它们对应的场景。这样既方便自己记忆,也方便未来新设备同步后快速找回手感。下面是我常用的一套,供参考:
| 类名 | 色值 | 典型用途 |
|---|---|---|
.c-red | #d9534f | 风险、错误、重要警告 |
.c-blue | #1890ff | 补充说明、外部引用 |
.c-green | #52c41a | 完成、正确、通过 |
.c-orange | #fa8c16 | 待办、提示、注意 |
.c-purple | #722ed1 | 专业术语、概念定义 |
.c-gray | #8c8c8c | 备注、弱化内容 |
.bg-warm | 底#fff7e0 | 重点回看、临时标注 |
这张表不是死规则,你可以按自己习惯调整。关键是保持一致性:同一个“警告”场景,不要在 A 笔记里用红色,在 B 笔记里用橙色。
6.2 把“彩色片段模板”单独存一页
我还在 Typora 里建了一个名为“颜色片段速查”的文档,里面保留了所有常用标签的完整写法。需要时不是去回想语法,而是打开这个文档,复制对应模板,替换文字。模板长这样:
<span class="c-red">重要风险</span> <span class="c-blue">补充说明</span> <span class="c-green">已完成事项</span> <span class="c-orange">需要跟进</span> <span class="bg-warm">今晚回看</span>因为 Typora 支持同时打开多个标签页,我通常把这个速查文档固定在某个页签里,写笔记时顺手切过去复制。这比记忆色值高效得多,也防止重复输入时出错。
6.3 跨设备同步base.user.css
如果你在公司和家里都用 Typora,自定义颜色类需要同步。最笨但可靠的方法是把base.user.css放进同步文件夹,比如你的同步盘中,然后新设备上把它复制到对应的主题文件夹里。记得保留一份备份,别直接编辑原文件原位置后又删掉。
如果你用了 Git 管理笔记,也可以把base.user.css连同主题配置一起纳入版本管理。这样每次调整颜色,都能看到历史记录,改坏了还能回滚。目录路径在上文已经列过,不同系统路径不同,跨设备迁移时注意别放错位置。
6.4 要不要为颜色装一堆第三方扩展?
很多刚入门的人会问:Typora 有没有插件可以像 Word 一样选中文字点颜色?Typora 的官方定位就是轻量、无插件体系,强行折腾第三方脚本往往得不偿失。我的态度很明确:颜色标注只是写作的一小环,用 CSS 类加复制模板已经足够顺滑。与其花时间搭插件,不如把基础样式文件维护好,这也是所有改动中最可控、最容易迁移的方案。
最后分享一个小技巧:我真正高频使用的颜色类其实只有三四个,其他都是备用。颜色标注贵在克制,如果一篇笔记里超过五种颜色,视觉噪音反而会淹没重点。保持少量、稳定、语义清晰,Typora 的文字颜色功能才能真正成为你的知识管理体系里可靠的一部分。