跳转到内容

Timeline 时间线 ​

按时间顺序排列的一串事件,每条有标记、连接线与内容。

用法 ​

一条竖向的事件流:每条一个圆点,圆点之间连一段线,末条的线自动收起

  1. 订单已创建
    下单来源:网页端
  2. 已发货
    承运商已揽收
  3. 已签收
    本人签收

组件结构 ​

加粗的是必需部件。

data-scope="timeline":root · item · label · indicator · connector · content · title · description · time

示例 ​

逐条语气 ​

tone 写在条目上,只为该条的圆点上色;不写 tone 的条目是中性圆点

  1. 收到请求
    队列长度 3
  2. 开始构建
    拉取依赖
  3. 两条依赖有告警
    已按锁文件继续
  4. 单元测试失败
    3 个用例未通过
  5. 重跑后通过
    产物已上传

内容所在的一侧 ​

placement 决定内容落在线的哪一侧;alternate 是逐条交替,线位于中间

默认(内容在结束侧)
  1. 立项
    需求评审通过
  2. 开发
    三个迭代
  3. 上线
    灰度两周
start(内容在起始侧)
  1. 立项
    需求评审通过
  2. 开发
    三个迭代
  3. 上线
    灰度两周
alternate(逐条交替)
  1. 立项
    需求评审通过
  2. 开发
    三个迭代
  3. 上线
    灰度两周

横排 ​

orientation="horizontal" 把事件从左向右排列,连线随之转为横向

  1. 内测
  2. 公测
  3. 商业化
  4. 海外版

尺寸 ​

size 改变圆点直径、条目间距与字号,不传 size 即默认档

小
  1. 提交
    12 个文件
  2. 合并
    两条评审意见
默认
  1. 提交
    12 个文件
  2. 合并
    两条评审意见
大
  1. 提交
    12 个文件
  2. 合并
    两条评审意见

坐标列 ​

label 与内容对置:逐条交替排布时时间戳仍停在同一侧,不随内容左右跳动

  1. 2026-05-12
    1.0.0
    首个正式版
  2. 2026-06-30
    1.1.0
    拖拽排序与滚动条
  3. 2026-08-10
    1.2.0
    AI 组件族

设计指引 ​

何时使用 ​

  • 展示已经发生的事件序列:审批记录、物流轨迹、变更历史。

何时不用 ​

  • 表达后续步骤时,使用步骤条:时间线是回顾,步骤条是前瞻。
  • 事件之间没有时间关系时,使用列表。

特性 ​

  • 逐条可以有自己的语气(成功 / 失败 / 进行中)。
  • 内容可以固定在一侧,也可以左右交替。
  • 支持横排。
  • label 是与内容对置的一列,承载该条的坐标(日期、版本号);逐条交替排布时时间戳不随内容左右跳动。

组合 ​

最佳实践 ​

  • 顺序保持一致:始终最新在上,或始终最早在上,不混用。
  • 每条写明时刻,只写“刚刚”在回溯时没有价值。

反模式 ​

  • 条数很多却不折叠,一条时间线占据十屏。
  • 用颜色区分事件类型却不提供文字。

API 参考 ​

产物 ​

层值
自定义元素<xh-timeline>
Vue 组件XhTimelineConnector XhTimelineContent XhTimelineDescription XhTimelineIndicator XhTimelineItem XhTimelineLabel XhTimelineRoot XhTimelineTime XhTimelineTitle
状态机无,connect 直接由 props 算属性
皮肤@xihan-ui/styles/timeline.css

Props ​

属性类型必填说明
orientationOrientation事件排列方向:vertical 自上而下、horizontal 自起点向终点,默认 vertical。
placementTimelinePlacement内容位于线的哪一侧:start / end / alternate,未提供时内容落在结束侧。
sizeSize尺寸:sm / md / lg,决定圆点直径、条目间距与字号。

React 适配器 props ​

只列各组件自己声明的那些:继承自 ComponentPropsWithRef 的 DOM 属性不在其中,根组件上与上面 Props 表同名的也不重复列。Vue 的对应物是上面的插槽表。

React 组件属性类型必填说明
XhTimelineItemtoneTone该条的语气,只在本条内生效,下传给它自己的圆点。

connect API ​

getXxxProps() 返回对应部件的宿主属性。

成员类型说明
getRootProps() => T['element']
getItemProps() => T['element']
getLabelProps() => T['element']与内容对置的一列,放置该条的坐标;排布随整条线的方向与侧别变化。
getIndicatorProps(props: TimelineItemProps) => T['element']圆点的语气取自它所属的条目。
getConnectorProps() => T['element']
getContentProps() => T['element']
getTitleProps() => T['element']
getDescriptionProps() => T['element']
getTimeProps() => T['element']

无障碍 ​

键盘 ​

规格出处:W3C APG

无键盘交互(不接收焦点,或焦点行为完全由原生元素提供)。

ARIA ​

以下属性由 connect 生成。

部件属性值
rootrole'list'
itemrole'listitem'
indicatoraria-hidden'true'
connectoraria-hidden'true'

样式参考 ​

皮肤 ​

@xihan-ui/styles/timeline.css 使用 [data-scope="timeline"][data-part="root"] 部件选择器,位于 xihan.components 层。覆盖样式使用 xihan.overrides。

数据属性 ​

由 connect 生成;条件不成立时不输出无值属性。

