圆角
圆角共七个变量:三档跟随基准值派生,三档固定大圆角,外加胶囊形。 数值来自仓库内的 packages/tokens/src/scales.ts,也可以在设计变量表里查。
各档的值与用途
| 变量 | 值 | 组件里的典型用法(按 packages/ui / packages/widgets 的 CSS 统计,不穷举) |
|---|---|---|
--pt-radius-sm | calc(var(--pt-radius) - 4px) = 6px | 小号控件(按钮、输入框、选择器等的 size="sm");复选框方框;Tooltip 气泡;列表行(pt-option、菜单项、命令项,utils/list-item.css);标签页触发器、切换按钮 |
--pt-radius-md | calc(var(--pt-radius) - 2px) = 8px | 默认与大号控件(按钮、输入框、多行输入框、选择器触发器、输入组);贴着触发器的弹层(utils/popup-panel.css:popover、hover-card、combobox、菜单 / 右键菜单,以及 pt-select 列表);pt-command、pt-item、轻提示、骨架屏、pt-table 外框 |
--pt-radius | 10px | 大块面板:pt-modal、pt-drawer、pt-alert、pt-empty-state、pt-tabs 的列表底板 |
--pt-radius-12 | 12px | 卡片(pt-card 默认值) |
--pt-radius-16 | 16px | 从底部滑出的抽屉形态的上两角(utils/drawer.css:pt-drawer,窄屏下的 pt-modal、pt-popover、pt-select) |
--pt-radius-20 | 20px | 目前没有组件使用,留给更大的容器 |
--pt-radius-full | 9999px | 胶囊与圆形:pt-badge、pt-avatar、pt-switch / pt-slider / pt-progress 的轨道与滑块、滚动条滑块、抽屉拖拽条、输入框的清除按钮 |
按钮、输入框、选择器、多行输入框还各自开放了组件级变量(如 --pt-button-radius),默认值就是上表的档位, 要单独改某一类控件时覆盖它,而不是覆盖全局档位。见各组件页的 API 表。
「弹层用 10」与代码不一致的地方
tokens 源码注释写的是「控件用 sm / md,卡片弹层用 10」。实际代码里用 10 的是弹窗、抽屉这类大块面板; 下拉列表、popover、菜单这类贴着触发器的弹层用的是 md(8px),与触发器同档;卡片用的是 12。 以代码为准。
派生方式
--pt-radius 是唯一的基准值,md 与 sm 是从它减出来的:
--pt-radius: 10px;
--pt-radius-md: calc(var(--pt-radius) - 2px); /* 8px */
--pt-radius-sm: calc(var(--pt-radius) - 4px); /* 6px */所以整体收紧或放大圆角只需要改一个值:
:root {
--pt-radius: 6px; /* md 变 4px,sm 变 2px */
}12 / 16 / 20 与 full 是固定值,不跟着基准走。
局部覆盖只在重新声明刻度的作用域上生效
md / sm 的 calc() 是在声明它们的元素上求值的 —— 也就是 :root,以及 tokens.css 里 重新声明整套刻度的 .pt-theme、.pt-light / .pt-dark、[data-pt-theme='light'] / [data-pt-theme='dark']。 在一个普通的 <div> 上写 --pt-radius: 6px,只有直接用 --pt-radius 的地方(弹窗)会变, md / sm 仍是从根上继承下来的 8 / 6。要让一棵子树整体换一套圆角,给它加上 class="pt-theme",并在同一个元素上覆盖 --pt-radius。
反过来也成立:页面里的 .pt-dark / .pt-light 主题孤岛会把整套刻度重新声明成默认值, 在 :root 上改的 --pt-radius 进不去孤岛。需要全局生效时,把孤岛的选择器也写进覆盖规则里。
基准值不要小于 4px:sm 是基准减 4,低于 4 会得到负数,那条 border-radius 声明整个失效(变成直角)。
禁忌
- 不要写死 px。
border-radius: 8px在使用方调整--pt-radius后就和组件对不上了; 写var(--pt-radius-md)。 - 嵌套时外大内小。 内层元素的圆角不能大于外层容器,否则四角会露出外层的底色。 kit 里的例子:
pt-select的弹层是 md(8px),里面的选项行是 sm(6px)。 - 胶囊形只用
--pt-radius-full。 不要用50%或999px这类手写值代替:对非正方形元素50%画出来的是椭圆,不是胶囊。 - 不要在组件外再定义一套圆角。 需要新档位时提给设计规范,由 tokens 统一加。