跳到正文
册页

展示

LinkArrow - 链接箭头

标记“这条链接会离开本页”的记号。

用法

TSX
import { LinkArrow } from '@misoto22/folio'

说明

标在“会离开本页”的链接上的记号——去站外,或者进入完整索引。

以前调用处是直接在链接文字里写一个光秃秃的 ↗,它会继承链接自己的字号(17px 的箭头挨着 17px 的词,跟它抢注意力),而且因为没人把它藏起来,会被念成“东北方向箭头”。

inline-block 在这里承担了两件事:它挡住带下划线的父元素把线穿过这个字形,同时它也是 align 的度量基准。尺寸用 em,所以跟着旁边的文字走;颜色是按纸面定的,所以放在反转底板上的调用处要自己传颜色。

结构

LinkArrow anatomy
部件说明
记号盒必填一个 aria-hidden 的 inline-block <span>,带着 0.22em 的前导间距、0.28em 的基线抬升和 --ink-3-aa。inline-block 在这里两次承重:它拦住带下划线的父元素把那条线画穿字形,同时它也是对齐所依据的那个盒子。
字形必填↗ 本身,0.68em,所以它跟着旁边的字走,而不是跟它抢。以 EXTERNAL_LINK_ARROW 导出,好让不是 React 的界面用上同一个字符。

实践建议

推荐

  • 把它放进 <a> 里面,作为最后一个子节点。放在外面,它就是一个指着某条链接的箭头,而指针差 0.22em 点不到那条链接。
  • 界面不是 React 时用 EXTERNAL_LINK_ARROW——一条 Markdown 管线、一张 OG 图、一封邮件——好让这个记号始终是同一个字符,而不是整个站点上三个几乎一样的箭头。
  • 落在反白底板上时,用 className 传一个颜色进去:它用的是 --ink-3-aa,那是对着纸色的 AA 下限,压在墨色上几乎看不见。

避免

  • 这个箭头不是那句提示。它是 aria-hidden 的,target="_blank" 也不会被播报,所以一条会开新标签页的链接,得在自己的可访问名称里把这件事说出来——否则这个字形就是所有人拿到的唯一警告,而且前提是看得见。
  • 别把它钉死成 px。是 0.68em 让同一个组件在正文里和在标题里都对;固定成 11px,它在其中一处是对的,在另一处只是一个小点。
  • 别把它挂在索引的每一行上。它标的是“目的地变了”,所以一份每条链接都离开本站的列表,什么都没标出来,还为此每行付掉 0.22em。

示例

default

这个记号,在锚点里面,并且是它的最后一个子节点。放到外面,它就是一个指向一条链接、而指针会差 0.22em 按不中的箭头。这个图形用 em 定尺寸,于是它跟着旁边的字走,而不是跟旁边的字较劲,而且它是 aria-hidden 的——把它放在这儿不会播报出任何东西,所以链接自己的那些词仍然必须说清楚它通向哪里。

only where it leaves

三条链接,一个箭头。它标记的是目的地的改变,所以一份每行都带着它的索引,等于什么都没标,还为此每行付出 0.22em。那条外链在自己的文字里就写着「在新标签页打开」,因为箭头和 target="_blank" 都不会被播报——没有那几个字,这个图形就是任何人能拿到的唯一警告,而且还得看得见才行。

on a reversed plate

这个组件上唯一一处本来就打算被覆写的东西。它用的是 --ink-3-aa,那是对着纸色的 AA 下限,压在墨色上则几乎看不见,所以一个位于反色板上的调用处,会通过 className 把自己的颜色传进来。其余一切照旧:仍然是锚点的最后一个子节点,仍然是 0.68em,仍然 aria-hidden。

再导出

EXTERNAL_LINK_ARROW = '↗'

字形本身,导出出来,让非 React 的界面也能用同一个标记。

无障碍

  • aria-hidden,所以它不会在句子中间被念成“东北方向箭头”。
  • 以 em 为单位,跟随它旁边的字号,而不是跟它抢。