Skip to content
Lenso UI

Tabs 标签页

Tabs 将内容组织为多个区块,并允许用户在它们之间导航。

用法

import { Tabs } from '@lenso/ui';

此预览复用英文版适配,不代表中文源示例已完成本地实现。

"use client";
import { Tabs } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";
const styles = stylex.create({ root: { width: "100%", maxWidth: 448 }, panel: { paddingTop: 16 } });export function Basic() {  return (    <Tabs defaultValue="overview" xstyle={styles.root}>      <Tabs.ListContainer>        <Tabs.List activateOnFocus aria-label="Options">          <Tabs.Tab value="overview">Overview</Tabs.Tab>          <Tabs.Tab value="analytics">Analytics</Tabs.Tab>          <Tabs.Tab value="reports">Reports</Tabs.Tab>          <Tabs.Indicator />        </Tabs.List>      </Tabs.ListContainer>      <Tabs.Panel xstyle={styles.panel} value="overview">        <p>View your project overview and recent activity.</p>      </Tabs.Panel>      <Tabs.Panel xstyle={styles.panel} value="analytics">        <p>Track your metrics and analyze performance data.</p>      </Tabs.Panel>      <Tabs.Panel xstyle={styles.panel} value="reports">        <p>Generate and download detailed reports.</p>      </Tabs.Panel>    </Tabs>  );}

Local adaptation source above. Derived from HeroUI v3.2.6 source.

组件结构

导入 Tabs 组件后,可通过点语法访问所有子部分。

import { Tabs } from '@lenso/ui';
export default () => (  <Tabs>    <Tabs.ListContainer>      <Tabs.List aria-label="Options">        <Tabs.Tab>          <Tabs.Separator /> {/* Optional */}          <Tabs.Indicator />        </Tabs.Tab>      </Tabs.List>    </Tabs.ListContainer>    <Tabs.Panel/>  </Tabs>)

示例

垂直布局

此预览复用英文版适配,不代表中文源示例已完成本地实现。

"use client";export { Vertical } from "./source";

Local adaptation source above. Derived from HeroUI v3.2.6 source.

溢出

当标签列表超出可用空间时,Tabs.ListContainer 会自动渲染滚动箭头与渐隐边缘,使用户可以导航到被隐藏的标签。水平与垂直方向均支持此行为。

此预览复用英文版适配,不代表中文源示例已完成本地实现。

"use client";export { Overflow } from "./source";

Local adaptation source above. Derived from HeroUI v3.2.6 source.

禁用 Tab

此预览复用英文版适配,不代表中文源示例已完成本地实现。

"use client";export { Disabled } from "./source";

Local adaptation source above. Derived from HeroUI v3.2.6 source.

带分隔线

在每个 <Tabs.Tab> 内(第一项除外)添加 <Tabs.Separator />,用于在标签之间显示分隔线。

此预览复用英文版适配,不代表中文源示例已完成本地实现。

"use client";export { WithSeparator } from "./source";

Local adaptation source above. Derived from HeroUI v3.2.6 source.

次要类型

此预览复用英文版适配,不代表中文源示例已完成本地实现。

"use client";export { Secondary } from "./source";

Local adaptation source above. Derived from HeroUI v3.2.6 source.

次要类型(垂直)

此预览复用英文版适配,不代表中文源示例已完成本地实现。

"use client";export { SecondaryVertical } from "./source";

Local adaptation source above. Derived from HeroUI v3.2.6 source.

对齐方式

标签内容默认居中。使用 align 可将其对齐到 start 或 end,这在垂直的侧边栏式导航中尤其有用。单个标签仍可通过 Tabs.Tab 上的 className 覆盖。

此预览复用英文版适配,不代表中文源示例已完成本地实现。

"use client";export { VerticalAlignment } from "./source";

Local adaptation source above. Derived from HeroUI v3.2.6 source.

渲染函数

此预览复用英文版适配,不代表中文源示例已完成本地实现。

"use client";// Adapted from HeroUI v3.2.6 (e385ac2), Apache-2.0. Native anchors supply real navigation.import { Tabs } from "@lenso/ui";import Link from "next/link";import { styles } from "./source.stylex";export function RenderFunction() {  return (    <Tabs      defaultValue="getting-started"      xstyle={styles.root}      render={(props) => <div {...props} data-custom="foo" />}    >      <Tabs.ListContainer>        <Tabs.List aria-label="Options">          <Tabs.Tab            value="getting-started"            nativeButton={false}            render={<Link href="/docs/react/getting-started" />}          >            Getting Started          </Tabs.Tab>          <Tabs.Tab            value="components"            nativeButton={false}            render={<Link href="/docs/react/components" />}          >            Components          </Tabs.Tab>          <Tabs.Tab            value="releases"            nativeButton={false}            render={<Link href="/docs/react/releases" />}          >            Releases          </Tabs.Tab>          <Tabs.Indicator />        </Tabs.List>      </Tabs.ListContainer>      <Tabs.Panel value="overview" xstyle={styles.panel}>        <p>View your project overview and recent activity.</p>      </Tabs.Panel>      <Tabs.Panel value="analytics" xstyle={styles.panel}>        <p>Track your metrics and analyze performance data.</p>      </Tabs.Panel>      <Tabs.Panel value="reports" xstyle={styles.panel}>        <p>Generate and download detailed reports.</p>      </Tabs.Panel>    </Tabs>  );}