部件属性值
rootdata-orientationprops.orientation
rootdata-placementprops.placement
rootdata-sizeprops.size
itemdata-orientationprops.orientation
itemdata-placementprops.placement
labeldata-orientationprops.orientation
labeldata-placementprops.placement
indicatordata-toneitem.tone
connectordata-orientationprops.orientation

CSS 变量 ​

本组件公开覆盖槽由独立皮肤的实际消费位生成;默认来源、作用部件和状态均与 CSS 同源。

变量部件CSS 属性状态默认来源说明
--xh-timeline-connector-bgconnectorbackgrounddefault--xh-border-defaulttimeline 的 connector 部件 background 覆盖槽。
--xh-timeline-connector-min-lengthconnector
item
min-block-size
min-inline-size
@media (min-width: 768px)
default
has(> [data-scope='timeline'][data-part='label'])
orientation=horizontal
--xh-space-4timeline 的 connector、item 部件 min-block-size、min-inline-size 覆盖槽。
--xh-timeline-connector-radiusconnectorborder-radiusdefault--xh-shape-pilltimeline 的 connector 部件 border-radius 覆盖槽。
--xh-timeline-connector-thicknessconnector
item
block-size
inline-size
@media (min-width: 768px)
default
has(> [data-scope='timeline'][data-part='label'])
orientation=horizontal
--xh-stroke-thicktimeline 的 connector、item 部件 block-size、inline-size 覆盖槽。
--xh-timeline-content-gapcontentgapdefault--xh-space-1timeline 的 content 部件 gap 覆盖槽。
--xh-timeline-content-pbcontent
item
padding-block-end@media (min-width: 768px)
nth-child(even)
orientation=horizontal
placement=alternate
placement=start
--xh-space-2timeline 的 content、item 部件 padding-block-end 覆盖槽。
--xh-timeline-content-ptcontent
item
padding-block-start@media (min-width: 768px)
has(> [data-scope='timeline'][data-part='label'])
orientation=horizontal
--xh-space-2timeline 的 content、item 部件 padding-block-start 覆盖槽。
--xh-timeline-description-fgdescriptioncolordefault--xh-fg-mutedtimeline 的 description 部件 color 覆盖槽。
--xh-timeline-description-font-sizedescriptionfont-sizedefault--xh-text-secondary-sizetimeline 的 description 部件 font-size 覆盖槽。
--xh-timeline-fgrootcolordefault--xh-fg-defaulttimeline 的 root 部件 color 覆盖槽。
--xh-timeline-gutteritemcolumn-gapdefault--xh-_timeline-guttertimeline 的 item 部件 column-gap 覆盖槽。
--xh-timeline-indicator-bgindicatorbackgrounddefault--xh-_tone-softtimeline 的 indicator 部件 background 覆盖槽。
--xh-timeline-indicator-fgindicatorcolordefault--xh-_tone-ontimeline 的 indicator 部件 color 覆盖槽。
--xh-timeline-indicator-font-sizeindicatorfont-sizedefault--xh-_timeline-caption-font-sizetimeline 的 indicator 部件 font-size 覆盖槽。
--xh-timeline-indicator-radiusindicatorborder-radiusdefault--xh-shape-circletimeline 的 indicator 部件 border-radius 覆盖槽。
--xh-timeline-indicator-sizeindicator
item
block-size
inline-size
margin-block-start
default--xh-_timeline-dot-sizetimeline 的 indicator、item 部件 block-size、inline-size、margin-block-start 覆盖槽。
--xh-timeline-item-gapcontent
item
padding-block-end
padding-inline-end
@media (min-width: 768px)
default
has(> [data-scope='timeline'][data-part='label'])
orientation=horizontal
--xh-_timeline-item-gaptimeline 的 content、item 部件 padding-block-end、padding-inline-end 覆盖槽。
--xh-timeline-label-fglabelcolordefault--xh-fg-subtletimeline 的 label 部件 color 覆盖槽。
--xh-timeline-label-font-sizelabelfont-sizedefault--xh-_timeline-caption-font-sizetimeline 的 label 部件 font-size 覆盖槽。
--xh-timeline-time-fgtimecolordefault--xh-fg-subtletimeline 的 time 部件 color 覆盖槽。
--xh-timeline-time-font-sizetimefont-sizedefault--xh-_timeline-caption-font-sizetimeline 的 time 部件 font-size 覆盖槽。
--xh-timeline-title-fgtitlecolordefault--xh-fg-defaulttimeline 的 title 部件 color 覆盖槽。
--xh-timeline-title-font-sizeindicator
item
root
title
font-size
margin-block-start
default--xh-_timeline-title-font-sizetimeline 的 indicator、item、root、title 部件 font-size、margin-block-start 覆盖槽。
--xh-timeline-title-font-weighttitlefont-weightdefault--xh-text-label-weighttimeline 的 title 部件 font-weight 覆盖槽。

动效 ​

动效角色:状态(见动效规范)。

background-color · color 走 transition 过渡。时长与缓动读动效令牌,改令牌即改全局节奏。

系统开启减弱动效时由令牌层统一收敛,皮肤不另作判断。

响应式 ​

皮肤按视口分档:min-width: 768px。

RTL ​

皮肤用逻辑属性排布(inline-start 一族),dir="rtl" 下自动镜像。

Released under The MIT License