Tinycast 设计令牌系统ramp 与 adaptive 两个助手函数搞定深色浅色双主题【免费下载链接】tinycastTinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history.项目地址: https://gitcode.com/GitHub_Trending/ti/tinycastTinycast 是一款小巧、全原生fully native的 macOS 启动器、热键与剪贴板历史工具。它的所有界面颜色都来自一套**设计令牌Design Tokens**系统而撑起深色/浅色双主题的其实只有两个助手函数ramp和adaptive。这篇文章带你快速看懂这套令牌系统如何用最少的代码让整款应用在深色和浅色外观下自动换色、零闪烁、零手工维护。一、设计令牌把魔法数字关进一个文件在大型项目里最头疼的问题之一是颜色、间距、圆角散落在全网代码里想统一换肤就要满世界找。Tinycast 的解法很直接——所有视觉常量集中在一个枚举里Theme.swift。Theme就是唯一的设计令牌来源single design-token source内部按维度分组令牌组管什么例子Theme.Spacing间距刻度xxs 2·md 8·xxl 20Theme.Radius圆角面板26、行10、对话框20Theme.Size尺寸面板宽750、底部栏高52Theme.Duration动画时长面板进入0.18s、退出0.12sTheme.Typography字体只用语义字体样式支持动态字体Theme.Colors颜色本文主角ramp与adaptive项目规则也很硬气视图里禁止硬编码任何有令牌对应的颜色、间距、圆角详见 docs/ui.md。想加新颜色先加令牌再引用——这是整套系统能保持视觉一致的关键。二、ramp 函数一条透明度斜坡搞定文字与控件换色先看ramp的完整定义只有几行Theme.Colorsstatic func ramp(dark: Double, light: Double) - Color { adaptive(dark: .srgbInk(1, alpha: dark), light: .srgbInk(0, alpha: light)) }它的思路非常巧妙一句话总结深色主题下用白色墨水浅色主题下用黑色墨水透明度alpha就是颜色强度。dark: 0.10表示深色界面里 10% 透明的白色light: 0.09表示浅色界面里 9% 透明的黑色墨水颜色由 srgbInk 统一构建保证两种主题下的同一个透明度档位落在完全相同的像素逻辑上于是每个令牌只需要两个透明度数字深浅主题就自动配对了。docs/ui.md 里维护着这张核心对照表令牌深色白浅色黑用途selection0.100.09选中行的填充rowHover0.050.045鼠标悬停永远比选中更淡textPrimary1.001.00搜索文字、光标textSecondary0.600.60次要标签border0.200.18描边式快捷键芯片cardFill0.050.04设置/计算器卡片底色为什么浅色档位的数字和深色不完全一样因为白墨和黑墨在视觉上的重量不同——设计师会微调浅色值让两个主题的观感完全一致而代码结构一行都不用改。三、adaptive 函数当简单反转不够用时ramp的公式是固定的白色↔黑色反转但有些颜色不是简单反转就能成立的。这时用更底层的adaptiveTheme.swift#L336-L340static func adaptive(dark: NSColor, light: NSColor) - Color { Color(nsColor: NSColor(name: nil) { $0.isDark ? dark : light }) }它接收两个显式的颜色并包装成一个动态颜色——颜色会跟随所在窗口的effectiveAppearance自动解析和重绘。典型使用场景panelScrim面板压暗层ramp 的反向——深色主题里用 40%黑色压暗毛玻璃浅色主题里反而要用 55%白色提亮。同白同黑的反转在这里不成立。glassFrost液态玻璃的霜感两种主题都必须是白色因为霜的作用是把玻璃提亮而不是上墨。layoutPreviewGround窗口布局预览的底板屏幕预览里画的显示器永远是深色的所以两种主题都保持深色用ramp反而会在浅色主题下错误地反转。一句话判断法则颜色是白墨↔黑墨的镜像关系 → 用ramp两个主题要各自独立选色 → 用adaptive。四、真实代码里怎么用令牌在视图中的引用非常克制例如底部栏按钮 BarButton.swift 选中时填充Theme.Colors.selection悬停时填充更淡的rowHover——选中永远压过悬停所有列表因此看起来完全一致。第三方扩展屏面也有自己的一套颜色存放在 ExtensionColors.swift它不放进Theme第三方界面不能反过来牵动启动器界面但复用同一个ramp机制只是数值归功能自己管static let fieldFill Theme.Colors.ramp(dark: 0.05, light: 0.04) static let checkboxStroke Theme.Colors.ramp(dark: 0.26, light: 0.30)这种机制共享、数值自治的分层正是整套设计令牌系统能长期不腐化的原因。五、新手最容易踩的 3 个坑在视图里直接写Color.white.opacity(0.1)—— 深色主题下看起来完美切到浅色主题就消失了。规则明确写着永远走Theme.Colors.*。该用ramp的地方用了adaptive或反过来——ramp的价值在于墨水自动反转 透明度档位语义清晰滥用adaptive手写两个颜色会让档位表失去意义。改动深色主题的既有数值—— 项目的深色档位是冻结的设计基线frozen baseline浅色档位则是唯一允许自由微调的列。想改深色那是另一个明确的任务而不是一路顺手改。六、小结Theme.swift是唯一设计令牌来源间距、圆角、尺寸、时长、字体、颜色各归其组视图里禁止魔法数字。ramp(dark:light:)用透明度斜坡 墨水自动反转让 90% 的颜色一行声明即双主题就绪。adaptive(dark:light:)是为非镜像颜色保留的逃生舱压暗层、玻璃霜感、恒暗预览底板都是它的用武之地。想深入了解更多规则同心圆角、边缘溶解、液态玻璃官方 UI 文档在 docs/ui.md架构总览见 docs/architecture.md。两个函数、一张档位表就是 Tinycast 深色浅色双主题的全部秘密——简单正是它能长期保持一致性的原因。【免费下载链接】tinycastTinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history.项目地址: https://gitcode.com/GitHub_Trending/ti/tinycast创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
美的632项目132页流程变革PPT深度拆解:数字化转型顶层设计与落地实践 简介:《美的集团632项目流程变革框架整体规划方案》以132页PPT的形式,完整呈现了美的集团从战略经营型职能架构出发的数字化变革蓝图。适合企业架构师、流程管理顾问及数字化转型项目经理研读,尤其适合希望借鉴大型制造企业流程变革经验的人士… · 2026/9/20 22:25:48
PETS5口语备考全攻略:历年真题高效使用与评分规则详解 简介:这是一份面向PETS5(全国外语水平考试英语五级)考生的口语历年真题PDF,覆盖自我介绍、家庭背景、工作与学习经历、兴趣爱好、合作讨论等核心环节,并附有考官引导语与话题卡示例,可用于熟悉真实考场流程… · 2026/9/20 22:25:48
PI Agent实战指南:从安装配置到Skills机制与跨文件重构 1. 先冷静一下:这里的PI到底是什么最近和几个做开发的朋友聊起工具链,发现好几个人都在折腾一个叫“pi agent”的东西。我一开始也懵了一下,因为“pi”这个关键词太容易歧义了——圆周率3.14159、Raspberry Pi、某手机项目,甚至你… · 2026/9/21 2:25:48
大数据批处理容错:从Spark重试到幂等写入的完整防御体系 凌晨1点27分,手机震动,群里有人我:“昨天的订单宽表只有一半分区,报表已经翻了。”我爬起来打开调度平台一看,上游同步任务在00:40执行成功,但那个任务只写了12个分区中的7个;下游的轻度汇总因为… · 2026/9/21 2:25:48
Sanic Testing 快速上手:使用官方测试客户端编写 API 测试 Sanic Testing 快速上手:使用官方测试客户端编写 API 测试 【免费下载链接】sanic Accelerate your web app development | Build fast. Run fast. 项目地址: https://gitcode.com/gh_mirrors/sa/sanic
本篇技术指南围绕 Sanic 官方测试客户端 sanic-testin… · 2026/9/21 2:25:48
ku波段相控阵天线设计实战:从需求分解到馈电网络的完整路径 简介:这是一份聚焦相控阵天线工程设计的PPT教学课件,面向天线工程初学者、通信与雷达专业学生。内容从相控阵通过控制馈电相位实现波束扫描的基本原理切入,系统阐述侧射阵/端射阵的定义区别,以及阵列分析中阵元幅度、相位、间距三… · 2026/9/21 2:25:48
SLD光源TEC温控工程实践:PID参数整定与实测分析 简介:《半导体制冷器对SLD光源温控参数的影响》是一篇面向光纤陀螺研发与光源控制电路设计人员的学术论文,聚焦SLD光源与温控电路匹配中的参数离散问题,系统分析了半导体制冷器(TEC)等效内阻及制冷/加热效率对温控精度… · 2026/9/21 2:25:48
线扫相机触发方案全解析:编码器选型、分辨率匹配与调试避坑 1. 线扫相机触发到底在解决什么问题线扫相机和面阵相机最大的区别,在于它每次只拍一条线。面阵相机是“咔嚓”一下拿一整幅图,线扫相机则是像扫描仪一样,一行一行地把图像拼出来。这就带来一个绕不开的问题:相机什么时候该拍下一行… · 2026/9/21 2:24:48
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化 直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39
Word表格编号全攻略:从列表编号到题注交叉引用 写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39
从第一个站到第二个站:独立开发者的静态网站选型与落地实践 1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18