首页/新闻资讯/正文详情

FAST 自适应颜色系统解析:foregroundOnAccentRest Design Token 与前景色对比度算法

发布时间:2026/9/26 2:57:13 来源:云帆数科 栏目:资讯中心
FAST 自适应颜色系统解析:foregroundOnAccentRest Design Token 与前景色对比度算法
前端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),仅供参考

相关推荐

零密钥的工作负载身份:nono集成SPIFFE/SPIRE完整教程
零密钥的工作负载身份:nono集成SPIFFE/SPIRE完整教程

零密钥的工作负载身份:nono集成SPIFFE/SPIRE完整教程 【免费下载链接】nono agent runtime security - zero trust, zero setup, zero latency. 项目地址: https://gitcode.com/gh_mirrors/non/nono nono 是一款面向 AI Agent 的开源零延迟沙箱,主… · 2026/9/26 2:57:07

NPM供应链投毒:从隐蔽触发机制到企业级防御实战
NPM供应链投毒:从隐蔽触发机制到企业级防御实战

我在一次应急响应里见过这样的场景:一个负责处理订单回调的Node.js服务,连续几周在凌晨2点到4点向一个陌生IP发送心跳数据包。查遍业务代码,谁也找不到问题点,最后发现问题出在node_modules里某个毫不起眼的依赖包——它在install… · 2026/9/26 2:57:07

yuzu Switch 模拟器第一次跑通完整指南
yuzu Switch 模拟器第一次跑通完整指南

yuzu Switch 模拟器第一次跑通完整指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu 是一款免费开源的任天堂 Switch 模拟器,用 C 编写,官方维护 Windows、Linux 和 Android 三个平台… · 2026/9/26 2:57:01

雅可比矩阵:从多元导数到机器学习与机器人学的核心工具
雅可比矩阵:从多元导数到机器学习与机器人学的核心工具

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:30:36

Redis分布式锁从SETNX到Redisson:高可用方案演进与踩坑复盘
Redis分布式锁从SETNX到Redisson:高可用方案演进与踩坑复盘

1. 从"能用"到"高可用":我在分布式锁这条路上踩过的坑聊到Redis分布式锁,大部分人第一反应就是SETNX加EXPIRE,或者直接甩出Redisson的几行代码。但真正从单机Redis一路走到集群环境,你会发现这套看似简单的机… · 2026/9/26 3:30:36

30亿参数小模型如何媲美千亿级大模型?Nanbeige4-3B 配 TaoToken 的配置与验证指南
30亿参数小模型如何媲美千亿级大模型?Nanbeige4-3B 配 TaoToken 的配置与验证指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:30:36

GCN-LSTM区域地下水位多井预测:从图构建到可复现工程实践
GCN-LSTM区域地下水位多井预测:从图构建到可复现工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:30:36

雷电模拟器广告关不干净?ADB 精准清理预装应用与启动项实战
雷电模拟器广告关不干净?ADB 精准清理预装应用与启动项实战

1. 为什么模拟器的广告总是“关不干净”很多人第一次用雷电模拟器,装完打开,先看到的是启动前的推荐位,进桌面之后右下角又冒出游戏推荐,过一会儿通知栏还弹一条“热门应用”。去设置里把能关的开关全关了,重启之后照旧… · 2026/9/26 3:30:36

vscode 插件和配置推荐:用 TaoToken 统一 Key 打通 AI 编程工具链
vscode 插件和配置推荐:用 TaoToken 统一 Key 打通 AI 编程工具链

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:30:30

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码