用法

请始终使用语义化 token,而不是原始的 Tailwind 颜色。这样可以确保你的 UI 自动适配浅色模式和深色模式,并让组件在各主题之间保持一致。

正确

<div className="bg-lark-base text-lark-default border-lark-hairline">
  <button className="bg-lark-brand text-white">Primary</button>
  <button className="bg-lark-control text-lark-default">Secondary</button>
</div>

错误

{
  /* Never use raw Tailwind colors */
}
<div className="bg-white dark:bg-gray-900 text-black dark:text-white">
  <button className="bg-blue-500">Primary</button>
</div>;

Lint 规则会强制执行这一点:no-primitive-colors 规则会标记任何原始 Tailwind 颜色,例如 bg-blue-500。

模式

在父元素上设置 data-mode 即可控制浅色/深色模式。请不要使用 Tailwind 的 dark: 变体——语义化 token 已通过 CSS 的 light-dark() 自动处理深色模式。

// Set mode on html or body
<html data-mode="light">  // Light mode
<html data-mode="dark">   // Dark mode

// Components automatically adapt - no dark: variants needed
<div className="bg-lark-base text-lark-default" />

主题

主题会在保持 token 名称不变的前提下覆盖语义化 token 的值。在父元素上设置 data-theme 即可应用主题。

可用主题

  • lark——默认的 Universe Design 主题(无需设置属性)
// The default theme is applied automatically; data-theme is optional
<div data-theme="lark">
  <Button>Lark Styled</Button>
</div>

// Themes work with both light and dark mode
<html data-mode="dark" data-theme="lark">

主题生成器

主题在一个集中配置中定义,并生成为 CSS 文件。主题生成器确保所有主题之间保持一致。


# List all tokens and their theme overrides

pnpm --filter @lark-ui/core codegen:themes --list

# Generate theme CSS files

pnpm --filter @lark-ui/core codegen:themes

# Preview changes without writing files

pnpm --filter @lark-ui/core codegen:themes --dry-run

主题配置:packages/lark/scripts/theme-generator/config.ts

创建新主题

在配置文件中添加主题覆盖项。只覆盖需要改动的 token——其他所有 token 都继承自基础的 lark 主题。

// In scripts/theme-generator/config.ts
export const THEME_CONFIG: ThemeConfig = {
  color: {
    "lark-base": {
      newName: "",
      theme: {
        lark: {
          light: "var(--color-white, #fff)",
          dark: "var(--color-black, #000)",
        },
        // Add your theme override
        myTheme: {
          light: "#f0f4f8",
          dark: "#1a1f2e",
        },
      },
    },
    // ... other tokens
  },
};

// Add to available themes
export const AVAILABLE_THEMES = ["lark", "myTheme"] as const;

然后运行 pnpm codegen:themes 生成 CSS。

语义化 token

我们使用语义化 token 按用途对颜色进行分组。请选择与元素角色相匹配的 token,而不是你想要达到的具体颜色。

语义化 token 是按角色命名的,而不是按色相命名。像 bg-lark-danger 这样的 token 传达的是意图——它并不暗指某种特定的红色,其具体数值可以随主题或颜色模式变化,而无需改动你的组件代码。

表面层级

表面层级用于在 UI 中建立深度和层次。请从最外层背景开始,按顺序向内使用。

token用途
bg-lark-canvas最外层的页面背景——位于所有内容之后
bg-lark-base组件的默认背景
bg-lark-elevated略微抬升的表面层级,例如 LayerCard.Secondary
bg-lark-recessed凹陷的表面层级,填充色略深,例如分段式 Tabs 的背景
bg-lark-tint用于表格或悬停状态的浅色着色背景
bg-lark-contrast高对比度的反色背景

品牌色

token用途
bg-lark-brand主要品牌色背景
bg-lark-brand-hover品牌色背景的悬停状态
bg-lark-brand-pressed品牌色背景的按下状态
bg-lark-fill-hover中性元素(列表项、菜单项)的悬停填充
bg-lark-fill-pressed中性元素的按下填充
bg-lark-fill-selected选中项的品牌色淡填充
bg-lark-fill-active品牌色元素的激活填充
bg-lark-mask模态遮罩

语义化状态色

每种状态色都有两个变体:用于图标和指示器的实色,以及用于内容背后背景填充的 -tint 变体(即 Badge 徽标或 Banner 通告栏)。

token用途
bg-lark-info信息指示器
bg-lark-success成功指示器
bg-lark-warning警告指示器
bg-lark-danger错误/危险操作指示器

状态圆点使用实色 token bg-lark-*,图标使用 fill-lark-*,边框和描边使用 border-lark-*、ring-lark-*。通告栏和徽标使用 -tint 变体,并搭配不同的透明度数值。

出错了。
import { WarningIcon } from "@phosphor-icons/react";

