web design uiNovember 5, 20267 min read

链接颜色:为什么 #0000FF 不行,以及该用的 8 种链接颜色

纯蓝是所有人选的第一个链接颜色,但放在正文旁边和深色屏幕上都是错的。加下划线,深色模式下调亮,标出已访问链接,保留焦点环。附 8 个色值。

By Boone
XLinkedIn
Link Color: Why #0000FF Fails and the 8 Link Colors to Use Instead

正确的链接颜色是一种稍柔和的蓝色,而且要加下划线,而不是单靠 #0000FF。纯蓝是所有人选的第一个链接颜色,它在两个地方会失败:黑色正文旁边,以及深色屏幕上。下面是四个修复方法,以及可以直接交给开发的八种颜色。

为什么 #0000FF 不行

没人会特意决定用 #0000FF。它是自己冒出来的。它是 CSS 里的 blue 关键字,也是每个取色器里第一个饱和的蓝色。

浏览器自己的默认值略有不同:链接是 #0000EE,已访问链接是 #551A8B,而且两者都带下划线。下划线本来就是这个约定的一部分。设计师为了看起来干净把它去掉,却保留了蓝色。

于是蓝色只能独自扛下整个任务。纯蓝非常暗。把它放进一段近乎黑色的文字里,对于分辨颜色有困难的人来说,两者几乎一样。在深色屏幕上更糟:#0000FF 会沉进背景里。

链接由三样东西组成:颜色、线条和状态。

修复 1:加下划线

仅靠颜色

一段退货说明,其中“退款政策”几个字是蓝色,没有下划线,夹在黑色正文里

加下划线

同一段文字,“退款政策”是更柔和的蓝色并带下划线
同一句话,同一个链接。左边唯一的线索是一种和周围黑色很接近的蓝。右边的下划线让链接一眼就能找到,而更柔和的 #0F62FE 也比 #0000FF 更养眼。

背后的规则是 WCAG 1.4.1,颜色的使用。

仅靠颜色标记的链接,必须与周围文字明显区分开。纯蓝挨着纯黑做不到,而 #0F62FE 挨着 #161616(我们这里用的文字颜色)就可以。下划线彻底消除了这个问题,因为链接不再依赖颜色。

连续文本中的链接要加下划线。导航栏、按钮和卡片则不同:它们的位置和形状本身就在说“可点击”,所以那里的下划线是可选的。

仅靠颜色,灰度

灰度下的退货说明段落,链接和文字无法区分

加下划线,灰度

灰度下的同一段文字,下划线仍然标出了链接
快速测试:把屏幕调成灰度。没有颜色,左边的段落里根本没有链接。右边的仍然有。

修复 2:深色模式下调亮

深色上的 #0000FF

一张深色的退货卡片,带下划线的纯蓝链接在近黑背景上很难看清

深色上的 #78A9FF

同一张卡片,浅蓝色链接清晰醒目
这里两个链接都加了下划线,纯蓝依然很难读。深色屏幕需要更浅的蓝色。

差距不是一点半点。#0000FF 在 #161616 上对正文字号来说太暗,读不出来,而 #78A9FF 在同样的背景上一目了然。在白底上好用的饱和色,到了深色上要变得更浅更柔和,和我们处理错误颜色的做法一样。

保留两种蓝色并随主题切换:浅色屏幕用 #0F62FE,深色屏幕用 #78A9FF。悬停状态再进一步:浅色用 #0043CE,深色用 #A6C8FF。

修复 3:标出人们去过的地方

每个链接看起来都是新的

“接着阅读”列表里三个带下划线的蓝色链接,看起来完全一样

已访问变成紫色

同一个列表,其中已打开的两个链接是紫色
文章列表同时也是一张你已读内容的地图。已访问和未访问的链接看起来一样时,人们会重复打开同一个页面,并搞不清其余的内容。

Nielsen Norman Group 自 2004 年起就在强调:当已访问和新链接共用一种颜色时,人们会迷路并原地打转。紫色是约定俗成的选择,浏览器从一开始就在用。浅色屏幕用 #8A3FFC,深色屏幕用 #BE95FF。它只需要一条 CSS 规则:a:visited。

