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),仅供参考

相关新闻

MySQL驱动连接不上?从选型、SSL到连接池的排坑指南

MySQL驱动连接不上?从选型、SSL到连接池的排坑指南

写这篇东西的起因,是最近连续被好几个人问同一个问题:“我明明下载了MySQL驱动,为什么连不上数据库?”结果点开他们发来的截图一看,有人装的是CP210x芯片的USB转串口驱动,有人卡在了Visual C运行库缺失&…

2026/9/27 4:52:22 阅读更多 →
Kata Containers 日志解析器 kata-ctl log-parser 使用指南:合并、校验与多格式输出 runtime-rs 日志

Kata Containers 日志解析器 kata-ctl log-parser 使用指南:合并、校验与多格式输出 runtime-rs 日志

云原生容器运行时 【免费下载链接】kata-containers Kata Containers is an open source project and community working to build a standard implementation of lightweight Virtual Machines (VMs) that feel and perform like containers, but provide the workload isolat…

2026/9/26 2:56:15 阅读更多 →
highlight.io 开发环境部署指南:从克隆仓库到本地全栈调试

highlight.io 开发环境部署指南:从克隆仓库到本地全栈调试

可观测性后端 【免费下载链接】highlight highlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging, distributed tracing, and more. 项目地址: https://gitcode.com/gh_mirrors/hi/highlight 点击查看 免费下…

2026/9/26 2:56:15 阅读更多 →

最新新闻

全能电子地图下载器3.0:GIS数据获取与坐标转换实战指南

全能电子地图下载器3.0:GIS数据获取与坐标转换实战指南

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

2026/9/27 4:52:30 阅读更多 →
小红书客服系统:驱动级硬件伪装,平台检测维度再全也查不出

小红书客服系统:驱动级硬件伪装,平台检测维度再全也查不出

小红书客服系统:驱动级硬件伪装,平台检测维度再全也查不出 电商这行,谁的速度快谁吃肉。小红书的自动回复与客服,是店群运营中最耗人力也最容易出错的环节。 店群客服是纯人力消耗战。一个店日均50条咨询,20个店就是10…

2026/9/27 4:52:30 阅读更多 →
NT1741:面向助听器与TWS的超低功耗BLE接收增强器

NT1741:面向助听器与TWS的超低功耗BLE接收增强器

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

2026/9/27 4:52:30 阅读更多 →
北京免费建网站实战:3步搞定性能优化,告别廉价模板

北京免费建网站实战:3步搞定性能优化,告别廉价模板

北京免费建网站实战:3步搞定性能优化,告别廉价模板 你见过那种打开要等5秒,图片糊得像马赛克,配色红得刺眼的官网吗? 这就是“北京免费建网站”最典型的翻车现场。 模板网站太丑不够用 ,更致命的是,它们往往牺牲了 性能优化…

2026/9/27 4:52:30 阅读更多 →
宝塔面安装wordpress图解步骤

宝塔面安装wordpress图解步骤

宝塔面板装WordPress避坑指南图解步骤保安全 网站做好了没人访问,往往不是内容问题,而是底层环境太烂。很多老板花大价钱做站,上线后三天内就被挂马,或者后台直接进不去。别慌,这通常是因为你在 宝塔面安装wordpress…

2026/9/27 4:52:30 阅读更多 →
一条命令驾驭20+ AI代理:acpx内置代理注册表完整清单(Codex、Claude、Gemini、Cursor)

一条命令驾驭20+ AI代理:acpx内置代理注册表完整清单(Codex、Claude、Gemini、Cursor)

一条命令驾驭20 AI代理:acpx内置代理注册表完整清单(Codex、Claude、Gemini、Cursor) 【免费下载链接】acpx Headless CLI client for stateful Agent Client Protocol (ACP) sessions 项目地址: https://gitcode.com/gh_mirrors/ac/acpx …

2026/9/27 4:51:29 阅读更多 →

日新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/26 22:52:30 阅读更多 →