定价

Link 使用手册

v1.5.0 · @snowui-design-system/components

许可阅读:首次阅读组件文档、源码或 npm 使用流程,先读完整 LICENSE;同任务同版本去重。公开 API 配置与内部实现修改分别按许可处理;全部组件使用统一运行包,源码权益以许可为准。

组件介绍

在正文、说明和导航中提供清晰的文字链接,支持箭头等视觉形式,表达可继续访问的内容。

使用选择

用于导航到地址或资源。即时动作使用 Button;提供真实 href,不能用占位地址伪装按钮。

  • 提供真实 href,target / rel 控制打开方式;disabled 表达不可用状态。

  • lines、tooltip 和 onTruncate 控制截断提示;parts 只配置内置 Tooltip。

快速开始

以下示例展示推荐的基本组合。更多场景与组合限制见后文。

<script lang="ts">	import { Link } from '@snowui-design-system/components';</script> <Link href="/components/quick-start" target="_top">Get started with SnowUI</Link>

API

关键字 类型 默认值 描述
variant LinkVariant "default" 链接视觉变体
color SnowUIColor | string "Black40" 常态颜色;Black100 / Black(或 var(--black-100))自动 hover 为 Black40,其他颜色自动 hover 为 Black100。
href string — 链接地址
target string — 链接打开方式
rel string — 链接关系
disabled boolean false 禁用状态;禁用后不响应 hover
hoverColor SnowUIColor | string | false — hover 文字颜色。未传时使用 color 对应的自动 hover 色;false 表示 hover 不变色。trailing 装饰仍按规范执行 opacity: 0.4 -> 1
underline LinkUnderline "none" 下划线显示策略。下划线只覆盖 Link 文字,不覆盖 trailing 装饰或 Icon
lines false | 1 false 单行截断开关;启用后文字超出 Link 可用宽度时显示省略号
tooltip TooltipProp — 截断 Tooltip。默认仅在真实截断时显示完整文字;false 关闭;字符串 / Snippet 自定义内容;对象透传 Tooltip 配置
onTruncate (isTruncated: boolean) => void — 真实截断状态变化回调
children Snippet — 链接文字与可选外置槽位
parts ComponentPartsOf<{ Tooltip: typeof Tooltip }> — 配置默认内置 Tooltip;显式声明的 Tooltip 子项自行传入属性。

未重新声明的继承能力请查所属基础组件文档;本表只列本组件源码具名公开属性。

使用边界与详细说明

内置组件双模式

  • parts.Tooltip:配置单行截断时的内置 Tooltip。

  • 自定义提示结构时使用外置 Tooltip 组合;显式 Props 高于 part。

Link 是独立的 文字链接组件。按钮外观但点击后跳转的场景继续使用 <Button href>;正文文字链接、带文字箭头链接与外链图标链接使用 <Link>。

功能概览

  • 所有变体默认 color="Black40",hover 变为 Black100;color="Black100" / "Black" 反向变为 Black40;Indigo 等其他颜色 hover 变为 Black100。

  • arrow:Figma 样式 2。默认颜色文字 + 内置 ArrowUpRight trailing Icon;文字 hover 遵守统一颜色规则,装饰箭头使用 currentColor × opacity: 0.4 -> 1。

  • external:Figma 样式 3。默认颜色文字 + 内置 ArrowSquareOut trailing Icon;文字 hover 遵守统一颜色规则,Icon 使用 currentColor × opacity: 0.4 -> 1。

  • hoverColor:可传入任意 CSS 颜色;传 false 时 hover 不变色。

  • underline:支持常态下划线、仅 hover 下划线、常态显示但 hover 隐藏,以及不显示下划线。默认不显示。

  • lines={1}:启用单行截断;仅在真实溢出时自动显示 Tooltip,完整链接文字来自共享 TruncationController。

  • external 内置 trailing Icon 可由外置直系 as="trailing" 替换。

文字截断