export function StatusBannerDemo() {
  return (
    <div className="flex items-center gap-2 rounded-lg bg-lark-danger-tint/70 p-4">
      <WarningIcon weight="fill" className="fill-lark-danger" />
      <span className="text-sm text-lark-danger">出错了。</span>
    </div>
  );
}

文字颜色

token用途
text-lark-default主要正文文字
text-lark-strong对比度高于默认值的文字,用于标题和重要标签
text-lark-subtle弱化文字,用于说明文字、图注或次级标签
text-lark-inactive已禁用或非活跃状态的文字
text-lark-placeholder输入框中的占位符文字
text-lark-inverse用于高对比度或反色背景上的文字
text-lark-link链接文字
text-lark-info信息色文字
text-lark-success成功色文字
text-lark-warning警告色文字
text-lark-danger错误/危险操作文字

语义化文字颜色(即 text-lark-success)默认更深,以便在 tint-* 背景上提供更好的对比度和可读性。

边框与描边

token用途
lark-hairline在没有阴影的平面表面之间用于区分的边框/描边颜色(即 LayerCard)。
lark-line更粗的边框/描边颜色,配合阴影一起界定抬升表面的边缘。
lark-border

表单控件(Input、Select、Checkbox 等)的边框颜色。 悬停与聚焦时边框会变为品牌色。

token 参考

在页头切换主题,即可查看 token 如何适配。标记为「global」的 token 是需要显式启用的类,无论使用哪个主题都可用。

颜色

共显示 98 个 token

文本颜色(14)

--text-color-lark-default
浅色#1f2329
深色#ebebeb
--text-color-lark-inverse
浅色#ffffff
深色#1f2329
--text-color-lark-strong
浅色#0f1114
深色#f5f6f7
--text-color-lark-subtle
浅色#646a73
深色#a6a6a6
--text-color-lark-inactive
浅色#bbbfc4
深色#5f5f5f
--text-color-lark-placeholder
浅色#8f959e
深色#757575
--text-color-lark-brand
浅色#3370ff
深色#4c88ff
--text-color-lark-brand-hover
浅色#4e83fd
深色#669eff
--text-color-lark-brand-pressed
浅色#245bdb
深色#75a4ff
--text-color-lark-link
浅色#3370ff
深色#4c88ff
--text-color-lark-info
浅色#3370ff
深色#4c88ff
--text-color-lark-success
浅色#2ea121
深色#51ba43
--text-color-lark-danger
浅色#f54a45
深色#f05b56
--text-color-lark-warning
浅色#ff8800
深色#f3871b

表面层级、状态与主题颜色(58)