Local adaptation source above. Derived from HeroUI v3.2.6 source.

自定义样式

Tailwind CSS

此预览复用英文版适配,不代表中文源示例已完成本地实现。

"use client";export { CustomStyles } from "./source";

Local adaptation source above. Derived from HeroUI v3.2.6 source.

全局 CSS

若要自定义组件类,可使用 @layer components 指令。了解更多。

@layer components {  .tabs__list {    @apply rounded-xl border border-border bg-surface p-1;  }
  .tabs__tab {    @apply rounded-lg font-medium;  }
  .tabs__indicator {    @apply rounded-lg bg-foreground shadow-sm;  }
  .tabs--secondary > .tabs__list-container > .tabs__list {    @apply border-b border-border bg-transparent p-0;  }
  .tabs--secondary > .tabs__list-container .tabs__indicator {    @apply rounded-none bg-accent;  }}

样式参考

HeroUI 遵循 BEM 方法论,确保组件变体与状态可复用且易于自定义。

CSS 类

Tabs 组件使用以下 CSS 类(查看源码样式):

基础类 [!toc]

  • .tabs - Tabs 根容器
  • .tabs__list-container - 标签列表容器外层包裹
  • .tabs__list-container__scroller - 标签列表的可滚动容器(处理溢出与渐隐边缘)
  • .tabs__list-container__scroll-prev - 向前(左 / 上)滚动的箭头按钮
  • .tabs__list-container__scroll-next - 向后(右 / 下)滚动的箭头按钮
  • .tabs__list - 标签列表容器
  • .tabs__tab - 单个标签按钮
  • .tabs__separator - 标签之间的分隔线
  • .tabs__panel - 标签面板内容
  • .tabs__indicator - 标签指示器

方向属性 [!toc]

  • .tabs[data-orientation="horizontal"] - 水平标签布局(默认)
  • .tabs[data-orientation="vertical"] - 垂直标签布局

变体类 [!toc]

  • .tabs--secondary - 次要类型变体,使用下划线指示器

对齐类 [!toc]

  • .tabs--align-start - 标签内容对齐到起始侧
  • .tabs--align-end - 标签内容对齐到结束侧

交互状态

组件同时支持 CSS 伪类与 data 属性:

  • Selected:[aria-selected="true"]
  • Hover::hover 或 [data-hovered="true"]
  • Focus::focus-visible 或 [data-focus-visible="true"]
  • Disabled:[aria-disabled="true"]

API 参考

Tabs

Prop类型默认值描述
variant"primary" | "secondary""primary"视觉样式变体。Primary 使用填充指示器,Secondary 使用下划线指示器
orientation"horizontal" | "vertical""horizontal"标签布局方向
align"start" | "center" | "end""center"每个标签内部内容的对齐方式
selectedKeystring-受控选中标签的 key
defaultSelectedKeystring-默认选中标签的 key
onSelectionChange(key: Key) => void-选中变化回调
classNamestring-附加 CSS 类
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, TabsRenderProps>-使用自定义 render 函数覆盖默认 DOM 元素

Tabs.List

Prop类型默认值描述
aria-labelstring-标签列表的无障碍标签
classNamestring-附加 CSS 类
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, TabListRenderProps>-使用自定义 render 函数覆盖默认 DOM 元素

Tabs.Tab

Prop类型默认值描述
idstring-标签唯一标识
isDisabledbooleanfalse是否禁用该标签
classNamestring-附加 CSS 类
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, TabRenderProps>-使用自定义 render 函数覆盖默认 DOM 元素

Tabs.Separator

Prop类型默认值描述
classNamestring-附加 CSS 类

Tabs.Panel

Prop类型默认值描述
idstring-与对应 Tab id 匹配的面板标识
classNamestring-附加 CSS 类
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, TabPanelRenderProps>-使用自定义 render 函数覆盖默认 DOM 元素

相关案例

See upstream Tabs showcases. Product showcases are not part of the local component runtime.

相关组件