ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

深入理解 FAST Frame 的 neutralFillLayerRestDelta:层叠配色中的层级差设计令牌

深入理解 FAST Frame 的 neutralFillLayerRestDelta:层叠配色中的层级差设计令牌 前端UI组件【免费下载链接】fastThe adaptive interface system for modern web experiences.项目地址https://gitcode.com/gh_mirrors/fa/fast点击查看免费下载FAST Framemicrosoft/fast-components通过自适应色彩系统为现代 Web 应用提供了自动适配明暗模式的层叠配色方案其中neutralFillLayerRestDelta是决定相邻图层间亮度差异的核心设计令牌。本篇指南将围绕 neutralFillLayerRestDelta 的 API 签名、它在 Layer 层叠算法中的定位、取值含义以及如何在 FAST Frame 中读写这一令牌帮助你精确控制应用各层级表面的视觉纵深。neutralFillLayerRestDelta 是什么API 签名与类型neutralFillLayerRestDelta是一个DesignTokennumber类型的变量即一个接受数值number的设计令牌。其官方 API 文档中的签名如下neutralFillLayerRestDelta: DesignTokennumber从类型定义可以看出两点关键信息该令牌存储的是数值number而非颜色值它描述的是两个图层之间的明暗差异量delta它是一个设计令牌DesignToken因此可以在 FAST 的令牌系统中被读取、写入、订阅并自动向 CSS 自定义属性CSS Custom Property发射值。在自适应色彩系统中的定位在 FAST Frame 设计系统的文档中Layer 相关算法被明确解释The difference between each layer is defined withneutralFillLayerRestDelta.也就是说相邻两个图层之间的明暗差异正是由neutralFillLayerRestDelta定义的。Layer 算法不属于状态化stateful配方——它没有 rest / hover / active / focus 等交互状态区分而是以baseLayerLuminance为锚点按固定的差值逐层递进baseLayerLuminance设置第一层layer one的亮度取值为 0黑到 1白之间的任意值API 文档将其签名定义为CSSDesignTokennumber各绝对图层色neutralLayer1neutralLayer4从baseLayerLuminance出发层号越大颜色越深相对图层色neutralFillLayer则比其容器颜色亮一个层级差——卡片Card是这一配方的典型用例层与层之间的明暗步进即由neutralFillLayerRestDelta这一个数值统一控制。值得注意的是neutralFillLayerRestDelta只负责给出层级差本身实际输出的颜色值则由图层配方Recipe计算得出例如 neutralFillLayerRecipe类型为DesignTokenColorRecipe与 neutralFillLayerRest类型为CSSDesignTokenSwatch。三者构成一条完整的调用链差值令牌 → 配方令牌 → 具体色值令牌。相邻图层如何由差值驱动Layer 层叠的核心设计意图是不同区块Header、侧边栏、卡片、浮层等需要可区分但又彼此和谐的底色。FAST Frame 的实现方式是让图层在亮度上逐层递进从而在明暗两种模式下都能保持一致的感知层次。绝对图层neutralLayer1neutralLayer4以baseLayerLuminance为起点、以neutralFillLayerRestDelta为步进向某个方向逐层偏移得到固定颜色。文档指出 layer one 最亮层号越大越暗相对图层neutralFillLayer其颜色取决于所在容器的颜色并在容器色的基础上偏移一个neutralFillLayerRestDelta。因此同一个 Card 组件在浅色容器上呈现浅一档的底色在深色容器上则呈现深一档的底色实现相对于容器自动适配的效果特殊图层neutralLayerCardContainer主要面向卡片类体验浅色模式下卡片为白色、容器深一档、neutralLayerFloating用于浮层、菜单等尽可能比其他图层更亮同样建立在baseLayerLuminance与层级差机制之上。从 FAST Frame 文档中对 Recipes 的描述可知配方是算法 输入值的组合算法相同输入值如neutralFillLayerRestDelta不同产出的图层色就不同。这解释了为什么只需调整一个数值令牌就能让整套层叠配色按比例拉大或缩小层级差异——差值越大图层间明暗反差越强层次越分明。如何读取与设置该令牌neutralFillLayerRestDelta是标准的设计令牌所有设计令牌 API 对它都适用。以下是 FAST Frame 中设计令牌文档说明的核心操作。在样式CSS中使用令牌可以作为 CSS 指令直接嵌入 FAST 样式表运行时被替换为对应的 CSS 自定义属性import { css } from microsoft/fast-element; const styles css :host { /* 令牌值将作用于当前元素实例 */ --foo-layer-delta: ${neutralFillLayerRestDelta}; } ;读取令牌值使用getValueFor()获取指定节点或最近祖先上生效的值const element document.querySelector(my-element) as FASTElement; const delta neutralFillLayerRestDelta.getValueFor(element);按节点树设置值令牌值按 DOM 树作用域生效可对不同节点子树设置不同的层级差从而让不同区域拥有不同的层叠步进const ancestor document.querySelector(my-layer-ancestor) as FASTElement; const descendent ancestor.querySelector(my-layer-descendent) as FASTElement; neutralFillLayerRestDelta.setValueFor(ancestor, 3); neutralFillLayerRestDelta.setValueFor(descendent, 2);设置默认值调用withDefault()为整个文档树提供兜底值neutralFillLayerRestDelta.withDefault(2);删除与订阅// 删除指定节点的值回退到最近祖先的值 neutralFillLayerRestDelta.deleteValueFor(descendent); // 订阅值变化 const subscriber { handleChange(record) { console.log(token ${record.token} changed for ${record.target}); } }; neutralFillLayerRestDelta.subscribe(subscriber); neutralFillLayerRestDelta.unsubscribe(subscriber);实操调整图层层级差的完整示例结合 FAST Frame 文档中提供的 DesignSystem 注册方式下面给出一个可复制的完整示例注册组件、引入baseLayerLuminance与neutralFillLayerRestDelta两个令牌并分别在根节点上设置明暗模式与层级差。import { fastCard, provideFASTDesignSystem } from microsoft/fast-components; import { baseLayerLuminance, neutralFillLayerRestDelta, StandardLuminance } from microsoft/fast-components; import { css } from microsoft/fast-element; provideFASTDesignSystem() .register( fastCard() ); // 在 body 上按标准明暗模式设置第一层亮度 // StandardLuminance.LightMode 1StandardLuminance.DarkMode 0.23 baseLayerLuminance.setValueFor( document.body, StandardLuminance.DarkMode ); // 显式收紧/放宽相邻图层的层级差 neutralFillLayerRestDelta.setValueFor(document.body, 2);在 HTML 中使用body fast-card 卡片底色将比容器颜色亮一个 neutralFillLayerRestDelta 的层级差 /fast-card /body明暗模式下的标准亮度参考neutralFillLayerRestDelta只定义层级步进图层起点的绝对亮度由baseLayerLuminance决定。FAST 提供了StandardLuminance枚举作为明暗模式的推荐值其签名如下见 API 文档StandardLuminance: { readonly LightMode: 1; readonly DarkMode: 0.23; }LightMode: 1对应纯白底色的浅色模式起点DarkMode: 0.23对应深色模式的推荐起点亮度。在实际项目中通常会结合baseLayerLuminance控制第一层与neutralFillLayerRestDelta控制层与层之间的差值一起设置例如baseLayerLuminance.setValueFor(document.body, StandardLuminance.LightMode); neutralFillLayerRestDelta.setValueFor(document.body, 4); // 更明显的层级对比注意事项与最佳实践不要让 CSS 覆盖令牌发射的自定义属性FAST Frame 文档特别强调自适应色彩系统完全运行在 JavaScript 中并会在合适位置发射 CSS 自定义属性这些由颜色设计令牌发射出来的 CSS 自定义属性应被视为不可变的。如果直接在 CSS 中声明同名自定义属性自适应色彩系统无法感知这一覆盖组件会以错误的颜色渲染进而引发可访问性问题。如需改变这些值应使用DesignToken.setValueFor()API 设置令牌而不是在样式表中硬写 CSS 变量。合理选择差值大小差值过小会导致相邻图层如容器与卡片难以区分弱化信息层级差值过大会造成明显的明暗跳变在长页面多层级嵌套时可能显得生硬建议在浅色模式下以较小的差值即可获得清晰层次白底上更白即可深色模式下可适当增大差值以维持层次感。借助派生值实现响应式层级设计令牌支持派生derived值可以将令牌设置为一个接收目标元素的函数从而依据其他令牌或可观察属性动态计算层级差。例如根据当前亮度动态调整步进neutralFillLayerRestDelta.setValueFor(document.body, (element) baseLayerLuminance.getValueFor(element) 0.5 ? 2 : 4 );当依赖的令牌baseLayerLuminance发生变化时派生值会自动重新求值并同步更新发射出的 CSS 自定义属性。关键文档与源码路径速览本令牌 API 文档neutralFillLayerRestDelta图层配方与色值令牌neutralFillLayerRecipe、neutralFillLayerRest图层亮度起点baseLayerLuminance、StandardLuminance自适应色彩系统与 Layer 算法说明FAST Frame Design System设计令牌的创建、读写与订阅完整指南Design Tokens令牌导出索引fast-components.md赞分享前端UI组件【免费下载链接】fastThe adaptive interface system for modern web experiences.项目地址https://gitcode.com/gh_mirrors/fa/fast点击查看免费下载相关推荐FAST Frame 中的 baseLayerLuminance 设计令牌掌控层级色彩与明暗模式切换FAST Frame 中的 baseLayerLuminance 设计令牌掌控层级色彩与明暗模式切换 baseLayerLuminance 是 micros前端UI组件FAST Frame 的 neutralLayerFloating 设计令牌解析为 Flyout / Menu 等浮动层构建自适应配色FAST Frame 的 neutralLayerFloating 设计令牌解析为 Flyout / Menu 等浮动层构建自适应配色 导读 neutralL前端UI组件深入解析 FAST Frame 的 accentFillActive 设计令牌microsoft/fast-components 自适应色彩系统中的激活态填充色深入解析 FAST Frame 的 accentFillActive 设计令牌microsoft/fast components 自适应色彩系统中的激活态填前端UI组件上一篇免费开源卡拉OK软件UltraStar Deluxe家庭KTV终极指南5分钟快速配置下一篇UltraStar Deluxe技术架构解析开源卡拉OK游戏引擎的解决方案与实现原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表