Skip to content

列表

Props ​

List ​

名称类型默认值说明
densityListDensity'balanced'行的间距密度:compact(4px 上下内边距)、balanced(8px)、spacious(12px,左右内边距也放宽一档)。单行可以用自己的 density 覆盖它。
hasDividersbooleanfalse是否在相邻两行之间绘制分隔线。最后一行不会绘制,带分隔线时行不再有圆角。
edgeCompensation'inline'-按每个逻辑边缘可用的容器内边距,抵消行自身的左右内边距,让行内文字与同级标题对齐。它读取容器发布的 --container-padding-inline-start 与 --container-padding-inline-end,没有发布时按 0 处理,因此不会把行拉出容器之外。省略时行的位置不变。
listStyleListMarkerStyle'none'每行前面的标记:none、disc(实心圆点)、circle(空心圆点)、decimal(序号)。decimal 会改用 <ol> 渲染。
startnumber1有序列表的第一个编号,仅在 listStyle="decimal" 时生效。同时写入 <ol> 的 start 属性和 CSS 计数器。
headerstring-列表上方的纯文本标题,会以 aria-labelledby 与列表关联。需要富文本时改用 header 插槽。

ListItem ​

名称类型默认值说明
labelstring | number-标识这一行的主要文字。字符串和数字会自动单行截断;需要富文本时改用 label 插槽。
descriptionstring | number-标签下方的次要文字,同样会自动单行截断;需要多行或富文本时改用 description 插槽。
densityItemDensity-覆盖所在 List 给定的密度。留空时继承列表的密度;不在列表中时按 balanced 处理。
onClick(event: MouseEvent) => void-点击处理函数。给出后行内会渲染一个占满内容区的按钮,并启用悬停与按下状态。模板里写 @click 即可。
interactiveRefMaybeRefOrGetter<HTMLElement | null | undefined>-指向行内已经承载键盘操作与动作的控件(例如 startContent 中的复选框)。行会变成放大的点击区域,把表层点击转发给该控件,并且不再渲染自己的按钮,因此不会多出一个 Tab 停留点。与 onClick、href 互斥,设置后二者会被忽略。
hrefstring-链接地址。给出后行内会渲染一个链接元素。
target'_blank' | '_self'-链接打开方式,仅在给出 href 时生效。_blank 会自动补上 noopener 和 noreferrer。
relstring-链接关系标记,会与自动补充的标记合并去重。
isDisabledbooleanfalse禁用状态。行会变成惰性(不响应指针事件),内容调暗,并写入 aria-disabled="true"。行带有自己的 role 时不设置为惰性,由父级负责。
isSelectedbooleanfalse选中状态。角色允许时写入 aria-selected="true",否则写入 aria-current="true";使用方自己传入的 aria-current 优先。

Item ​

名称类型默认值说明
asstring | Component'div'根元素。行带有 role 时才可以传入组件,这样键盘操作仍由父级负责,行不会多出一个 Tab 停留点。
align'center' | 'start''center'起始与结束内容插槽的垂直对齐方式。start 用于两端内容高于一行文字的场景。
labelLinesnumber-标签截断前的最大行数。字符串标签留空时按单行截断,插槽内容不截断。
descriptionLinesnumber-描述截断前的最大行数。字符串描述留空时按单行截断,插槽内容在 stacked 布局下不截断。
layout'stacked' | 'inline''stacked'标签与描述的排布。inline 让两者共用一行,描述优先被省略,因此行高固定,适合放进触发器这类固定高度的容器。
isHighlightedbooleanfalse高亮状态,也就是键盘焦点和悬停时使用的外观。菜单类组件用它表示当前定位到的行。

Item 同时接受 ListItem 的全部属性,以及 label、description、density、onClick、interactiveRef、href、target、rel、isDisabled、isSelected。

插槽 ​

List ​

名称说明
default列表的条目,通常是 ListItem。
header列表上方的标题内容,会以 aria-labelledby 与列表关联。

ListItem / Item ​

名称说明
startContent标签之前的起始内容:图标、头像或复选框。
label富文本形式的标签,会替代 label 属性,并且不套用自动截断。
description富文本形式的描述,会替代 description 属性。
endContent标签之后的结束内容:徽章、时间戳或箭头。
marker行首的标记,作为行的直接子元素渲染。仅 Item 直接提供,ListItem 会根据列表的 listStyle 自行填充。

暴露的方法 ​

名称签名说明
elementComputedRef<HTMLUListElement | HTMLOListElement | null>列表元素本身;带有头部时组件外层还有一个包裹元素,它仍是这个列表元素。

ListItem 和 Item 另外暴露 element(根元素)、focus() 与 blur(),聚焦时会落在行内真正可聚焦的控件上。

原生属性 ​

List ​

根元素是 <ul>,listStyle="decimal" 时是 <ol>;给出 header 时外层会多一个包裹元素。

以下内容传入列表元素:

  • HTML 属性。
  • aria-* 属性。
  • data-* 属性。
  • class。
  • style。

组件自己写入 role="list"、data-density、data-dividers、data-list-style 与 data-edge-compensation。未渲染 header 时,使用方传入的 aria-labelledby 会保留;渲染了 header 时由组件的标题接管。

ListItem / Item ​

根元素默认是 <div>,ListItem 是 <li>。

以下内容传入根元素:

  • HTML 属性(role、id 等)。
  • aria-* 属性,使用方传入的 aria-current 优先于选中状态推导出的值。
  • data-* 属性。
  • class。
  • style。

组件自己写入 data-density、data-align、data-interactive、data-selected、data-disabled、data-highlighted、data-inert、aria-disabled 与推导出的 aria-selected / aria-current,这些属性不会被传入的同名属性覆盖。