Link 复用 通用 TruncationController 与 fitTextToElement(),不自行创建尺寸观察器。lines={1} 时控制器测量文字层并判断真实截断状态;可见前缀按实际字体宽度拟合,英文等字母文字只保留完整单词,单个单词放不下时只显示省略符;中日韩文字可退回 Unicode 字素边界,因此不会出现半个字或组合字符。显式 … 作为可见文字的行内尾部渲染,与最后一个完整单词 / 字之间没有额外间距。

<Link href="/docs" lines={1} class="max-w-80">    一段超过可用宽度的完整文档链接</Link> <Link href="/docs" variant="external" lines={1} tooltip={false} class="max-w-80">    不显示截断 Tooltip 的外链</Link>

布局模型

主布局模型:槽位宿主布局(三槽位:leading / content / trailing)。

通过 <Frame row> 输出 data-auto-layout,复用 auto-layout.css(源码参考:components/src/styles/auto-layout.css) 的三槽位布局。默认文字作为 Content;external 变体的内置 ArrowSquareOut 作为 trailing。Snippet 中的外置直系 as="leading" / as="trailing" 会投影回 Link 根层,保持 Frame 对直系槽位的 Grid 落列、水平居中与统一 gap 规则。Link 根通过 [data-auto-layout] 组件级确权,将公共槽位 gap 保持为至少4 CSS px,默认首选 var(--gap-1);含附件或单行截断时复用Frame singleLine,纯文字且未启用截断时保留原文字流。长标签显式使用 lines={1},复用Link已有截断/全文提示。外置 Icon 保留自身尺寸,未传 size 时使用 Icon 默认的 16px。

内置图标与替换

variant 默认 trailing 替换规则
default 无 可按需传入外置 as="leading" / as="trailing"
arrow ArrowUpRight,12 × 12px 外置直系 as="trailing" 存在时隐藏内置 Icon
external ArrowSquareOut,12 × 12px 外置直系 as="trailing" 存在时隐藏内置 Icon
<Link href="/docs" variant="external">打开文档</Link> <Link href="/docs" variant="external">    打开文档    <Icon as="trailing"><ArrowUpRight /></Icon></Link>

下划线

<Link href="/docs" underline="always">常态下划线</Link><Link href="/docs" underline="hover">悬停时出现</Link><Link href="/docs" underline="until-hover">悬停时隐藏</Link><Link href="/docs">默认无下划线</Link>

下划线只应用于链接文字。arrow 与 external 的 Icon 均不绘制下划线。

Hover 颜色

<Link href="/docs" hoverColor="#ff4747">自定义 hover 色</Link><Link href="/docs" hoverColor={false}>hover 不变色</Link>

未传 hoverColor 时,颜色由 color 决定,与 variant 无关。主题切换时 Black40 / Black100 跟随主题。原有 CSS 颜色 override 仍作为直接样式逃生口;需要自动 hover 规则时使用 color,显式 hoverColor 高于自动结果:

配置 常态颜色 默认 hover 颜色
任意 variant,默认 color var(--black-40) var(--black-100)
任意 variant,color="Black100" / "Black" var(--black-100) var(--black-40)
任意 variant,color="Indigo" 等其他颜色 对应 Token / CSS 颜色 var(--black-100)

arrow 的默认 Icon、external 的默认 Icon 与外置 trailing Icon 均继承文字颜色,不单独切换颜色源。它们按照无底色轻量 Icon 规范使用 opacity: 0.4 -> 1 表达 hover 活跃度。

布局变量链

