跳到主要内容

样式与动画

用 data-slot 与状态属性写样式;用 data-starting-style / data-ending-style 做入场与退场动画。

ui-sdk 组件不渲染样式。它们输出稳定的 data-slot 标识和一组 data-* 状态属性,以及若干 CSS 自定义属性。你的样式表 targeting 这些属性,就得到完全属于自己的外观。

三个抓手

  1. data-slot:部件的稳定名字,如 data-slot="select-trigger"、data-slot="dialog-content"。用它选中部件,不要用生成的类名或 id。
  2. 状态属性:data-open、data-closed、data-checked、data-pressed、data-selected、data-highlighted、data-disabled 等,随状态出现或消失。
  3. CSS 自定义属性:组件在根或弹出层上设置变量,如弹出层的 --anchor-width、--transform-origin,供你 sizing 与定位。
[data-slot="select-trigger"][data-open] {
  border-color: var(--color-brand);
}
[data-slot="select-item"][data-highlighted] {
  background: var(--color-accent);
}

样式层

可选默认外观在 @layer ui-sdk。在全局样式顶部声明 @layer ui-sdk;(Tailwind 项目放在 @import "tailwindcss" 之前),你的未分层样式自然覆盖它。

入场与退场

弹出层部件用两个属性标记动画的两端:

  • data-starting-style:打开后的第一帧存在。把「动画起点」的样式写在它上面,下一帧移除后过渡到打开态。
  • data-ending-style:关闭过程中存在。把「动画终点」的样式写在它上面,过渡结束后部件卸载(或保持挂载隐藏)。
[data-slot="dialog-content"] {
  transition: opacity 0.18s ease, translate 0.18s ease, scale 0.18s ease;
}
[data-slot="dialog-content"][data-starting-style],
[data-slot="dialog-content"][data-ending-style] {
  opacity: 0;
  translate: 0 12px;
  scale: 0.97;
}

需要由动画库驱动退场时,给内容传 keepMounted,让部件关闭后仍留在页面上(隐藏),由你的库接管退出动画。

弹出层的背景

模态弹出层进入浏览器顶层,用 ::backdrop 画遮罩,而不是一个 fixed 的 div——后者会被带 transform 的祖先裁剪:

[data-slot="dialog-content"]::backdrop {
  background: oklch(0.12 0.02 260 / 0.55);
  backdrop-filter: blur(3px);
}

看一套完整外观

下面的行为演示共用一套令牌与弹出层样式,覆盖菜单、弹出框、轻提示、对话框、警告对话框与文字提示:

菜单Menu

支持方向键导航、键入检索与 Esc 关闭。

弹出框Popover

基于锚点定位,点击外部或按 Esc 轻关闭。

轻提示Toast

堆叠队列管理,支持悬停展开、滑动清除与撤销。

对话框Dialog

进入浏览器顶层渲染,打开锁定焦点、关闭自动还原。

警告对话框AlertDialog

高风险操作显式确认,禁用外部点击误关闭。

文字提示 · 交互工具栏Tooltip + Toggle
悬停查看快捷键,点击切换激活状态:加粗

输入关键词搜索…

↑↓ 移动↵ 选择Esc 关闭