呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
#demo #codepen #动画 #CSS #SVG #设计
404 Error Face:Jon Kantner 基于 Camo Creative 的设计,将 404 错误页转为纯 CSS 和 SVG 的循环动画,用趣味视觉缓解用户体验挫败感。
404 Error Face:Jon Kantner 基于 Camo Creative 的设计,将 404 错误页转为纯 CSS 和 SVG 的循环动画,用趣味视觉缓解用户体验挫败感。
#优质博文 #UI #UX #交互设计 #动画 #设计 #前端
You Don't Need Animations
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Emil Kowalski
You Don't Need Animations
AI 摘要:文章探讨了 UI 动画在交互设计中的价值与风险,提出动画必须有明确目的,且要考虑交互频率与速度感知。作者强调:合适的动画能提升可预测性与愉悦感,不合理的动画则会破坏效率与信任。有时,最佳的“动画”就是没有动画。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 动画的双刃性
• 正确使用动画可让界面更自然、流畅、愉快
• 滥用动画则会使界面显得缓慢、不确定,甚至损害用户信任
2. Purposeful Animations(有目的的动画)
• 动画需服务于具体功能或信息传达,而非纯粹装饰
• 案例:Linear 用动画展示功能逻辑;按钮点击缩放增强响应感
• 动画可营造 delight(愉悦),但仅适合低频使用,避免变成负担
3. Frequency of Use(使用频率)
• 高频操作(如 Raycast 命令输入、键盘快捷键)不应使用动画,否则会拖慢效率
• 低频操作可适度加入动画,提高体验的独特性和愉悦感
• hover 或菜单切换等高频交互场景更适合零动画或极快动画
4. Perception of Speed(速度感知)
• 动画速度需足够快,保持用户与界面的即时连接
• 一般 UI 动画时长应低于 300ms
• 案例:下拉菜单在 180ms 内更灵敏,tooltip(提示框)应有初始延迟但切换时不应再延迟
5. 设计原则与结论
• 动画不是必然元素,而是用户体验的加速器或负担
• 最佳实践:以用户需求为导向,基于目的、使用频率和性能感知来判断是否加入动画
• 有时,没有动画,才是最好的设计
author Emil Kowalski
太美了!
诗人 David Whyte 的官网,以 WebGL 呈现水彩画般的互动质感,创造独特的艺术体验。介绍
网站地址:https://davidwhyte.com/experience/
#优质博文 #css #前端 #设计 #color
What You Need to Know About CSS Color Interpolation | CSS-Tricks
author Sunkanmi Fafowora
What You Need to Know About CSS Color Interpolation | CSS-Tricks
AI 摘要:这篇文章系统介绍了 CSS 中的颜色插值 (color interpolation) 概念,解释了其在渐变 (gradient)、过渡 (transition)、动画 (animation)、颜色混合 (color-mix) 等场景中的应用。文章重点区分了矩形色彩空间 (rectangular color space) 与极坐标色彩空间 (polar color space),并详细阐述了色相插值 (hue interpolation) 的四种方法(shorter / longer / increasing / decreasing),展示了如何通过不同插值策略影响渐变、颜色过渡以及动画效果,从而为网页设计实现更自然、更富表现力的色彩体验。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 颜色插值的基础概念
• 定义:在两个颜色点之间计算中间颜色的过程。
• 作用:生成独特色彩、改进渐变、增强动画与过渡效果。
• 典型示例:利用 oklch() 在 CSS 动画中平滑过渡。
2. 应用场景与支持插值的 CSS 功能
• 所有渐变函数 (linear-gradient, conic-gradient 等)。
• color-mix() 函数:可指定色彩空间和插值方法。
• 动画 (animation) 和过渡 (transition)。
• 图像滤镜 (filter)。
• 相对颜色语法 (relative color syntax)。
3. 插值语法与规则
• 一般形式:
color-mix(in <color-space> <hue-interpolation-method>, color1, color2)。
• in 关键字:用于指明插值的色彩空间。
• <color-space>:包括矩形与极坐标空间。
• <hue-interpolation-method>:定义色相插值方式 (shorter / longer / increasing / decreasing)。
4. 色彩空间分类
• 矩形色彩空间 (Rectangular color space):
• 以直角坐标 (XYZ 轴) 形式描述,如 srgb, lab, display-p3。
• 极坐标色彩空间 (Polar color space):
• 以圆柱坐标形式表示,三个值分别是明度 (lightness)、彩度 (chroma)、色相 (hue)。
• 插值时色相是角度,因而需定义旋转方向。
5. 色相插值 (Hue Interpolation) 四种方式
• shorter:沿最短路径过渡(默认)。
• longer:沿最长路径过渡。
• increasing:始终顺时针方向过渡。
• decreasing:始终逆时针方向过渡。
• 类比时钟:类似指针从一个刻度旋转到另一个刻度,可以走近路或远路,也可强制顺/逆时针。
6. 实际应用场景
• 渐变 (gradient):利用色相插值生成更自然的平滑过渡。
• 颜色混合 (color-mix):可指定色彩空间并控制过渡方向,获得更独特的混色效果。
• 动画 (animation):通过关键帧在不同色值之间平滑过渡,展现动态的色彩体验。
author Sunkanmi Fafowora
#优质博文 #设计 #UX #apple #iOS
#92 Liquid Glass 之外 Apple 的改变
author fenx
#92 Liquid Glass 之外 Apple 的改变
很有意思的副标题:劝 Apple 牢记初心,不忘使命,力戒形式主义、官僚主义,坚持实事求是的思想路线,树立正确设计观,真抓实干,改变作风
AI 摘要:本文深入分析了 Apple 在最新系统中引入的 Liquid Glass 材质与新视觉设计系统,指出虽然在界面质感上有一定突破(折射、HDR 高光、动态层级效果),但在实际交互和系统适配上存在明显不足:iOS 标签栏和工具栏设计复杂化、macOS 工期仓促导致界面割裂、Safari 与相机等核心 App 出现交互违和感。作者认为 Apple 为了设计形式感而牺牲了过往的易用性,这种“视觉优先”的改动可能是 Beta 阶段的过度尝试。最后总结:Apple 借由 Liquid Glass 等 shader 技术试图确立设计新高度,但缺乏完整生态适配,反而让用户体验受到冲击。
author fenx
cool,现在只需要一个 shape-outside 和 shape-image-threshold 就可以实现这样的图像 Alpha 通道环绕效果了。
以及,CSS shade-* 的支持已经 Baseline Widely available 广泛可用了。
Getting Creative With Images in Long-Form Content | CSS-Tricks
AI 摘要:本文探讨了如何在长篇内容(long-form content)中创造性地使用图片。作者认为图片不仅是插图工具,更能影响页面节奏、阅读体验和用户情绪。通过打破网格(grid)、使用全幅图像(full-bleed)、模块化布局(modular grid)、CSS Shapes、创意化图注(caption)以及留白(whitespace)管理,图片可以成为叙事与设计的一部分,从而提升文章的表现力与吸引力。
1. 引言:长内容与图片的关系
• 传统的内联矩形图片容易显得功能化但缺乏灵感
• 图片在长文本中应参与节奏与气氛塑造,而不是“附加元素”
2. 打破与利用 Grid(网格系统)
• 网格让排版平衡、整齐,利于阅读,但可能过于呆板
• 偶尔打破网格:扩大图片尺寸、偏移位置,可突出重点并增加灵动感
3. 图像宽度的处理:Text-width vs Full-bleed
• Text-width(跟随文本宽度):适合信息图、图表,保持阅读秩序
• Full-bleed(全幅铺满):制造视觉冲击力,打破阅读节奏,但不可滥用
4. Modular Grid(模块化网格)展示多图
• 通过网格组织多张图片构成整体布局,而非单调堆叠
• 可以混合横幅与竖幅图,用大小对比制造层次感,突出相关性
5. CSS Shapes 与文本环绕
• 传统文本环绕矩形边框,可能与图片形状不匹配
• CSS shape-outside 可让文字依据图片轮廓流动,更加自然、富有- 有表现力
• 利用图片 alpha 通道直接定义形状,减少复杂路径
6. Captions(图注)的再设计
• 不必是小字附注,它们可以是故事叙述的主动元素
• 图注可放置在图片侧边、覆盖图片,甚至作为装饰化的 pull quote
7. Whitespace(留白)的作用
• 紧密留白:制造张力,适合多图组合
• 宽松留白:形成停顿,让内容节奏更舒缓
• 留白是页面呼吸感与层次控制的重要因素
author Andy Clarke
#设计 #CSS #前端 #UX #用户体验 #优质博文
少见的讲「设计稿」与「Web 实际实现」之间区别的博客,适合前端和设计一起观看(笑)
Web Design: What is the web capable of that is hard to express in design software?
author Chris Coyier
少见的讲「设计稿」与「Web 实际实现」之间区别的博客,适合前端和设计一起观看(笑)
Web Design: What is the web capable of that is hard to express in design software?
AI 摘要:本文探讨了现代网页设计软件与真实 Web 技术能力之间的差距。作者 Chris Coyier 指出,设计工具产出的是网站的“静态图片”,而非可交互的真实产品,这导致许多 Web 固有的动态、响应式和交互特性难以在设计稿中表达。文章详细列举了如元素状态、颜色模式、CSS 变量、流式布局、可变内容和动画等多个方面,强调了这些特性在从设计到开发的“翻译”过程中容易失真或被忽略,并认为很大一部分设计工作实际上必须在浏览器中,通过代码来完成。
1. 动态性与交互状态
• 链接与按钮状态 (Link & Button States):设计软件通常只能展示元素的默认样式,但很难表现如 :hover (悬停)、:active (点击) 和 :focus (聚焦) 等重要的交互状态,导致这些状态在设计阶段常被忽略。
• 颜色模式 (Color Modes):浅色/深色模式或 Windows 高对比度模式等全局状态会影响整个设计的可见性,但设计工具通常难以系统性地支持这些多模式的设计与预览。
• 变量 (Variables):CSS 自定义属性 (Custom Properties) 具有级联 (Cascade) 和动态变化的特性,可以在 DOM 的任何层级被修改,这是静态设计工具基于图层的概念难以模拟的。
• 其他应用状态 (Other States):加载中 (Loading)、错误 (Error)、用户特定权限等各种应用状态,在设计工具中往往需要手动绘制多个画板来表示,容易遗漏且无法体现状态间的排列组合。
• 动画与过渡 (Animations & Transitions):从简单的悬停效果到复杂的动效,这些动态体验很难在静态设计稿中有效呈现和沟通,通常需要到开发阶段直接用代码实现和探索。
2. 响应式与流式布局
• 视口尺寸 (Viewport Sizes):设计工具通常采用几个固定断点(如手机、平板、桌面)来处理响应式设计,但这无法完全表达 Web 的流式 (Fluid) 特性,例如容器查询 (Container Queries)、元素的最小/最大宽度以及字体大小的平滑变化。
• 滚动与鼠标相关效果 (Scrolling & Mouse Movement):静态设计稿无法展示与滚动相关的效果,如 position: fixed (固定定位)、scroll-snapping (滚动吸附) 以及与滚动位置联动的动画等。
• 可变内容 (Variable Content):设计稿往往使用“理想情况”下的内容(Happy Path),而无法充分考虑真实世界中内容长度不一、内容缺失或多语言翻译后字符数量变化等情况,这可能导致最终布局被破坏。
• 单位与数学计算 (Units & Math):Web 拥有丰富的单位系统 (如 rem, vw, %) 和 CSS 数学函数 (如 calc(), min(), clamp()),它们是实现复杂流式布局的关键,而设计工具通常只提供固定的、无单位的数值,两者存在巨大鸿沟。
3. 特定设备与媒介
• 设备特定细节 (Device-Specific Details):设计稿难以模拟和测试触摸目标的大小、移动设备屏幕键盘的交互、不同设备的光标 (Cursor) 样式,以及在不同带宽下的体验差异。
• 媒体处理 (Media Handling):如何在设计中集成视频、音频或 3D 等复杂媒体,并在静态工具中准确传达其交互和表现,是一个巨大的挑战。
author Chris Coyier
#优质博文 #CSS #字体 #性能优化 #设计 #前端
Building my new website: A modern approach to font fallbacks with font property adjustments - Nic Chan
author Nic Chan
Building my new website: A modern approach to font fallbacks with font property adjustments - Nic Chan
AI 摘要:本文是作者 Nic Chan 撰写的新网站构建系列的一部分,重点介绍了如何采用现代字体回退方法来优化网站性能,尤其是减少累计布局偏移(CLS)。作者详细阐述了利用在线工具调整 CSS 字体属性(如 size-adjust 等)以实现无缝字体切换的实践,并分享了新增艺术作品和工作展示区的设计与实现,包括使用 View Transitions 和容器查询来提升用户体验。
• 作者 Nic Chan 分享了此篇草稿延迟发布的原因,并感谢读者的支持。
• 介绍了网站新增的拖放功能(桌面端)和改进的窗口分层效果,强调了渐进增强(progressive enhancement)的应用,即在确保无 JS 可用性的基础上,通过 JavaScript 增强用户体验。
• 字体优化与回退 (Font Optimization & Fallbacks): 讨论了网站在字体加载时遇到的累计布局偏移(CLS)问题,特别是自定义字体 W95FA 较窄的特性。作者希望实现像素字体和抗锯齿字体之间的无缝切换。他利用了“Modern Font Stacks”提供的字体堆栈,并发现了一个名为“Font Fallback”的工具,通过调整 size-adjust、ascent-override 等 CSS 属性来创建视觉上无缝的字体回退效果,甚至为此修改了工具的源代码。
• 艺术作品展示 (Artwork Showcase): 作者决定在网站中添加艺术作品展示区,尽管这与专业无关。他受到 Josh Crain 网站的启发,并利用 View Transitions API 实现了窗口最大化时平滑的缩放和标题淡入效果,配合少量 JavaScript 进行状态管理和回退。
• 工作项目展示 (Work Projects Showcase): 面对多种图片尺寸和可选标题的复杂布局挑战,作者采取了非对称设计,并限制了三种核心布局模式,避免每次新增案例都需编写新样式。此处完美运用了容器查询(Container Queries)来适应可用窗口空间内的尺寸变化,并结合 CSS Grid 实现有趣的重叠布局和纹理效果。
author Nic Chan
#优质博文 #液态玻璃 #设计
Getting Clarity on Apple's Liquid Glass
author Geoff Graham
Getting Clarity on Apple's Liquid Glass
AI 摘要:本文详细探讨了 Apple 在 WWDC 2025 上推出的全新设计美学“Liquid Glass”(液体玻璃),分析了其设计理念、技术特点以及引发争议的焦点。文章从 Apple 官方介绍、设计师和开发者的反馈、无障碍性问题到社区的实验和教程,全面梳理了 Liquid Glass 的影响与应用前景。作者中立看待这一设计,既对其创新性表示兴趣,又对其可读性和无障碍性表达了担忧,同时整理了大量相关资源和讨论,为读者提供了深入了解这一设计趋势的入口。
author Geoff Graham
#优质博文 #前端 #UX #设计 #落地页
We studied 100 dev tool landing pages—here’s what really works in 2025
author Anton Lovchikov, Travis Turner
We studied 100 dev tool landing pages—here’s what really works in 2025
AI 摘要: 本文通过对 100 多个开发者工具登陆页面进行深入研究,总结了 2025 年有效的设计与布局策略。作者 Anton Lovchikov(Evil Martians 设计负责人)分析了从 Linear 到 Vercel 等知名工具的页面,提炼出适用于早期产品的高效结构:包括英雄区、信任模块、功能展示、社交证明、支持模块和最终行动号召(CTA)。文章强调简洁设计、用户导向的故事叙述以及建立信任的重要性,同时提供了基于研究的开源模板,助力开发者快速构建登陆页面。
1. 引言与研究背景
• 介绍了研究的目的:帮助开发者工具创建者避免设计中的常见错误,快速构建有效的登陆页面。
• 研究对象为 100 多个开发者工具页面,涵盖从早期初创公司到成熟产品的案例。
• 提供了一个基于研究的开源模板,供快速部署使用。
2. 总体布局注意事项
• 核心原则:避免过度销售,注重简洁与巧妙设计。
• 大多数页面采用居中布局与最大宽度容器,确保可读性与开发速度。
• 少数页面采用全宽设计以突出高端感,但执行难度较高。
3. 英雄区(Hero Section)
• 设计趋势:居中布局,带有静态或动态产品展示及引人注目的 CTA。
• 视觉元素类型:动态 UI 演示、静态 UI 截图、可切换的多产品 UI、实时嵌入产品、代码片段或抽象插图。
• 附加元素:眉毛文本(Eyebrows)用于突出新发布或融资信息;顶部横幅传递更长信息。
• CTA 策略:主 CTA 醒目且具体,次 CTA(如查看文档)视觉上区分开。
4. 信任模块(Trust Block)
• 目标:通过展示客户 logo 或用户数据快速建立信誉。
• B2B 产品:展示知名客户 logo 或客户评价,常使用自动滚动轮播。
• 个人用户产品:突出数据指标(如 GitHub 星级、使用量)或奖项。
5. 功能展示模块(Feature Block)
• 核心:聚焦用户痛点与解决方案,而非单纯列举功能。
• 叙事方式:功能列表、任务导向故事、问题导向故事、大胆声明、使命陈述式叙事。
• 布局形式:全屏截图、棋盘式布局、图标文本、全宽卡片带、便当式网格、选项卡分组、步骤流程、富卡片设计、视频教程。
• 附加支持:包括“工作原理”说明、使用案例、兼容性与集成展示。
6. 社交证明模块(Social Proof Block)
• 策略:精选用户评价,注重相关性与正面反馈,通常位于页面底部。
• 呈现方式:简洁引用,包含用户头像、姓名及公司 logo。
• 创新模式:将用户评价与功能模块结合,增强上下文相关性。
7. 支持模块(Supporting Blocks)
• 非必需但常见模块:包括 FAQ、对比表格、定价信息、博客或更新日志预览。
• FAQ:以折叠式设计解答常见问题。
• 对比表格:突出产品优势,适用于竞争激烈的市场。
• 定价:简洁展示不同计划,常链接至单独页面。
8. 最终行动号召(Final CTA)
• 设计:醒目且独立的全宽模块,使用对比背景色与简短激励信息。
• 目的:抓住未在早期点击的访客,提供最后转化机会。
• 创新案例:嵌入日历小部件,便于直接预约沟通。
9. 快速部署工具
• 提供基于研究的无冗余模板,适用于开发者产品,支持 Webflow 和静态 HTML 版本。
• 鼓励读者免费获取并快速应用。
author Anton Lovchikov, Travis Turner
#UX #设计 #移动端适配
https://fixupx.com/uiuxadrian/status/1944713516776362052
https://fixupx.com/uiuxadrian/status/1944713516776362052
Adrian (@uiuxadrian): Bad typography kills good app design.
Most designers guess font sizes instead of using proven standards.
Here's the ultimate guide to UI font sizes for mobile apps (iOS):
#优质博文 #AI #MCP #设计
Guide to the Dev Mode MCP Server
author Figma 官方文档
Guide to the Dev Mode MCP Server
AI 摘要:本文详细介绍了 Figma 的 Dev Mode MCP Server(目前处于开放测试阶段)的功能、使用方法和最佳实践。Dev Mode MCP Server 通过 Model Context Protocol 提供了一个标准接口,使 AI 代理能够与 Figma 设计文件交互,直接将设计转化为代码,并提取设计上下文和组件信息。文章涵盖了如何启用服务器、配置客户端、提示工具使用以及优化设计文件和提示以获得更好的代码生成效果,旨在帮助开发者和设计团队更高效地进行设计到代码的工作流程。
功能与适用范围:
• Dev Mode MCP Server 目前为开放测试版,适用于 Professional、Organization 和 Enterprise 计划的 Dev 或 Full 座位用户。
• 需使用支持 MCP Servers 的代码编辑器(如 VS Code、Cursor、Windsurf、Claude Code)以及 Figma 桌面应用。
• 主要功能包括从 Figma 帧生成代码、提取设计上下文(如变量、组件、布局数据)以及通过 Code Connect 提高代码输出质量和一致性。
使用步骤:
• 步骤 1:启用 MCP Server - 在 Figma 桌面应用中通过 Preferences 启用 Dev Mode MCP Server,服务器本地运行于 http://127.0.0.1:3845/sse 。
• 步骤 2:设置 MCP 客户端 - 根据不同代码编辑器(如 VS Code、Cursor、Windsurf、Claude)配置 MCP 服务器连接,涉及在设置中添加服务器 URL 并确保连接成功。
• 步骤 3:提示 MCP 客户端 - 通过选择 Figma 中的帧或层,或使用链接,提供设计上下文给 AI 客户端,并通过提示生成代码或提取信息。
工具与用法建议:
• get_code - 用于生成代码,支持 React + Tailwind 默认输出,可通过提示自定义框架(如 Vue、HTML+CSS、iOS)或使用特定组件。
• get_variable_defs - 返回所选内容中使用的变量和样式(如颜色、间距、字体),帮助生成代码时引用设计令牌。
• get_code_connect_map - 提供 Figma 节点 ID 与代码库中对应组件的映射,确保设计到代码的无缝转换。
• get_image - 截取所选内容的屏幕截图以保留布局保真度,可在设置中启用或使用占位符。
Dev Mode MCP Server 设置:
• 提供额外的偏好设置,如启用 get_image 工具、使用占位符、启用 Code Connect 以重用代码库组件。
MCP 最佳实践:
• 结构化 Figma 文件 - 使用组件、变量、语义化命名、自动布局和注解以提供清晰的设计意图,确保生成的代码一致且符合设计系统。
• 编写有效的提示 - 清晰的提示可指导 AI 输出符合框架、文件结构或特定路径的代码,示例包括指定框架(如 SwiftUI、Chakra UI)或组件路径。
• 触发特定工具 - 如结果不理想,可在提示中明确指定工具(如 get_code 或 get_variable_defs )以获取更准确的上下文。
• 添加自定义规则 - 设置项目级指导规则(如布局优先级、文件组织、命名模式)以保持输出一致性,减少重复提示。
• 分解大型选择 - 将大屏幕拆分为小组件或逻辑块以提高生成速度和可靠性,避免上下文过多导致的错误或不完整响应。
注意事项:
• 由于处于测试阶段,功能和设置可能不完整,可能遇到 bug 或性能问题。
• 用户可通过 Figma 内的反馈表单提供意见,帮助改进功能。
author Figma 官方文档
#demo #前端 #css #动画 #设计
经典键盘的实现!很酷
https://fixupx.com/jh3yy/status/1943132402315886934
不过这个没给demo链接,只是给了思路和展示。
代码什么的可以看看这个类似的。
Twitter | Github
经典键盘的实现!很酷
jhey ʕ•ᴥ•ʔ (@jh3yy):keypad w/ CSS + <img> layers 🧑🍳
.key { mask: url(keycap.png); }
.key:active img { translate: 0 20%; }
use keycap images as a mask for the container that they translate in ✨
bonus: clip-path to clip the hit area + filter to style the keys 🤙
https://fixupx.com/jh3yy/status/1943132402315886934
不过这个没给demo链接,只是给了思路和展示。
代码什么的可以看看这个类似的。
Twitter | Github
#优质博文 #前端 #设计还原 #css #设计 #兼容性
讲究,太讲究了www
Matching drop shadows across CSS, Android, iOS, Figma, and Sketch
author Bjango Team
讲究,太讲究了www
Matching drop shadows across CSS, Android, iOS, Figma, and Sketch
AI 摘要:本文详细探讨了在 CSS、Android、iOS、Figma 和 Sketch 等多个平台和设计工具中实现一致的阴影效果(drop shadow)的问题。作者通过对比不同平台的阴影渲染差异,指出模糊半径(blur radius)的处理方式是导致不一致的主要原因,并提供了具体的缩放因子(scale factors)来调整模糊半径,以实现跨平台的视觉一致性。文章还深入分析了各平台的渲染机制和技术细节,为设计师和开发者提供了实用的转换公式和指导。
1. 引言与问题背景
• 介绍了跨平台阴影效果不一致的问题,通过图片对比展示了 CSS、Android 和 iOS 渲染相同阴影参数时的差异(例如 Y 偏移 24px,模糊半径 24px 的阴影在各平台呈现不同)。
• 指出 Android 使用 setShadowLayer 而非 Material elevation,CSS 和 Android 阴影虽接近但仍有细微差异(Android 更模糊)。
2. 浏览器间的阴影一致性
• 讨论了 CSS 阴影在不同浏览器(Safari、Firefox、Chrome)中的表现,发现 box-shadow 在这些浏览器中渲染效果基本一致,截图以 Safari 为主。
3. 设计工具与 CSS 的对比
• 指出 CSS、Sketch 和 Figma 的阴影效果一致,但背景模糊(background blur)不在本文讨论范围内,仅聚焦于阴影效果。
4. 模糊半径的差异分析
• 阴影的参数中,位置偏移和颜色在各平台表现一致,唯独模糊半径的处理方式不同。
• 作者通过重新排列模糊测试结果,发现模糊半径存在 1×、2× 和 3× 的缩放模式,阴影主要集中在 1× 和 2× 范围内。
5. 缩放因子与技术细节
• 解释了 CSS 规范中模糊半径的标准差为模糊半径的一半,而 iOS 的模糊半径是 CSS 的两倍,因此 CSS 到 iOS 的缩放因子为 0.5×。
• Android 使用 Skia 渲染,模糊半径缩放涉及 1 / sqrt(3) 的因子,与 CSS 不完全一致(部分原因是早期 Safari 的影响)。
• 提供了详细的缩放因子表格,用于在 CSS、Sketch、Figma、Android 和 iOS 之间转换模糊半径,例如 CSS 到 Android 为 0.866×,iOS 到 CSS 为 2.0×。
• 通过调整后的对比图和色调分离(posterising)结果,展示了缩放后的阴影效果非常接近,尽管由于渲染方法和代码差异无法完全一致。
6. 应用与结论
• 研究目的是为 Pinwheel 工具导出 Android 和 iOS 阴影代码时提供正确的缩放因子,确保跨平台一致性。
• 总结了实现近似一致阴影的可行性,并感谢 Kit Grose 在审稿中提供的 Skia 代码注释支持。
author Bjango Team