antd v5 Badge 组件 Token 定制实战:徽标数 Component Token 的完整配置与源码解析 前端UI组件设计系统【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址https://gitcode.com/gh_mirrors/ant/ant-design点击查看免费下载本文以 antd 仓库中 Badge 组件官方的 Component Token 调试示例component-token.md为主体完整解读 v5 设计体系下徽标数组件级主题变量Component Token的 8 个可调项及其默认值推导逻辑并结合 components/badge/style/index.ts 源码说明这些 Token 如何最终落到 CSS帮助你在项目中通过ConfigProvider的theme.components.Badge精确控制徽标的高度、字号、圆点尺寸与层级而不是再去 hack 全局样式。一、从 Component Token Debug 示例说起components/badge/demo/component-token.md 本身是对 Badge 组件官方调试示例的一句话描述原文即 Component Token Debug。它在 components/badge/index.zh-CN.md 中以如下方式注册进文档站code src./demo/component-token.tsx debug组件 Token/code注意这里的debug属性——它表示该示例仅在调试模式下展示用于验证主题机制本身而非面向业务场景的推荐用法。示例源码位于 components/badge/demo/component-token.tsx开头注释也明确写着 Test usage. Do not use in your production它的价值在于一次性把 Badge 全部组件 Token 调成非默认值直观验证每个 Token 的实际作用import React from react; import { NotificationOutlined } from ant-design/icons; import { Avatar, Badge, ConfigProvider, Space } from antd; /** Test usage. Do not use in your production. */ export default () ( ConfigProvider theme{{ components: { Badge: { indicatorHeight: 24, // 徽标数字角标高度 indicatorHeightSM: 18, // 小号徽标高度 dotSize: 4, // 点状徽标dot尺寸 textFontWeight: bold, // 徽标文本粗细 statusSize: 8, // 状态点status尺寸 }, }, }} Space directionvertical Badge count{5} Avatar shapesquare sizelarge / /Badge Badge count{26} / Badge dot NotificationOutlined / /Badge Badge statussuccess textSuccess / Badge sizesmall count{0} showZero / /Space /ConfigProvider );示例覆盖了 Badge 的五种形态包裹型数字角标count、独立数字角标、点状徽标dot、状态点status和小号角标sizesmall。配置只作用在这个ConfigProvider的作用域内不影响树外其他组件。二、Badge 可配置的 8 个 Component TokenBadge 的全部组件 Token 在样式入口 components/badge/style/index.ts 中以ComponentToken接口声明共 8 个逐一列出并结合源码给出默认值推导Token说明类型默认值推导源码indicatorZIndex徽标 z-indexnumber \| stringautoindicatorHeight徽标高度number \| stringMath.round(fontSize × lineHeight) − 2 × lineWidthindicatorHeightSM小号徽标高度number \| stringfontSizedotSize点状徽标尺寸numberfontSizeSM / 2textFontSize徽标文本尺寸numberfontSizeSMtextFontSizeSM小号徽标文本尺寸numberfontSizeSMtextFontWeight徽标文本粗细number \| stringnormalstatusSize状态徽标尺寸numberfontSizeSM / 2默认值由 prepareComponentToken 从全局 Token 推导export const prepareComponentToken: GetDefaultTokenBadge (token) { const { fontSize, lineHeight, fontSizeSM, lineWidth } token; return { indicatorZIndex: auto, indicatorHeight: Math.round(fontSize * lineHeight) - 2 * lineWidth, indicatorHeightSM: fontSize, dotSize: fontSizeSM / 2, textFontSize: fontSizeSM, textFontSizeSM: fontSizeSM, textFontWeight: normal, statusSize: fontSizeSM / 2, }; };这体现了 v5 的设计意图组件 Token 的默认值不是拍死的常量而是随全局 Seed Token如fontSize默认见 components/theme/themes/seed.ts 中fontSize: 14联动推导。你在全局调大fontSize时角标高度、圆点尺寸会跟着变只有当你显式配置theme.components.Badge中对应项时才会以你的配置覆盖推导结果。三、Token 如何变成 CSSAlias Token 与样式消费点3.1 派生 Alias Token除组件 Token 外Badge 还有一组组件专属的派生变量BadgeTokenstyle/index.ts#L52-L63由 prepareToken 从全局 Token 计算而来const badgeToken mergeTokenBadgeToken(token, { badgeFontHeight, // fontHeight badgeShadowSize, // lineWidth外圈描边宽度 badgeTextColor, // colorBgContainer角标文字色 badgeColor, // colorError默认红 badgeColorHover, // colorErrorHover badgeShadowColor: colorBorderBg, // 角标外圈与背景分离的描边色 badgeProcessingDuration: 1.2s, // processing 状态呼吸动画时长 badgeRibbonOffset: marginXS, // 缎带偏移 // Follow token just by Design. Not related with token badgeRibbonCornerTransform: scaleY(0.75), // 缎带折角形变 badgeRibbonCornerFilter: brightness(75%), // 缎带折角明暗 });其中badgeColor colorError说明了默认红色角标的来源——要改默认红走全局colorError要在仅 Badge 作用域改则可在theme.components.Badge中直接覆盖colorError组件级配置同样允许覆盖该组件消费的 Alias Token。3.2 各 Token 在样式中的消费位置组件 Token 与派生 Token 经 genStyleHooks(Badge, …) 合并为完整的FullTokenBadge后在 genSharedBadgeStyle 中被消费关键消费点如下数字角标-countstyle/index.ts#L137-L152zIndex: indicatorZIndex、minWidth/height/lineHeight全部取indicatorHeightlineHeight与高度相等使文字垂直居中fontSize: textFontSize、fontWeight: textFontWeight圆角为indicatorHeight / 2外圈描边0 0 0 {badgeShadowSize} {badgeShadowColor}让角标与图标背景自然分离小号角标-count-smstyle/index.ts#L165-L171尺寸、字号、行高、圆角分别由indicatorHeightSM、textFontSizeSM驱动对应sizesmall的渲染分支见 components/badge/index.tsx 中${prefixCls}-count-sm类的挂载点状徽标-dotstyle/index.ts#L181-L189宽高与圆角完全由dotSize决定状态点-status-dotstyle/index.ts#L210-L218width/height取statusSize对应Badge statussuccess /等形态processing 状态的外圈脉冲动画时长则取派生值badgeProcessingDuration。从源码结构看每个 Token 与具体的 CSS 属性一一对应、无交叉这正是调试示例能把 5 个 Token 一次全改、并预期每个视觉变化都可归因到单一配置项的原因。四、把配置写进项目ConfigProvidertheme.components.Badge按官方主题定制文档 docs/react/customize-theme.zh-CN.md组件 Token 通过theme.components配置各个组件会开放自己的 Component Token 来实现针对组件的样式定制能力不同的组件之间不会相互影响。以调试示例中的配置为例落到真实项目的最小可用写法ConfigProvider theme{{ components: { Badge: { // 只覆盖需要调整的子集其余仍走默认推导 indicatorHeight: 24, indicatorHeightSM: 18, dotSize: 4, textFontWeight: bold, statusSize: 8, }, }, }} App / /ConfigProvider使用时的两条关键规则来自 customize-theme.zh-CN.md 的修改组件变量一节默认仅覆盖不派生默认情况下所有组件变量都只是覆盖不会基于 Seed Token 计算派生变量。即改了indicatorHeight后依赖它的圆角等会在样式函数内按新的indicatorHeight取值重新计算因为圆角表达式本身就是calc(indicatorHeight).div(2)见 style/index.ts#L150组件级 algorithm 5.8.0版本中组件变量支持传入algorithm属性可以开启派生计算或传入自定义算法components.Badge.algorithm默认为false设为true时继承全局算法。此外配置支持嵌套作用域多个ConfigProvider层层包裹时子树会继承外层主题inherit默认为true适合某个页面/弹层内徽标样式不同的场景。五、从 4.x Less 变量迁移过来如果你的项目从 antd 4.x 升级而来原来通过 Less 变量调徽标的写法有明确的对应关系官方对照表见 docs/react/migrate-less-variables.zh-CN.mdBadge 徽标数小节4.x less 变量5.x Component Token备注zindex-badgeindicatorZIndex-badge-heightindicatorHeight-badge-height-smindicatorHeightSM-badge-dot-sizedotSize-badge-font-sizetextFontSize-badge-font-size-smtextFontSizeSM-badge-font-weighttextFontWeight-badge-status-sizestatusSize-badge-text-colorcolorBgContainer全局 Tokenbadge-colorcolorError全局 Token值得注意的是后两行4.x 的badge-text-color、badge-color在 5.x 中不再有独立组件 Token而是直接由全局 TokencolorBgContainer/colorError派生对应 prepareToken 中badgeTextColor token.colorBgContainer、badgeColor token.colorError。想换角标主色优先动全局colorError或在组件级覆盖colorError。组件文档页 index.zh-CN.md 的主题变量Design Token一节通过ComponentTokenTable componentBadge动态渲染上表即站点文档中的 Token 表与源码中ComponentToken接口保持同源。六、小结与延伸阅读围绕这个调试示例你可以按以下路径在仓库中继续深入Token 定义与默认值推导components/badge/style/index.tsComponentToken接口、prepareComponentToken、prepareToken配置入口文档docs/react/customize-theme.zh-CN.md含组件级algorithm的开启方式与 docs/react/migrate-less-variables.zh-CN.md4.x Less 变量对照相邻调试示例colorful-with-count-debug.tsx 演示多彩徽标叠加count的组合形态components/badge/index.zh-CN.md 汇总了count、dot、status、size、offset等全部 Badge 属性 API。适用前提以上结论基于当前仓库中的 antd 5.20.1 源码package.json组件级algorithm能力需要 5.8.0。掌握这套模式后替换组件名即可复用——v5 中每个组件都在components/name/style下以同样的ComponentTokenprepareComponentTokengenStyleHooks三件套暴露可定制面。赞分享前端UI组件设计系统【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址https://gitcode.com/gh_mirrors/ant/ant-design点击查看免费下载相关推荐antd-mobile Badge 徽标组件完整指南属性、CSS 变量与源码实现解析antd mobile Badge 徽标组件完整指南属性、CSS 变量与源码实现解析 Badge 是 ant design mobile 中用于在元素右上角展UI组件前端移动开发Ant Design Progress 组件 Token 定制从 Component Token Demo 到源码实现全解析Ant Design Progress 组件 Token 定制从 Component Token Demo 到源码实现全解析 本文以 Ant Design 官前端UI组件设计系统antd Divider 组件 Token 定制与调试实践从 ConfigProvider 配置到源码级实现解析antd Divider 组件 Token 定制与调试实践从 ConfigProvider 配置到源码级实现解析 导读 本篇文章以 ant design 仓库前端UI组件设计系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考