#优质博文 #React #CSS #前端 #动画 #course
是一篇不错的 Framer Motion 简明教程。
Animating Elements through framer motion with React.js
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Sukanta Biswas
是一篇不错的 Framer Motion 简明教程。
Animating Elements through framer motion with React.js
AI 摘要:本文详细展示了使用 Framer Motion 在 React 项目中实现动画的方式,对比了传统 CSS 实现与 Framer Motion 的简洁 declarative(声明式)方式,并通过 Fade-In、Hover、List Staggering、Drag-and-Drop、Sortable List 等实例演示其强大功能。文章强调了 Framer Motion 的生产级特性(如 gestures、physics、variants、Reorder 等),并给出了初学和进阶的使用方向。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 为什么选择 Framer Motion
• 提供生产级动画解决方案,语法简洁,学习成本低
• 完美兼容 React 与 TypeScript,支持 declarative 宣告式写法
• 强大特性:drag 拖拽、spring 物理动画、scroll 动效、shared layouts
2. 开发环境准备与安装
• 使用 Vite 初始化 React + TypeScript 项目
• 使用 npm install framer-motion 安装依赖
• 提供 Demo 链接 便于快速试验
3. 动画实例逐步讲解
• 基本 Fade-In:对比 CSS keyframes 与 motion.div(initial/animate/transition)
• Hover 动画:对比 Tailwind hover/active 与 whileHover whileTap 的简洁写法
• List Staggering:传统 nth-child + 延迟 VS variants + staggerChildren 的声明式方案
• Drag-and-Drop:利用 drag、dragConstraints 等 props 快速实现拖拽,不需手写 DOM 监听
• Sortable List:利用 Reorder.Group 与 Reorder.Item 实现可排序列表的流畅交互
4. 总结与进阶提示
• Framer Motion 让复杂动画开发更直观和简洁
• 初学者可从 motion.div、animate、transition 入门
• 进阶可使用 AnimatePresence、Reorder、useMotionValue 等更高级功能
• 动画开发核心思想:声明式描述交互,而非命令式逻辑
author Sukanta Biswas
Medium
Animating Elements through framer motion with React.js
Today, most of the website requirements you come across will ask for animations and effects. While you can definitely build animations with…
#优质博文 #前端 #CSS #架构思考
We Keep Reinventing CSS, but Styling Was Never the Problem
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Den Odell
We Keep Reinventing CSS, but Styling Was Never the Problem
AI 摘要:文章认为业界对 CSS 的频繁重塑,并非因为 CSS 本身不足,而是由于现代前端框架的组件化理念与 CSS 天性(全局、层叠、继承)的不匹配。各种工具和方法只是不同痛点的权衡解法,并不存在“银弹”。真正重要的是清楚认知权衡,选择能接受的复杂度和限制,而非不断寻求完美替代方案。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. CSS 的设计初衷与现今差异
• CSS 最初为文档排版而生,适合全局样式、继承和层叠
• 现代前端应用已高度组件化和动态化,而 CSS 并非为此而设计
• 大量的“额外策略”试图弥补这种错位
2. 技术选项与权衡
• BEM:命名可预测,但选择器冗长
• CSS Modules:提供作用域隔离,但在运行时主题化方面有限
• Utility-first CSS(如 Tailwind):迭代快速,但标记冗杂
• CSS-in-JS:灵活且贴近逻辑,但带来运行时开销与复杂度
• Cascade Layers 与 :where():更细粒度控制,但团队需要学习投入
• 每项工具仅解决部分问题,不能一劳永逸
3. 问题的真正根源
• 前端框架(React / Vue / Svelte 等)强调组件作用域
• CSS 的全局特性与组件化逻辑发生冲突
• 长期以来开发者试图让 CSS 充当模块系统,但它从未被设计成那样
4. 核心思考:面对取舍
• 选择 CSS Modules,意味着局限的运行时灵活性
• 选择 Utility-first CSS,则要接受模板冗长
• 选择 CSS-in-JS,要谨慎监控性能和打包体积
• 没有完美解法,只有根据上下文作选择
5. 结论:接受“不完美”
• CSS 的问题不存在彻底解法
• 放弃寻找银弹,接受权衡
• “足够好可以上线”的 CSS,才是最终目标
author Den Odell
Den Odell
We Keep Reinventing CSS, but Styling Was Never the Problem
We keep changing how we style the web, but the real problem isn’t CSS. It’s how we build around it.
#优质博文 #前端 #性能优化 #图片优化 #CSS #course
很好很详细的一篇文章。
Your Images Are (Probably) Oversized
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Henrique Yuji Rossetti Inonhe
很好很详细的一篇文章。
Your Images Are (Probably) Oversized
AI 摘要:本文指出大多数开发者在前端实现中无意间给用户加载了远大于实际需求的图片,这浪费了带宽与计算资源。作者以 NextJS <Image> 组件为例,解释 sizes 属性在响应式图片 (responsive images) 中的重要性,并系统讲解了 srcset、sizes、图片加载策略 (lazy vs eager loading)、设备像素比 (DPR) 等概念,最终提供完整的 “Cheat Sheet” 实用总结,帮助开发者高效地为不同屏幕设备提供最佳尺寸的图片。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 现实检视 (Reality Check)
• 使用高分辨率原图在小屏幕设备上会导致带宽浪费
• 即使使用 NextJS <Image> ,若缺少 sizes 属性,仍会传输超大图
2. sizes 属性的核心作用
• 明确规定图片渲染尺寸,帮助浏览器选择最佳匹配
• 设置 sizes="100vw" 显著压缩文件大小(最高可减少 25 倍)
3. 响应式图片的基本概念
• 像素限制**:超过屏幕物理限制的像素冗余无意义
• 引入 srcset 与 sizes:提供多种分辨率图片并让浏览器选择最优版本
4. 在复杂布局中的使用
• 当图片宽度并非等于屏幕宽度时,必须结合 sizes 指定实际渲染逻辑
• 支持多断点 (media queries),可为不同 viewport 设置不同加载策略
• sizes="auto" 仅在懒加载 (lazy loading) 模式下生效,且浏览器兼容性有限
5. 图片加载策略
• loading="eager":默认立即加载,适合首屏关键图片 (FCP)
• loading="lazy":延迟加载,推荐用于非关键图片,高效节省资源
6. 设备像素比 (Device Pixel Ratio, DPR)
• 区分 **CSS pixel 与 device pixel
• 对应关系由 DPR 决定,例如 DPR=2 需要两倍分辨率图片
• srcset 支持 w 单位(推荐)和 x 单位(DPR 描述符),前者更适合响应式
7. 实用指南 (Cheat Sheet)
• 固定尺寸图片(如 icon):设置固定 sizes,srcset 使用 DPR 描述符即可
• 响应式图片:
• 若为首屏内容:指定具体 sizes
• 若非首屏内容:加上 loading="lazy" 并优先用 sizes="auto, ...fallback"
8. 参考资料
• MDN Responsive Images
• HTML Living Standard
• Use density descriptors (web.dev)
author Henrique Yuji Rossetti Inonhe
Reason Under Pressure
Your Images Are (Probably) Oversized
Or why you should always set the `sizes` and `srcset` attributes on your (responsive) <img> tags.
#优质博文 #css #前端
The Coyier CSS Starter
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Chris Coyier
The Coyier CSS Starter
AI 摘要:本文由 CSS 社区知名开发者 Chris Coyier 撰写,分享了他首次整理并发布的 CSS Starter(非传统 Reset)。文章重点阐述其设计原则:为个人常用而作、注重简洁与可用性、优先逻辑属性 (logical properties)、避免自定义变量、利用 @layer 提升可维护性、兼顾可访问性与现代特性。整体风格更像是“理想的浏览器默认样式”,旨在作为灵活的基础而非强制的规范。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 基本原则 (Principles)
• 专为作者个人实践设计,但可供他人借鉴
• 区分 Reset 与 Starter,更偏向“添加优化”而非彻底清零
• 推崇逻辑属性 (logical properties),避免过早定义 --custom-properties
• 强调 @layer 提升样式可控性
• 注重轻量、实用与“浏览器默认理想化”
2. 核心样式结构与实现 (Core CSS Structure)
• 基础元素:html { color-scheme: light dark; },启用明暗模式支持
• 排版/字体:使用 clamp() 定义流体字体、tab-size: 2、hanging-punctuation 提升阅读体验
• 文本与标题:统一 box-sizing;标题自定义粗细/间距,正文 text-wrap: pretty + 限制宽度
• 链接样式:更轻盈的下划线处理、颜色基于 OKLCH
• 列表、表格:内嵌符号样式,表格结构更贴近现代 UI/UX 需求
• 媒体元素:默认不越界,figure/figcaption 做细微优化
• 表单/按钮:继承字体、宽度优化、符合无障碍 (a11y) 的交互与外观
• 隐藏与辅助样式:提供 .screenreader-only 与 :focus-visible 增强可访问性
3. 特别改进点 (Special Considerations)
• Dark Mode 支持:自动继承系统主题,滚动条/表单控件一致化
• 流体布局:clamp() 实现响应式字体与流式布局的平衡
• 可访问性增强:包含禁用态控制、无障碍隐藏、焦点可见性等最佳实践
• 平滑交互:兼容 prefers-reduced-motion,支持现代 CSS 的视图过渡 (view-transition) 与 interpolate-size
4. 作者态度与开放性 (Author’s View & Flexibility)
• 本 Starter 并非框架,也非版本化发布,推荐“按需拷贝”
• 样式适度、务实,避免过度规范化
• 邀请社区反馈,鼓励批判与改进
author Chris Coyier
Frontend Masters
The Coyier CSS Starter
I felt called out by Mike Mai’s You are not a CSS dev if you have not made a CSS reset.
🔥2
#优质博文 #react #前端 #新动态
国庆假期搬家加去医院各种因素忙的不可开交,断更好几天,突然看到这么个事儿 23333 大好事儿啊。
Introducing the React Foundation – React
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Seth Webster, Matt Carroll, Joe Savona, Sophie Alpert
国庆假期搬家加去医院各种因素忙的不可开交,断更好几天,突然看到这么个事儿 23333 大好事儿啊。
Introducing the React Foundation – React
AI 摘要:React 官方宣布将成立独立的 React Foundation,并将 React 与 React Native 从 Meta 转移至该基金会名下,以推动社区自治和生态中立化。基金会将管理基础设施、举办 React Conf、支持生态项目并发放资助。同时,React 将建立独立的技术治理结构,由社区贡献者共同制定方向,确保没有单一机构主导。此次改革标志着 React 迈入新阶段,进一步强化其作为开放社区核心技术的可持续性。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 背景与愿景
• React 诞生于 Meta,但已成长为由全球开发者共同维护的开源生态。
• 由于贡献者与公司参与度不断提升,React 超越了单一企业项目的边界。
• 成立基金会意在支持更广泛的社区、促进生态资源分配与治理独立。
2. React Foundation 的定位与结构
• 基金会将成为 React、React Native 与相关项目(如 JSX)的新家。
• 职责包括维护基础设施(GitHub、CI、商标)、组织 React Conf、资助生态项目。
• 由董事会治理,设有执行董事 Seth Webster;初始成员包括 Amazon、Callstack、Expo、Meta、Microsoft、Software Mansion 与 Vercel。
• 目标是形成供应商中立 (vendor-neutral) 的社区运作机制。
3. 技术治理(Technical Governance)改革
• 技术方向将由实际参与 React 开发与维护的人员共同决定。
• 将建立与基金会独立的新治理结构,避免公司影响过度集中。
• 计划通过社区反馈完善方案,未来将公布具体实施细节。
4. 社区感谢与未来展望
• 官方感谢数千名开发者与企业的长期贡献。
• 认为基金会与新治理模式能确保 React 的长期稳定与活力。
• 强调这一变化是 React 成熟化与开放化的重要里程碑。
author Seth Webster, Matt Carroll, Joe Savona, Sophie Alpert
react.dev
Introducing the React Foundation – React
The library for web and native user interfaces
👏2
#前端 #组件库 #tools #tailwind #react
elevenlabs/ui:一个基于 shadcn/ui 的组件库,旨在帮助您更快地构建音频和智能体应用程序,项目以 MIT 许可证开源。
Source X 上的 Guangzheng Li:“elevenlabs 刚刚开源了兼容 shadcn ui 的前端组件,有大量和音频输入输出相关的组件 看了一下质量都挺高的,不只是样式,有的交互逻辑都完全生产可用,有音频组件相关需求的小伙伴不要错过” / X
elevenlabs/ui:一个基于 shadcn/ui 的组件库,旨在帮助您更快地构建音频和智能体应用程序,项目以 MIT 许可证开源。
Source X 上的 Guangzheng Li:“elevenlabs 刚刚开源了兼容 shadcn ui 的前端组件,有大量和音频输入输出相关的组件 看了一下质量都挺高的,不只是样式,有的交互逻辑都完全生产可用,有音频组件相关需求的小伙伴不要错过” / X
GitHub
GitHub - elevenlabs/ui: ElevenLabs UI is a component library and custom registry built on top of shadcn/ui to help you build multimodal…
ElevenLabs UI is a component library and custom registry built on top of shadcn/ui to help you build multimodal agents faster. - elevenlabs/ui
👍2
#优质博文 #前端 #CSS #新特性
Dynamic Tooltip Position with Anchor Positioning
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Temani Afif
Dynamic Tooltip Position with Anchor Positioning
AI 摘要:本文演示了如何使用 CSS 的 Anchor Positioning(锚点定位)功能,让 tooltip(提示框)动态对齐并保持在可视区域内,无论锚点元素的位置如何,同时通过伪元素及 margin 技巧控制 tooltip 箭头的显示及隐藏效果。文章还分享了代码片段和在线交互示例,展示如何通过 @position-try 与 position-try-fallbacks 实现降级处理,并展望未来 CSS 规范中的 anchored queries 支持。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 锚点定位的核心概念
• 使用 anchor-name 将元素指定为锚点
• position-anchor 用于将 tooltip 锚定到指定的锚点元素
• 控制位置属性(如 bottom、top 等)动态计算,实现与锚点间距调整
2. Tooltip 位置与箭头处理
• 定义 --distance 和 --size 等 CSS 自定义属性控制间距与箭头尺寸
• 使用伪元素 :before 绘制 tooltip 箭头,并通过 clip-path 形成箭头形状
• 通过继承 margin 和位置计算,达到根据锚点自动隐藏或显示箭头的视觉效果
3. 动态适配与回退机制
• 利用 @position-try 和 position-try-fallbacks 为 tooltip 设置备用位置(如从上切换至下)
• 受限于当前 CSS Anchor Positioning 的语法限制,部分逻辑需通过“hack”实现
• debug mode 演示 tooltip 在视图中移动时的实时定位与隐藏动画
4. 标准进展与未来展望
• 目前 @position-try 中的可用属性有限
• 未来可通过 anchored queries 精准适配布局,实现更简洁的 tooltip 自动定位逻辑
5. 延伸阅读
• 3D Box using Modern CSS:使用 corner-shape 创建 3D 盒子效果
• CSS Shapes using corner-shape:以 corner-shape 重现常见 CSS 图形
author Temani Afif
Css-Tip
Dynamic Tooltip Position with Anchor Positioning
A tootlip that follows its anchor while adjusting the position of its tail
#优质博文 #JavaScript #新特性 #前端
How to group arrays in JavaScript without reduce()
author Matt Smith
How to group arrays in JavaScript without reduce()
AI 摘要:文章由 Matt Smith 撰写,全面介绍了 ES2024 新引入的 Object.groupBy() 与 Map.groupBy() 两个静态方法,展示它们如何取代繁琐的 reduce() 实现数组分组。文中对两者的区别、使用场景、常见陷阱以及浏览器支持进行了清晰对比,并通过任务列表、日志、商品价格等案例演示了它们的实际应用。文章强调这些新特性提高了代码的表达力与可维护性,使分组操作更加声明式与直观。
author Matt Smith
Allthingssmitty
How to group arrays in JavaScript without reduce() - Matt Smith
Ditch the reduce() boilerplate! Learn how to use Object.groupBy() and Map.groupBy() in JavaScript to group data with cleaner, more expressive code.
#优质博文 #Baseline #前端 #浏览器兼容性 #CSS
2025 年 9 月基准每月摘要 | Blog | web.dev
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Jeremy Wagner
2025 年 9 月基准每月摘要 | Blog | web.dev
AI 摘要:2025 年 9 月,Baseline 项目在浏览器兼容性标准化方面取得显著进展。最重要的变化是 Browserslist 原生支持 Baseline 查询,大幅简化项目集成流程;同时多个 Web 平台特性进入 “新近可用” 与 “广泛可用” 阶段,反映出跨浏览器功能互操作性的累积成果。此外,Interop 2026 提案阶段结束,未来关注点已确定;Baseline 时间轴工具亦获得用户体验升级,为开发者提供更直观的功能追踪与过滤体验。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. Baseline 与 Browserslist 集成
• Browserslist 现已内置 Baseline 查询支持,无需额外 npm 包。
• 新语法如 baseline widely available、baseline newly available、baseline 2022 等,可直接定位功能状态。
• 支持 “with downstream” 查询,用于包含下游浏览器的环境。
• 资料参考:Browserslist 现在支持 Baseline。
2. 9 月功能更新概览
• “Baseline 新近可用” 功能包括 content-visibility、<link rel="dns-prefetch">、URLPattern 等。
• “Baseline 广泛可用” 功能多达 21 项,涵盖 CSS、Web API、Wasm 等领域,如 Constructable Stylesheets、Import Maps、OffscreenCanvas、Push API 等。
• 这标志着功能互操作性(Interoperability)的稳步推进。
3. Interop 2026 提案总结
• Interop 是各主流浏览器厂商协作确定优先兼容领域的年度项目。
• 2026 年的提案阶段已完成,各供应商正筛选关键功能领域。
• 此过程与 Baseline 功能纳入周期紧密关联。
4. Baseline 时间轴工具优化
• 由 Rick Viscomi 创建的 Baseline 时间轴工具 获得 UX 改进。
• 新增键盘快捷键(如 -w、-n、-i 等)以快速筛选不同可用性级别的特性。
• 有助于开发者更高效地浏览和评估 Web 平台功能状态。
5. 展望与社区反馈
• 官方邀请社区通过 Issue Tracker 提交 Baseline 相关内容与建议。
• 预计未来 Baseline 将持续扩展新功能,并强化浏览器协同。
author Jeremy Wagner
web.dev
2025 年 9 月基准每月摘要 | Blog | web.dev
了解 2025 年 9 月 Baseline 的各种动态。
#优质博文 #前端 #CSS #新特性
What's new in view transitions (2025 update)
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Bramus
What's new in view transitions (2025 update)
AI 摘要:本文综述了 Chrome 团队在 2025 年对 View Transition API 的更新,包括浏览器支持进入 Baseline、React 核心支持、新的自动命名与嵌套过渡功能、调试工具改进、动画属性继承优化及未来即将推出的 Scoped View Transition 等特性。这些改进显著提升了过渡动画在 Web 开发中的灵活性、性能与一致性。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 浏览器与框架支持进展
• Baseline 支持:View Transition API 即将成为 Interop 2025 Baseline 新规范,Firefox 144 将支持 document.startViewTransition(updateCallback)、view-transition-class、自动命名(view-transition-name: match-element)及 :active-view-transition 选择器。
• React 集成:React 团队已在 React 核心中集成 <ViewTransition> 组件,从实验版 (react@experimental) 进入 Canary 通道,文档与讲解视频同步更新,意味着 API 设计趋于稳定。
2. 新发布功能(Recently Shipped Features)
• 自动命名元素:view-transition-name: match-element 允许浏览器自动为匹配元素生成内部名称,减少开发时的手动命名负担。
• DevTools 调试支持增强:Chrome 139 起,开发者工具能正确显示针对 ::view-transition-* 伪元素使用 view-transition-class 的样式规则,便于动画调试。
• 嵌套过渡组 (Nested View Transition Groups):自 Chrome 140 起可嵌套 ::view-transition-group,保留层级结构,使 3D 旋转、裁剪等效果在过渡中保持。
• 继承更多动画属性:伪元素现在会继承更多 animation-* 属性(如 timing-function、iteration-count 等),简化同步动画管理。
• 修正 finished promise 延迟问题:finished 回调执行不再等待额外帧,从而消除动画尾部闪烁问题。
3. 即将推出的功能(Upcoming Features)
• Scoped View Transitions:允许在任意 DOM 子树上启动局部过渡 (element.startViewTransition()),可同时运行多个独立过渡,并仅锁定交互范围在对应子树。Chrome 140 开放实验测试。
• ::view-transition 定位变更:将在 Chrome 142 从 position: fixed 改为 absolute,实现与 CSS 规范统一。
• document.activeViewTransition 属性:即将推出的新属性,可直接访问当前活动的 ViewTransition 实例,便于跨文档或同文档过渡管理。
• ViewTransition.waitUntil API:允许使用 Promise 控制过渡结束时机,可实现等待异步操作(如 fetch)后再结束动画,为未来滚动驱动(scroll-driven)过渡铺路。
4. 展望与反馈
• Chrome 团队表示将持续迭代 View Transition 技术,未来重点关注 Scoped Transition 与更丰富的开发者 API。
• 鼓励通过 CSS WG 或 Chromium 提交功能建议与问题反馈。
author Bramus
Chrome for Developers
What's new in view transitions (2025 update) | Blog | Chrome for Developers
An overview of what changed for View Transitions in 2025
#优质博文 #Node #前端
Node.js includes a native glob utility
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Stefan Judis
Node.js includes a native glob utility
AI 摘要:本文介绍了 Node.js 自 v22.17 起已经在核心库中原生支持了 glob 模式匹配功能,使开发者无需依赖第三方工具,如 minimatch 或 glob 。文章详细展示了三种使用方式:基于 Promise 的 fsPromises.glob() 、基于回调的 fs.glob() 和同步的 fs.globSync() ,并说明了如何结合 Array.fromAsync 使用异步迭代器来获取匹配文件。此更新为文件搜索与路径模式匹配提供了更原生、更高效的解决方案。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. Node 原生 glob 的引入背景
• 介绍了过去开发者常通过第三方库 minimatch 与 glob 实现路径匹配,它们的下载量极高。
• 指出 Node.js 在 v22.17 版本之后已原生支持 glob 功能,不再依赖外部包。
2. 三种 glob 使用方式
• fsPromises.glob()**:异步迭代版本,可搭配 Array.fromAsync() 收集结果,适合现代异步流。
• fs.glob():基于回调 (callback) 的写法,保留与旧风格兼容的方式。
• fs.globSync()**:同步版本,适用于快速脚本或不依赖异步的环境。
3. 实际应用与性能思考
• 虽然可能与第三方库功能略有差异,但对一般使用场景足够。
• 原生支持意味着减少依赖、提升安全性与可维护性。
• 对文件搜索与数据批处理任务尤其方便。
author Stefan Judis
Stefanjudis
Node.js includes a native glob utility
Node.js ships native "glob" methods since 22.17.
👍1
#优质博文 #前端 #design #色板 #tools #CSS #color
evilmartians/harmonizer
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Evil Martians
evilmartians/harmonizer
AI 摘要:Harmonizer 是 Evil Martians 推出的色彩工具,可在 Figma 插件或 Web 界面中使用,利用 OKLCH 与 APCA 生成具一致亮度与对比度的配色方案。该工具通过定义光度等级、色相与背景上下文,自动生成可在浅色与深色模式中保持视觉一致的色彩体系。支持导出多种开发格式(Tailwind、CSS 变量、JSON)
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 工具介绍与设计初衷
• Harmonizer 旨在解决现有设计系统中颜色等级不一致、对比度难以统一、浅色/深色模式映射不对称等问题。
• 利用感知一致的亮度(lightness)与对比(contrast),确保 UI 元素间的视觉可靠性与可访问性。
2. 工作原理
• 继承 Figma 文档的色域设置(P3 或 sRGB)。
• 用户可定义色阶(如 100–900)及相应光度步进。
• 支持设定对比度计算方向(前景/背景)及背景上下文(白、黑或自定义)。
• 一键生成 Palette,自动产生色彩预览与变量。
3. 核心特性
• 可调色彩配置文件(P3 或 sRGB)。
• 基于 OKLCH 实现感知一致的色度 (chroma)。
• 使用 APCA 或 WCAG 对比计算公式,提升屏幕可读性。
• 支持自定义背景颜色、自动识别现有调色板、自动更新样式变量。
• 提供可共享的设定文件(Config)与开发导出(Tailwind、CSS、JSON)。
4. 技术背景与实现细节
• 使用 PNPM 管理 monorepo,包含 core、web、figma-plugin 三个子包。
• 主要命令包括安装依赖、构建、预览、格式化及类型检查。
• 借助 Spred 响应式库与 React 实现状态管理。
• 色彩计算逻辑在 Web Worker 中执行,避免阻塞主线程。
• 通过 CSS 变量动态控制外观,实现全局响应式配色。
5. 设计理论与算法基础
• OKLCH:提供感知上平衡的亮度与色度模型。
• APCA:面向自发光显示器的现代对比度算法。
• APCACH:自定义计算器,将上述两种算法融合以生成高度可访问的色彩。
author Evil Martians
GitHub
GitHub - evilmartians/harmonizer
Contribute to evilmartians/harmonizer development by creating an account on GitHub.
#优质博文 #CSS #layout #新特性 #前端
We Completely Missed width/height: stretch | CSS-Tricks
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Daniel Schwarz
We Completely Missed width/height: stretch | CSS-Tricks
AI 摘要:文章讨论 width: stretch 与 height: stretch 这两个新加入 CSS 标准的属性值。作者回顾其历史背景,说明它如何统一了过去 -webkit-fill-available 与 -moz-available 的实现,并探讨了它与 box-sizing: border-box 的区别、动画特性(animatable)以及当前的浏览器支持情况。文章指出,虽然 stretch 功能简单,但它解决了长期以来 width: 100% 受内边距影响导致溢出的问题,为布局控制带来了更直观、更可靠的选择。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. stretch 的由来与标准化
• Chromium 浏览器自 2025 年 6 月起支持 stretch,统一了非标准属性 -webkit-fill-available 与 -moz-available。
• 在 @supports 出现之前,开发者难以根据浏览器正确选择对应实现。
• 这一特性被开发者 Dave Rupert 在 Bluesky 平台上重新发现,引起社区关注。
2. stretch 的工作机制
• 行为类似 width: 100%,但忽略 padding,因此不会因内边距造成溢出。
• 从技术上看,stretch 控制元素的 margin box 以匹配包含块的尺寸。
• 对比 box-sizing: border-box :虽然二者可达相似效果,但 stretch 更语义化且更灵活。
3. 为什么考虑使用 stretch 而非通用 box-sizing
• 使用通配符选择器 * 设置 box-sizing: border-box 无法涵盖所有伪元素。
• 维护完整伪元素列表既繁琐又易错,而 stretch 可减少这类问题。
• 对某些场景而言,开发者可能希望保持 100% 不包含 padding 的默认行为。
4. 动画与过渡特性
• box-sizing 无法被动画化,但 stretch 可与 100% 间平滑过渡。
• 需启用属性 interpolate-size: allow-keywords 才能插值动画。
• 未来可通过 calc-size(stretch, size) 精确控制插值行为。
5. 浏览器兼容性与渐进增强方案
• 当前仅 Chromium 系列 (Opera 122+、Chrome/Edge 138+、Android 140+) 支持。
• 可通过 @supports 设置自定义属性 --stretch,为 Firefox 与 Safari 提供兼容实现。
• 一旦全面支持后,可直接使用 width: stretch。
6. 总结与开发者建议
• stretch 是一种小而实用的布局增强功能,提升工作流质量。
• 即使继续使用 box-sizing 也无妨,但理解并尝试新特性有助于优化设计思维。
• 多一种写法,意味着多一种选择,更贴合个人或项目的编码哲学。
author Daniel Schwarz
CSS-Tricks
We Completely Missed width/height: stretch | CSS-Tricks
The TL;DR is that stretch does the same thing as declaring 100%, but ignores padding when looking at the available space.
#优质博文 #前端 #工程化
Birth of Prettier
author vjeux
Birth of Prettier
AI 摘要:本文由 Prettier 作者 Vjeux 亲述该工具从萌芽到成为 JavaScript 世界事实标准的全过程。他回顾了从学生时代对代码格式要求的启蒙,到在 Facebook 亲历代码风格冲突,并探索各种格式化方案(如 gofmt、dartfmt)失败的原因;最终,他与合作者 James Long 等人推动 Prettier 诞生。文中详述了算法思想(基于 Philip Wadler 的 A prettier printer)、工程推进与开源协作、在 Meta 的落地推广、以及如何彻底终结开发者的格式化争论。最后反思了开源维护的经济困境与对未来开发者工具的展望。
author vjeux
#优质博文 #WebGL #CSS #前端 #动画 #course
How to Animate WebGL Shaders with GSAP: Ripples, Reveals, and Dynamic Blur Effects
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Andrea Biason
How to Animate WebGL Shaders with GSAP: Ripples, Reveals, and Dynamic Blur Effects
AI 摘要:本文通过实例展示如何将 GSAP 动画库与 WebGL 着色器(Shaders)结合,以构建沉浸式网页交互视觉。作者从基础的 HTML 布局与 Three.js 场景搭建开始,逐步扩展至通过 GSAP 动画驱动着色器 uniform 参数,实现包括灰阶渐变、点击波纹、鼠标揭示遮罩、点击与按压的流体扭曲、以及基于滚动的动态模糊等复杂 GPU 动效。文章强调 JavaScript 动画时间线与 GLSL 实时渲染逻辑的联动,让网站视觉能以自然、物理感与交互性呈现。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 基础设置与 HTML/CSS 结构
• 构建页面容器与隐藏溢出内容,准备 GSAP Draggable 和 ScrollTrigger 绑定。
• 在 Three.js 环境中创建 Stage 类,负责 Renderer、Camera、Scene 管理。
• 使用 GSAP ticker 同步渲染循环,实现动画与渲染一致更新。
2. WebGL Stage 与平面载入
• 使用 TextureLoader 创建平面 (PlaneGeometry),加载 DOM 中的图片纹理。
• 将 DOM 元素与 Canvas 中的物体同步,通过正交相机的坐标转换函数转换屏幕坐标到世界坐标。
• 替换标准材质为 ShaderMaterial,导入自定义 vertex/fragment shader。
3. 点击波纹与灰阶渐变效果(Ripple + Grayscale)
• 使用 GSAP Observer 监听点击事件。
• 点击后修改 shader uniform uGrayscaleProgress 在彩色与灰阶之间平滑过渡。
• 添加鼠标点击点 uMouse uniform,使过渡从点击中心扩散。
• 加入顶点波动(Ripple)动画,在 vertex shader 中用正弦函数生成波形变形。
• 结合 GSAP Timeline 同步控制灰度和波纹周期。
• 管理多平面状态,实现点击切换与反向第二动画效果。
4. 纹理遮罩揭示(Texture Reveal Mask Effect)
• 引入双纹理 (uTexture, uTextureBack) 并使用 uMixFactor 控制混合。
• 通过鼠标 hover 事件,使用 Raycaster 定位交互对象。
• 在 fragment shader 中基于鼠标坐标生成圆形遮罩,平滑混合两张纹理。
• 悬停时 reveal 动画开启,离开时渐出还原。
5. 点击按压揭示(Click & Hold Mask Reveal)
• 通过 GSAP Observer 监听 onPress/onRelease/onMove,管理按压持续状态。
• 使用异步 Timeline 表现“按住充能—释放复位”的动画逻辑。
• shader 中使用噪声函数 (noise) 与 uTime 动态扰动 mask,制造液态波动感。
• 实现交互中的纹理扭曲、流动与时间关联视觉。
6. 动态模糊轮播(Dynamic Blur Effect Carousel)
• 结合 GSAP Draggable 与 ScrollTrigger 使轮播支持拖动与滚动同步。
• 计算每个平面到屏幕中心的距离,根据距离动态更新 uBlurAmount。
• 在 shader 中使用多重 Kawase 模糊算法,混合多层模糊采样和平滑区间。
• blur 与 scroll 动态联动,创造景深般的焦点模糊效果。
7. 总结与启发
• GSAP 为动画时序与交互逻辑提供流畅控制。
• Shaders 提供像素级视觉自由度与 GPU 实时渲染性能。
• 在 Web 前端中实现生动视觉,展现设计与技术融合的趋势。
author Andrea Biason
Codrops
How to Animate WebGL Shaders with GSAP: Ripples, Reveals, and Dynamic Blur Effects | Codrops
A hands-on guide to animating WebGL shaders with GSAP, exploring how to control shader uniforms and sync JavaScript timelines.
👍1
#优质博文 #React #性能优化 #前端 #工程化 #新动态
React Compiler 1.0 来辣!(虽然是 10.7 的消息但是我真的很忙才看到)
不过想尝鲜的应该早用上了()
React Compiler v1.0 – React
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Lauren Tan, Joe Savona, Mofei Zhang
React Compiler 1.0 来辣!(虽然是 10.7 的消息但是我真的很忙才看到)
不过想尝鲜的应该早用上了()
React Compiler v1.0 – React
AI 摘要:React 团队发布 React Compiler 1.0,这是一个稳定且可在生产环境中使用的构建时优化工具。它可自动分析 React 组件与 hooks 的数据流与可变性,实现自动记忆化,从而减少渲染次数并提升性能。该编译器适用于 React 与 React Native,与 Babel、Vite、Next.js、Expo 等生态紧密集成,并提供增量迁移指南和内置 lint 规则以强化 “Rules of React”。此次发布标志着历时近十年的工程成果落地,开启 React 新的性能优化时代。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 背景与发布概况
• React Compiler 1.0 正式发布,可在 React 与 React Native 中使用。
• 支持与 Expo、Vite、Next.js 等集成,默认在新项目中启用。
• 历经十年研发,从 Prepack 到 HIR(高阶中间表示 High-Level Intermediate Representation)的多次重构。
2. 编译器原理与功能
• React Compiler 作为构建时优化工具,在 Babel 插件阶段分析 AST(抽象语法树 Abstract Syntax Tree)。
• 通过自动记忆化优化组件与 hooks,可在条件渲染后仍实现 memoization。
• 拥有验证与诊断机制,通过数据流分析发现潜在违反 Rules of React 的代码。
• 与 eslint-plugin-react-hooks 集成,为开发者提供静态规则检测支持。
3. 安装与使用方式
• 支持 npm、pnpm、yarn 等安装方式:babel-plugin-react-compiler@latest。
• 改进了依赖分析算法,支持可选链与数组索引依赖。
• 提供 Playground 与文档供开发者测试优化效果。
4. 性能表现与生产验证
• 已在 Meta Quest Store 等大型应用投入使用。
• 实测初始加载与页面切换性能提升 12%,部分交互速度提升 2.5 倍。
• 性能提升同时保持内存中性,证明优化可靠。
5. 兼容性与 Lint 集成
• 兼容 React 17+,React 19 可直接启用编译器特性。
• ESLint 规则合并入 eslint-plugin-react-hooks@latest,替代独立插件。
• 强化了 setState、ref 等模式检测,防止渲染循环和 unsafe 渲染行为。
6. 与 useMemo / useCallback 的关系
• 默认由编译器自动进行 memoization,大多数情况下无需手动使用 useMemo/useCallback。
• 对需要精准控制依赖的场景仍建议保留或使用手动记忆化。
7. 新项目与渐进式迁移方案
• Expo SDK 54+ 默认启用编译器,Vite 与 Next.js 模板可直接启用。
• 提供渐进迁移指南,帮助旧项目分阶段集成 React Compiler。
8. swc 与构建工具支持
• 支持 Babel、Vite、Rsbuild 等构建工具,swc 插件仍在实验阶段。
• Next.js 15.3.1+ 可显著提升构建性能,Vite 通过 vite-plugin-react 启用编译器。
• 正在与 oxc 团队合作,为未来 rolldown 支持做准备。
9. 升级与版本管理建议
• 未来版本可能改变 memoization 策略,需保持端到端测试。
• 建议固定编译器版本(--save-exact)以避免意外行为变化。
• 强调遵守 Rules of React 以确保编译器优化安全有效。
author Lauren Tan, Joe Savona, Mofei Zhang
react.dev
React Compiler v1.0 – React
The library for web and native user interfaces
#优质博文 #CSS #前端 #color #新特性
学到很多,比如 rgb 可以不加 a。
A pragmatic guide to modern CSS colours - part one
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Kevin Powell
学到很多,比如 rgb 可以不加 a。
A pragmatic guide to modern CSS colours - part one
AI 摘要:本文系统介绍了现代 CSS 颜色系统的演变与新特性,重点包括新版 rgb() 与 hsl() 的语法变化、相对颜色(relative colours)的用法、改进的亮暗主题处理方式、颜色空间(colour spaces)的应用,以及应对更广色域设备的新工具。作者旨在帮助不专注设计的开发者高效掌握现代 CSS 色彩特性,从而提高代码一致性与灵活性。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 现代 CSS 写法演进
• 从传统的十六进制与函数写法过渡到更灵活的空间分隔语法
• 新版 rgb() 与 hsl() 可直接包含透明度通道,无需“a”版本
• / 用于区分主色值与 alpha 通道,提高一致性
• 空格分隔语法引入新规范以支持更多色彩函数,如 oklch()、hwb()、color()
2. 相对颜色(Relative Colours)
• 允许从已有颜色生成新颜色,通过语法 rgb(from #ff0000 r g b) 实现
• 可结合自定义属性(CSS variables)动态调整不透明度或亮度
• 帮助快速生成同系浅色、深色变化,便于主题一致管理
• 可用于构造组件风格如提示框(toast),只需修改基础色
3. 改进的亮暗主题(Theming)
• 传统方法需在媒体查询与主题类中重复定义变量
• light-dark() 函数允许在单条声明中同时定义明亮与暗色配色
• 结合 color-scheme 可根据用户系统偏好自动切换
• 支持组件级别的独立 color-scheme 控制,增强设计灵活度
4. 颜色空间(Colour Spaces)
• 颜色空间决定浏览器如何计算与过渡颜色
• 支持在 linear-gradient() 中指定颜色空间,如 oklch、lab、hwb
• 新空间可避免传统 sRGB 中的颜色过渡失真
• “longer hue” 参数用于控制渐变方向,生成更自然或彩虹式渐变
5. 扩展色域与精准配色
• 介绍 color() 函数与广色域(wide gamut)空间 display-p3 的使用场景
• 适用于与品牌色或印刷标准(如 Pantone)匹配需求
• 浏览器会自动降级不支持的色域,保证兼容性
6. 展望与总结
• CSS 色彩能力远超以往,包括即将介绍的 color-mix()、oklch() 等函数
• 开发者无需成为设计师,也能直接在代码层面进行色彩管理与调和
author Kevin Powell
Piccalilli
A pragmatic guide to modern CSS colours - part one
Whether you've got a firm grasp on modern CSS colour capabilities, or you're thinking 'I struggle to understand why I should use modern CSS colours at all', then the first part of this article series, by Kevin Powell, is for you.
#Newsletter #前端 #周刊更新
周刊第 10 期~搬家+各种事情导致还是忙得要死,感觉得到10月底才能安顿下来,还不好说,唉。于是网站再愉快的咕咕咕咕咕一阵子。
FE Bits Vol.10|React Compiler v1.0 发布、React 成立基金会,Vite 纪录片与 Vite+ 上线
周刊第 10 期~搬家+各种事情导致还是忙得要死,感觉得到10月底才能安顿下来,还不好说,唉。于是网站再愉快的咕咕咕咕咕一阵子。
FE Bits Vol.10|React Compiler v1.0 发布、React 成立基金会,Vite 纪录片与 Vite+ 上线
👍3