--color-lark-canvas
浅色#f5f6f7
深色#1a1a1a
--color-lark-elevated
浅色#ffffff
深色#262626
--color-lark-recessed
浅色#eff0f1
深色#1f1f1f
--color-lark-base
浅色#ffffff
深色#1a1a1a
--color-lark-tint
浅色#f5f6f7
深色#1f1f1f
--color-lark-contrast
浅色#1f2329
深色#f5f6f7
--color-lark-overlay
浅色#f2f3f5
深色#1f1f1f
--color-lark-control
浅色#eff0f1
深色#262626
--color-lark-interact
浅色#dee0e3
深色#373a40
--color-lark-fill
浅色#f2f3f5
深色#262626
--color-lark-subtle
浅色#646a73
深色#a6a6a6
--color-lark-placeholder
浅色#8f959e
深色#757575
--color-lark-outline
浅色#8f959e
深色#757575
--color-lark-disabled
浅色#bbbfc4
深色#5f5f5f
--color-lark-disabled-brand
浅色#bacefd
深色#194294
--color-lark-scroll-thumb
浅色#b8babc
深色#595959
--color-lark-icon
浅色#2b2f36
深色#e8e8e8
--color-lark-brand-tint
浅色#e1eaff
深色#173166
--color-lark-divider
浅色rgba(31, 35, 41, 0.15)
深色rgba(207, 207, 207, 0.15)
--color-lark-tag-neutral-bg
浅色rgba(31, 35, 41, 0.10)
深色rgba(166, 166, 166, 0.20)
--color-lark-fill-hover
浅色rgba(31, 35, 41, 0.08)
深色rgba(235, 235, 235, 0.08)
--color-lark-fill-pressed
浅色rgba(31, 35, 41, 0.12)
深色rgba(235, 235, 235, 0.12)
--color-lark-fill-selected
浅色rgba(51, 112, 255, 0.08)
深色rgba(76, 136, 255, 0.15)
--color-lark-fill-active
浅色rgba(51, 112, 255, 0.12)
深色rgba(76, 136, 255, 0.20)
--color-lark-mask
浅色rgba(0, 0, 0, 0.55)
深色rgba(0, 0, 0, 0.60)
--color-lark-brand
浅色#3370ff
深色#4c88ff
--color-lark-brand-hover
浅色#4e83fd
深色#669eff
--color-lark-line
浅色#dee0e3
深色#373a40
--color-lark-border
浅色#d0d3d6
深色#505050
--color-lark-hairline
浅色#e4e6eb
深色#2e3033
--color-lark-focus
浅色#3370ff
深色#4c88ff
--color-lark-brand-pressed
浅色#245bdb
深色#75a4ff
--color-lark-shadow-edge
浅色rgba(31, 35, 41, 0.12)
深色rgba(255, 255, 255, 0.10)
--color-lark-shadow-drop
浅色rgba(31, 35, 41, 0.08)
深色rgba(0, 0, 0, 0.30)
--color-lark-arrow-edge
浅色#dee0e3
深色transparent
--color-lark-arrow-stroke
浅色transparent
深色#373a40
--color-lark-info-tint
浅色rgba(51, 112, 255, 0.10)
深色rgba(76, 136, 255, 0.15)
--color-lark-info
浅色#3370ff
深色#4c88ff
--color-lark-info-outline
浅色#1456f0
深色#75a4ff
--color-lark-warning-tint
浅色rgba(255, 136, 0, 0.10)
深色rgba(243, 135, 27, 0.18)
--color-lark-warning
浅色#ff8800
深色#f3871b
--color-lark-warning-hover
浅色#ff9d4c
深色#db7018
--color-lark-warning-pressed
浅色#ed6d0c
深色#f89e44
--color-lark-warning-outline
浅色#ed6d0c
深色#f89e44
--color-lark-danger-tint
浅色rgba(245, 74, 69, 0.10)
深色rgba(240, 91, 86, 0.18)
--color-lark-danger
浅色#f54a45
深色#f05b56
--color-lark-danger-hover
浅色#f76964
深色#f6827e
--color-lark-danger-pressed
浅色#d83931
深色#d14642
--color-lark-danger-outline
浅色#c02a26
深色#f6827e
--color-lark-success-tint
浅色rgba(52, 199, 36, 0.10)
深色rgba(81, 186, 67, 0.18)
--color-lark-success
浅色#34c724
深色#51ba43
--color-lark-success-hover
浅色#5cd168
深色#35872a
--color-lark-success-pressed
浅色#32a645
深色#51ba43
--color-lark-success-outline
浅色#1a7526
深色#51ba43
--color-lark-notice-info
浅色#4e83fd
深色#4c88ff
--color-lark-notice-success
浅色#62d256
深色#51ba43
--color-lark-notice-warning
浅色#ffa53d
深色#f3871b
--color-lark-notice-danger
浅色#f76964
深色#f05b56

组件颜色(26)

Badge (12)

--text-color-lark-badge-orange-subtle
浅色#b26206
深色#fec48b
--text-color-lark-badge-teal-subtle
浅色#078372
深色#6fe8d8
--text-color-lark-badge-neutral-subtle
浅色#646a73
深色#eff0f1
--text-color-lark-badge-inverted
浅色#ffffff
深色#1f2329
--color-lark-badge-red
浅色#f54a45
深色#e22e28
--color-lark-badge-green
浅色#34c724
深色#32a645
--color-lark-badge-orange
浅色#ff8800
深色#ed6d0c
--color-lark-badge-purple
浅色#7f3bf5
深色#8d55ed
--color-lark-badge-teal
浅色#04b49c
深色#2dbeab
--color-lark-badge-blue
浅色#82a7fc
深色#4c88ff
--color-lark-badge-neutral
浅色#bbbfc4
深色#646a73
--color-lark-badge-inverted
浅色#1f2329
深色#ffffff

Banner (10)

--color-lark-banner-info
浅色rgba(51, 112, 255, 0.08)
深色rgba(76, 136, 255, 0.12)
--color-lark-banner-warning
浅色rgba(255, 136, 0, 0.10)
深色rgba(243, 135, 27, 0.15)
--color-lark-banner-info-solid
浅色#e1eaff
深色#152340
--color-lark-banner-warning-solid
浅色#feead2
深色#331b0b
--color-lark-banner-danger-solid
浅色#fde2e2
深色#3d1a19
--color-lark-banner-success-solid
浅色#d9f5d6
深色#0e2b0a
--color-lark-banner-info-outlined
浅色#f0f4ff
深色#152340
--color-lark-banner-success-outlined
浅色#e4fae1
深色#0e2b0a
--color-lark-banner-warning-outlined
浅色#fff3e5
深色#33230b
--color-lark-banner-danger-outlined
浅色#fef0f0
深色#3d1a19

Chart (1)

--color-lark-chart-grid
浅色#dee0e3
深色#434343

Code (1)

--color-lark-code-surface
浅色#f9fafb
深色#171717

Table (2)

--color-lark-table-head
浅色#f2f3f5
深色#373737
--color-lark-table-row-hover
浅色#eff0f1
深色#434343