修复 4:保留焦点环

outline: none

一张登录卡片,获得键盘焦点的链接没有任何焦点标志

2px #0F62FE 环

同一张卡片,获得焦点的链接周围有清晰的蓝色环
按 Tab 键浏览这个页面的人需要看到自己在哪里。左边的焦点在某个地方,但没人看得出在哪。

键盘用户、开关设备用户,以及任何鼠标手累了的人,都依赖焦点环。

用 outline: none 把它去掉又不放任何替代物,会违反 WCAG 2.4.7,焦点可见。如果浏览器默认的环和你的设计冲突,就替换它。不要删除它。

一个与链接同色、带小偏移的 2px 环是稳妥的版本。WCAG 2.2 把最强的形式描述为至少 2 个 CSS 像素的周边轮廓。

8 种链接颜色,浅色与深色

点击任意色块即可复制色值。

浅色主题。点击颜色复制色值。
#161616 上的深色主题。点击颜色复制色值。
角色浅色深色用途
文字#161616#F4F4F4链接周围的正文
链接#0F62FE#78A9FF所有静止状态的链接
悬停#0043CE#A6C8FF指针悬停在链接上
已访问#8A3FFC#BE95FF已打开过的链接

这些是 IBM Carbon 的链接 token,取自其公开发布的主题值。

把这个交给你的开发

css
:root { --color-text: #161616; --color-link: #0F62FE; --color-link-hover: #0043CE; --color-link-visited: #8A3FFC; } @media (prefers-color-scheme: dark) { :root { --color-text: #F4F4F4; --color-link: #78A9FF; --color-link-hover: #A6C8FF; --color-link-visited: #BE95FF; } } a { color: var(--color-link); text-decoration: underline; text-underline-offset: 0.15em; } a:visited { color: var(--color-link-visited); } a:hover { color: var(--color-link-hover); } a:focus-visible { outline: 2px solid var(--color-link); outline-offset: 3px; }

顺序很重要::link、:visited、:hover、:focus、:active 是经典顺序,放在 visited 规则之前的 hover 规则,在已访问链接上永远不会生效。:focus-visible 选择器会为键盘用户显示焦点环,鼠标点击时则跳过,所以没人有理由去移除它。

“易读”背后的数字

组合对比度
白底上的 #0000FF8.6 比 1,通过,但仍然和黑色文字太接近
#161616 上的 #0000FF2.1 比 1,不通过
白底上的 #0F62FE5.0 比 1
白底上的 #0043CE7.8 比 1
白底上的 #8A3FFC5.0 比 1
#161616 上的 #78A9FF7.7 比 1
#161616 上的 #A6C8FF10.6 比 1
#161616 上的 #BE95FF7.7 比 1

第一行就是检测工具不够用的原因。纯蓝在白底上从数字上看是通过的。但它没通过真正的测试:链接是否与旁边的黑色文字看起来不同。

FAQ

链接应该是什么颜色?

浅色背景上用 #0F62FE 这样的中等蓝色,深色背景上用 #78A9FF 这样更浅的蓝色,正文中还要加下划线。

#0000FF 是好的链接颜色吗?

单独用不是。它在白底上看起来没问题,但对于看不到蓝色的人来说它和黑色正文太接近,而在深色背景上它几乎消失。

链接应该加下划线吗?

应该,在段落内部。WCAG 1.4.1 规定,除非链接与周围文字明显区分,否则不能只靠颜色来标记链接,而下划线消除了这种依赖。

已访问链接应该是什么颜色?

紫色。浏览器默认是 #551A8B,而 IBM Carbon 这样的设计系统在浅色屏幕上用 #8A3FFC,深色屏幕上用 #BE95FF。

深色模式下什么链接颜色好用?

更浅的蓝色。#78A9FF 在 #161616 上很容易读,而 #0000FF 在正文字号下太暗,看不清。

可以移除链接的焦点轮廓吗?

只有在用另一个可见的指示器替换它时才行。移除后不放任何替代物,会违反 WCAG 2.4.7,焦点可见。

来源

Want links, forms and every other state designed as one system? Our team designs and builds product UI that holds up in light and dark.

Get Started

More from Brainy Papers

Keep reading