前端UI组件【免费下载链接】fastThe adaptive interface system for modern web experiences.项目地址https://gitcode.com/gh_mirrors/fa/fast点击查看免费下载foregroundOnAccentRest是 FAST Frame 设计系统microsoft/fast-components中一个核心的颜色 Design Token它以CSSDesignTokenSwatch类型向样式表提供“置于强调色背景上的静止状态前景色”。本文以该 Token 为主线讲解其签名语义、在自适应颜色系统Adaptive Color System中的算法定位、rest/hover/active/focus 状态族以及如何在 accent 按钮样式和高对比度forced-colors场景中正确使用它。一、Token 签名解析类型与归属依据 API 文档 fast-components.foregroundonaccentrest.md该变量的完整类型签名如下foregroundOnAccentRest: import(microsoft/fast-foundation).CSSDesignTokenSwatch逐层拆解这条签名变量名foregroundOnAccentRest命名遵循“用途 状态”的规则——foreground表示该值面向文本、图标等轻量级前景内容OnAccent表示其语义是“放置于 accent 色彩之上”Rest表示组件处于默认静止状态非 hover、非 active、非 focus。import(microsoft/fast-foundation).CSSDesignToken类型来源于microsoft/fast-foundation的 Design Token 体系。作为CSSDesignToken它既可在 TypeScript 中以变量形式取值也会在运行时向 DOM 输出对应的 CSS 自定义属性供组件样式直接消费。泛型参数SwatchSwatch在 FAST 的颜色体系中代表一个可用的颜色样本参见 fast-components 变量索引 中对Swatch、Palette的定义Palette是Swatch实例的集合。因此该 Token 的值是一个具体的颜色。从 API 文档结构看该 Token 隶属于microsoft/fast-componentsFAST Frame导出的变量集合与accentFillRest、accentForegroundRest、neutralForeground等一批颜色 Token 并列共同构成 FAST Frame 的令牌化样式体系。二、算法定位foregroundOnAccent 的工作原理在 FAST Frame 的 自适应颜色系统 中颜色由“Recipe”算法 输入值的组合生成。foregroundOnAccent是一类特殊的前景色 Recipe其关键特征如下无状态Not stateful与accentFill、accentForeground等支持 rest/hover/active/focus 四态的 Recipe 不同foregroundOnAccent本身不区分交互状态各状态的值由 Token 层派生详见下一节。不使用 accent palette但专为 accent 背景设计算法并不从 accent 色板中取色而是根据传入的contrastTarget对比度目标值直接在黑色与白色之间二选一。优先返回白色因为 accent 按钮最常见的视觉惯例是“accent 背景 白色文字”算法在对比度允许时优先给出白色以此满足 WCAG 对比度要求并保持明暗模式下的视觉一致性。需要特别说明的是该算法“返回黑或白”的能力由contrastTarget这一输入驱动——这正是自适应颜色系统“根据所在容器颜色自动适配”的核心机制同一个 Recipe 在浅色与深色模式下都能推导出可达标的前景色。三、状态族与 Token 变体虽然算法本身无状态但microsoft/fast-components为“置于 accent 之上”的前景色导出了一整套按交互状态命名的CSSDesignTokenSwatch变量见 fast-components 变量索引本文的主角foregroundOnAccentRest只是其中一员Token 变量语义foregroundOnAccentRest默认静止状态的前景色foregroundOnAccentHover悬停状态的前景色见 fast-components.foregroundonaccenthover.mdforegroundOnAccentActive按下/激活状态的前景色foregroundOnAccentFocus获得焦点状态的前景色foregroundOnAccentRestLarge大字号large场景下的静止状态前景色见 fast-components.foregroundonaccentrestlarge.mdforegroundOnAccentHoverLarge/foregroundOnAccentActiveLarge/foregroundOnAccentFocusLarge对应的大字号变体foregroundOnAccentRecipe底层DesignTokenColorRecipe形式的 Recipe Token见 fast-components.foregroundonaccentrecipe.md由此可以看出 FAST 的 Token 分层设计*Recipe层保存算法与输入配置*Rest/Hover/Active/Focus层输出可直接用于样式的具体颜色*Large变体则针对需要更大对比度目标的文字场景单独推导。实际开发中样式表通常直接消费foregroundOnAccentRest这样的终态 Token。四、实战accent 按钮样式中的用法FAST 官方文档在 高对比度指南 中给出了foregroundOnAccentRest最典型的应用场景——accent 按钮export const AccentButtonStyles css :host([appearanceaccent]) { background: ${accentFillRest}; color: ${foregroundOnAccentRest}; } :host([appearanceaccent]:hover) { background: ${accentFillHover}; } :host([appearanceaccent]:active) .control:active { background: ${accentFillActive}; } :host([appearanceaccent]) .control:${focusVisible} { box-shadow: 0 0 0 calc(${focusStrokeWidth} * 1px) inset ${focusStrokeInner}; } :host([appearanceaccent][disabled]) { opacity: ${disabledOpacity}; background: ${accentFillRest}; } 要点解读background使用同族的accentFillRestcolor使用foregroundOnAccentRest二者配对即可保证 accent 背景上的文字对比度达标。按钮的 hover/active 只替换背景色accentFillHover/accentFillActive前景色仍沿用 rest 值——因为foregroundOnAccent返回的黑/白在强调色明暗变化下依然适用。使用方式与 FAST 的css标签模板完全一致Token 以${...}插值形式进入样式运行时由 Design Token 体系解析为 CSS 自定义属性值。五、高对比度模式下的正确姿势foregroundOnAccentRest保障的是正常配色下的对比度在 Windows 高对比度等forced-colors场景中UA 会强制使用用户选定的受限调色板此时应补充独立的样式分支。FAST 为此提供了forcedColorsStylesheetBehavior将forced-colors样式包裹在行为中由 CSS 媒体查询条件决定是否附加避免在非高对比度环境下产生无谓的运行时开销。针对上述 accent 按钮的补全示例同样摘自 高对比度指南export const AccentButtonStyles css /* ... */ .withBehaviors( forcedColorsStylesheetBehavior( css :host([appearanceaccent]) .control { forced-color-adjust: none; background: ${SystemColors.Highlight}; color: ${SystemColors.HighlightText}; } :host([appearanceaccent]) .control:hover, :host([appearanceaccent]:active) .control:active { background: ${SystemColors.HighlightText}; border-color: ${SystemColors.Highlight}; color: ${SystemColors.Highlight}; } :host([appearanceaccent]) .control:${focusVisible} { border-color: ${SystemColors.ButtonText}; box-shadow: 0 0 0 2px ${SystemColors.HighlightText} inset; } :host([appearanceaccent][disabled]), :host([appearanceaccent][disabled]) .control, :host([appearanceaccent][disabled]) .control:hover { background: ${SystemColors.ButtonFace}; border-color: ${SystemColors.GrayText}; color: ${SystemColors.GrayText}; opacity: 1; } ) );这里不再使用foregroundOnAccentRest而是改用 CSS 系统颜色关键字SystemColors枚举。原因在于forced-colors模式下 UA 会接管配色Token 推导的黑/白不再可靠同时示例通过forced-color-adjust: none移除 UA 对文本元素自动施加的背板并用Highlight/HighlightText对、GrayText与opacity: 1分别还原选中态和禁用态的对比度。六、配套 Token 与使用建议围绕 accent 配色foregroundOnAccentRest通常与以下 Token 协同使用均可从 fast-components 变量索引 查阅accentFillRest/accentFillHover/accentFillActive/accentFillFocusaccent 填充色状态族构成按钮、开关等组件的背板accentColor、accentPalette全局 accent 主色及其色板是 Recipe 推导的输入foregroundOnAccentRestLarge等大字号变体需要更高对比度目标的大文本场景。两点实践提醒背景配对使用foregroundOnAccent*系列语义上“放置于 accent 之上”因此应搭配 accent 系背景使用而非任意中性背景。自定义属性不可直接覆盖FAST 的自适应颜色系统完全由 JavaScript 驱动并向 DOM 输出 CSS 自定义属性若在 CSS 中直接声明同名自定义属性系统无法感知组件将渲染出错误颜色并引发可访问性问题。需要调整值时应使用 Design Token 的setValueFor()API 编程式设置。七、小结与延伸阅读foregroundOnAccentRest看似只是一个颜色变量实则是 FAST 自适应颜色系统的缩影Recipe 算法负责在“对比度达标”约束下自动决策黑/白前景色CSSDesignTokenSwatch类型负责把决策结果接入 TypeScript 与 CSS 两个世界而 rest/hover/active/focus 与 Large 变体则覆盖了组件全部交互状态与字号需求。算法原理与完整 Recipe 清单自适应颜色系统高对比度与 forced-colors 完整实战High Contrast in FASTDesign Token 设置与自定义Design Tokens全部 API 索引fast-components API赞分享前端UI组件【免费下载链接】fastThe adaptive interface system for modern web experiences.项目地址https://gitcode.com/gh_mirrors/fa/fast点击查看免费下载相关推荐FAST 颜色系统中 rgbToRelativeLuminance() 详解WCAG 相对亮度计算与对比度合规FAST 颜色系统中 rgbToRelativeLuminance 详解WCAG 相对亮度计算与对比度合规 rgbToRelativeLuminance 是前端UI组件FAST Colors 1.x ColorScale.findNextColor() 方法详解在色阶上按对比度自动搜索下一个颜色FAST Colors 1.x ColorScale.findNextColor 方法详解在色阶上按对比度自动搜索下一个颜色 导读 本文基于当前仓库中 mi前端UI组件development-guide前端开发规范CSS与JavaScript最佳实践development guide前端开发规范CSS与JavaScript最佳实践 在现代前端开发中遵循统一的规范和最佳实践是确保代码质量、提升开发效率的关上一篇5分钟快速上手茉莉花插件Zotero中文文献管理效率提升300%下一篇XXMI启动器二次元游戏模组管理的终极完整解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考