变量 默认来源 用途
--snowui-link-font-size var(--text-14) 文字字号
--snowui-link-line-height var(--leading-14) 文字行高
--snowui-link-gap var(--gap-1) 内容与 leading / trailing 间距,实际至少4 CSS px,根字号缩小时仍保持下限
--snowui-link-color color(默认 Black40) 默认文字颜色
--snowui-link-hover-color color 自动规则 / hoverColor hover 文字颜色;trailing 箭头 / Icon 继承该颜色
--snowui-link-icon-size var(--size-3) 内置 ArrowUpRight / ArrowSquareOut 尺寸,默认 12px;不覆盖外置 Icon
--snowui-link-decoration-opacity var(--snowui-state-opacity, 0.4) trailing 箭头 / Icon 常态透明度
--snowui-link-decoration-hover-opacity var(--snowui-state-opacity, 1) trailing 箭头 / Icon hover 透明度

Link 根节点默认使用 width: fit-content; max-width: 100%,因此在 column / stretch 父容器内仍保持 Hug,trailing 会随文字宽度移动。外部显式 width、w-full 或 inline style 可以覆盖。


先阅读 完整 LICENSE;同任务、同版本、同范围去重。

优先用组件公开 Props 匹配合适样式,尽可能保留原有视觉。确需改写时按 样式选择与改写顺序 使用自己的 class(含项目已有 Tailwind)或实例 style。以下名称来自源码实际消费的公开 override;先核对目标作用域,不修改私有 DOM。采用 SnowUI Token 时选择正确类别,外部应用不被要求安装一方 utilities。

变量 用途与默认参考
--snowui-icon-size-override 整体尺寸(尺寸 px,默认值见组件源码)
--snowui-link-color-override 常态颜色(默认 Black40;自动 hover 规则使用 Link color Prop)
--snowui-link-decoration-hover-opacity-override trailing 箭头 / Icon hover 透明度(默认 1)
--snowui-link-decoration-opacity-override trailing 箭头 / Icon 常态透明度(默认 0.4)
--snowui-link-font-size-override font-size(默认 var(--text-14) = 14px)
--snowui-link-gap-override 内部内容与 leading / trailing 间距(首选 var(--gap-1),有效值至少 4 CSS px)
--snowui-link-icon-size-override 内置 ArrowUpRight / ArrowSquareOut 尺寸(默认 var(--size-3) = 12px;不覆盖外置 Icon)
--snowui-link-line-height-override line-height(默认 var(--leading-14) = 20px)

设计指南 · Token · 组合边界

必填属性:无具名必填属性。

可双向绑定:本组件未声明具名双向绑定属性;状态更新通过公开回调或所属宿主处理。

继承声明:Omit<FrameProps, "children" | "tag">。继承能力以基类公开文档为准;Omit 中的字段已排除,不能按基类原样使用。

共享 Frame API · 返回 API

以下为公开属性实际引用的类型声明,来自源码;Svelte Snippet 表示内容片段,ComponentProps 表示对应组件的 Props。

LinkVariant

来源:components/src/components/Link.svelte

type LinkVariant = "default" | "arrow" | "external";

SnowUIColor

来源:components/src/lib/color.ts

export type SnowUIColor = keyof typeof SNOWUI_COLOR_TOKENS;

LinkUnderline

来源:components/src/components/Link.svelte

type LinkUnderline = "none" | "always" | "hover" | "until-hover";

TooltipProp

来源:components/src/components/Link.svelte

type TooltipProp = boolean | string | Snippet | Record<string, any>;

ComponentPartsOf

来源:components/src/logic/component-parts.svelte.ts

export type ComponentPartsOf<    T extends Record<string, Component<any>>,> = {    [K in keyof T]?: ConfigurableComponentPartProps<T[K]>;};

ConfigurableComponentPartProps

来源:components/src/logic/component-parts.svelte.ts

export type ConfigurableComponentPartProps<C extends Component<any>> = Partial<    Omit<ComponentProps<C>, ComponentPartControlledKey>>;

ComponentPartControlledKey

来源:components/src/logic/component-parts.svelte.ts

export type ComponentPartControlledKey =    | "children"    | "as"    | "value"    | "defaultValue"    | "open"    | "selected"    | "checked"    | "disabled"    | "readonly"    | "id"    | `on${string}`    | `aria-${string}`;