呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态

图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
#优质博文 #CSS #前端 #新特性
介绍 Chrome 144 新推出的 ::search-text 伪元素,以及如何利用 CSS 相对颜色语法统一美化各种文本高亮样式。
How to Style the New ::search-text and Other Highlight-y Pseudo-Elements | CSS-Tricks

AI 摘要:这篇文章探讨了 Chrome 144 新引入的 ::search-text 伪元素,它允许开发者自定义浏览器“页面内查找”(Ctrl+F)匹配到的文本样式。作者对比了 ::selection、::target-text 等多种高亮相关伪元素的功能差异,并重点分享了如何利用 CSS 相对颜色语法(Relative Color Syntax)构建一套自动适应背景、高对比度且能区分不同高亮类型的动态样式方案,旨在提升 Web 内容的可访问性与用户体验。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 核心特性:认识 ::search-text
• ::search-text 专门用于选中页面内查找(find-in-page)匹配到的文本。
• 默认情况下,Chrome 中匹配项为黄色,当前目标项(::search-text:current)为橙色。
• 该伪元素的推出让开发者能够突破浏览器默认 UI,自定义搜索反馈的视觉呈现。

2. 高亮伪元素全集概览
• ::search-text:页面查找匹配文本,包含 :current 状态。
• ::target-text:URL 文本片段(Text fragments)高亮,常用于从搜索引擎跳转后的自动定位。
• ::selection:用户通过光标手动选中的文本。
• ::highlight():通过 JavaScript 的 Custom Highlight API 定义的自定义高亮。
• ::spelling-error 与 ::grammar-error:主要用于可编辑内容中的拼写和语法错误标记。

3. 设计思路:可访问性与动态样式
• 为什么要自定义:解决默认颜色在特定背景下对比度不足(Color contrast)的问题,并增强视觉强调。
• 技术限制:高亮伪元素支持的 CSS 属性有限,例如 background-clip 和 backdrop-filter 通常无法使用。
• 相对颜色语法(Relative color syntax):利用 rgb(from var(--bg) calc(255 - r) ...) 实现自动颜色反转,确保高亮色始终与背景色形成强烈对比。

4. 进阶实战:区分重叠的高亮状态
• 视觉区分:当用户在搜索结果中又手动选中了文字,需要确保不同类型的高亮(如 ::selection 和 ::search-text)能被同时辨识。
• 差异化策略:通过反转不同的 RGB 通道(如只反转 R 和 G,或只反转 B)来赋予每种伪元素独特的色调。
• 透明度处理:为非当前目标的高亮添加 alpha 透明度,使它们在相互叠加时产生融合效果,方便用户识别每个高亮的起止位置。
• 兼容性与未来:提及了 contrast-color() 函数在 CSS Color Module Level 5 中的潜力,作为未来更简便的替代方案。


author Daniel Schwarz How to Style the New ::search-text and Other Highlight-y Pseudo-Elements | CSS-Tricks
#优质博文 #CSS #响应式设计 #设计 #前端
好文。在多设备、响应式和动态内容的现代 Web 环境下,为何传统的“像素级完美(Pixel Perfect)”观念已不再适用,并提倡向“设计意图(Design Intent)”转变。

Rethinking “Pixel Perfect” Web Design — Smashing Magazine

AI 摘要:随着 Web 技术的飞速发展,传统的“像素级完美”这一源于印刷时代的理念已成为开发的阻碍。本文指出,由于屏幕尺寸的多样性、内容的动态变化以及对无障碍性的要求,追求绝对的像素匹配会导致代码臃肿和系统脆弱。作者 Amit Sheen 建议开发者与设计师应转向关注“设计意图(Design Intent)”,利用设计令牌(Design Tokens)、流体布局和现代 CSS 特性,构建更具弹性和逻辑性的 Web 体验,而非死磕静态图像中的绝对坐标。


author Amit Sheen Rethinking “Pixel Perfect” Web Design — Smashing Magazine
#前端 #JavaScript #存储 #TypeScript #tools
unadlib/localspace:现代化的 localForage 替代方案,提供简单的浏览器存储封装。
localForage 的使用者看了看感觉不错,mark 一下(

AI 摘要:localspace 是一个旨在替代 localForage 的现代化存储工具包。它在完全兼容 localForage API 的基础上,利用现代 TypeScript 和异步架构重写,解决了原版在类型定义、IndexedDB 性能瓶颈、以及多平台(Node.js、React Native、Electron)一致性上的长期痛点。其核心亮点包括:支持将高频写入合并为单次事务的合并写入(Coalesced Writes)技术,可提升 3-10 倍性能;内置了强大的插件系统,提供 TTL(Time-to-Live)过期、透明加密、数据压缩、多标签页同步及配额管理(LRU 淘汰)等高级功能;同时保留了极简的 API,方便开发者从旧项目无缝迁移。
GitHub - unadlib/localspace: A library that unifies the APIs of IndexedDB, localStorage and other storage into a consistent API
#优质博文 #CSS #SVG #前端 #动画 #course
How to animate SVG with CSS: Tutorial with examples 
很详细的 svg 动画教程。

AI 摘要:文章深入探讨了使用 CSS 动画化 SVG 的基础知识与进阶技巧。作者 Hope Armstrong 首先解释了 SVG 的优势及多种嵌入方式,指出内联(Inline)方式是实现 CSS 控制的最佳选择。随后展示了如何通过 transition 和 keyframes 属性操作 SVG 特有的属性(如 fill、stroke 等),并重点解析了路径绘制动画(Line drawing animation)的实现原理。最后,文章强调了在制作动画时需兼顾无障碍访问(Accessibility)以及选择合适工具的重要性。
How to animate SVG with CSS: Tutorial with examples - LogRocket Blog
#tools #前端 #vscode #插件 #vscode
Better SVG:用于编辑带有实时预览功能的 SVG 文件的 VS Code 扩展程序,包含许多实用功能,例如实时预览、颜色选择器、缩放/平移控件、可编辑的配色方案 currentColor 值、深色背景切换以及 SVGO 集成,一键优化 svg 体积。
#优质博文 #前端 #CSS #JavaScript #视图转换
探讨在视图过渡 (View Transitions) 过程中如何保持视频和音频的播放状态,并区分了同页面与跨页面两种场景下的实现差异。

Astro 的持久化过渡效果很好用的。

View Transitions & Playing Video

AI 摘要:本文主要研究了在 Web 视图过渡 (View Transitions) 期间保持视频/音频播放的技术细节。作者指出,单页面视图过渡 (Same-Page View Transitions) 能够原生支持 (Just Works) 状态保持,类似于 .moveBefore() 的效果;而多页面视图过渡 (Multi-Page View Transitions) 由于页面卸载则无法直接维持状态。不过,通过利用 pageswap 和 pagereveal 事件配合 sessionStorage 存储视频进度,可以“伪造”出一种近乎无缝的过渡体验。文章还提到了 Astro 框架在此方面的实现以及未来浏览器原生支持跨页面状态保存的可能性。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 同页面视图过渡 (Same-Page View Transitions)
• 在单页面环境下,使用 document.startViewTransition 操作 DOM 时,浏览器会自动保留 <video>、<audio> 甚至 <iframe> 的播放状态。
• 这种机制与新兴的 moveBefore() 方法类似,能够确保视频在元素变换位置或样式时持续播放而不中断。

2. 多页面视图过渡 (Multi-Page View Transitions) 的挑战
• 在传统的多页面架构 (MPA) 中,当页面卸载并加载新页面时,所有状态都会丢失,即便新旧页面包含相同的视频元素也无法自动衔接。
• 讨论了 Astro 等框架的实现原理,它们通常通过将页面导航转化为类似单页面应用 (SPA) 的体验来避开这一限制。
• 引用了 Chrome 团队关于跨页面状态保存的讨论,指出这不仅是视图过渡的需求,更是更通用的页面导航状态持久化方案。

3. 手动实现跨页面的“状态伪造”方案
• 使用 CSS 的 @view-transition { navigation: auto; } 启用多页面过渡。
• 为新旧页面的视频元素指定相同的 view-transition-name。
• 利用 JavaScript 监听 pageswap (页面离开前) 和 pagereveal (新页面显示时) 事件,通过 sessionStorage 存取视频的当前播放时间 (currentTime)。
• 虽然在切换瞬间会有轻微的音频/视频停顿 (Blip),但视觉和逻辑上能达到较好的衔接效果。

4. 扩展应用与工具
• 该技术同样适用于 YouTube 等第三方 <iframe> 嵌入视频,只需结合相应的 Iframe 播放器 API (Iframe Player API) 提取和还原数据。
• 推荐参考 Chrome 官方演示和作者提供的 CodePen 示例进行深度学习。


author Chris Coyier
#优质博文 #前端 #WCAG #HTML
介绍在使用原生 <dialog> 元素时,为什么开发者不再需要手动实现复杂的焦点陷阱(Focus Trap)逻辑。
There is No Need to Trap Focus on a Dialog Element

AI 摘要:文章探讨了在使用原生 HTML 的 <dialog> 元素时,关于焦点陷阱(Focus Trap)观念的转变。传统的无障碍(Accessibility)建议认为模态框必须将焦点限制在其内部,但作者通过研究发现,原生 <dialog> 的 showModal() 方法允许用户通过 Tab 键切换到浏览器地址栏等界面,这并非缺陷而是被 W3C 认可的有意设计。这种设计为用户提供了更好的逃逸机制和操作灵活性,因此在使用现代原生 API 时,手动编写焦点陷阱代码已成为过时的做法。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 核心发现与观念转变
• 作者在测试原生 <dialog> 的 showModal 方法时,发现焦点可以从对话框移动到浏览器地址栏,这挑战了传统的焦点陷阱(Focus Trap)原则。
• 经过深入研究 GitHub 相关讨论,确认如果使用原生 <dialog> 元素,手动实现焦点陷阱已被视为过时的建议。

2. 历史背景与规范误区
• Scott O’Hara 指出 WCAG 规范并未强制要求焦点必须锁定在对话框内。
• 传统的焦点陷阱建议主要针对早期的自定义脚本对话框,当时 inert 属性和原生 <dialog> 尚未得到广泛支持。
• ARIA 创作实践指南(APG)中的旧做法是为了在没有原生特性的情况下模拟行为,其复杂性远高于现在的原生实现。

3. 专家观点与无障碍优势
• 无障碍专家 Léonie Watson 认为,用户在对话框上下文中应拥有与普通页面相同的权利,即能够通过 Tab 键离开当前内容进入浏览器功能区(如地址栏、菜单等)。
• W3C 的 APA(Accessible Platform Architectures)工作组达成共识,维持原生 <dialog> 现有的行为。
• 允许焦点移出对话框有助于用户在不关闭模态框的情况下,打开新标签页查询信息或更改浏览器设置,提供了一种自然的“逃逸机制(Escape Mechanism)”。

4. 开发者结论
• 只要正确使用原生 Dialog API 的 showModal 方法,开发者无需再为焦点管理(Focus Management)感到焦虑,这极大简化了现代 Web 组件的开发难度。


author Zell Liew There is No Need to Trap Focus on a Dialog Element | CSS-Tricks
#tools #前端 #组件库 #react
一个能够根据 React 组件实际 DOM 结构自动生成像素级精确骨架屏(Shimmer Skeleton)的工具库,原理是运行时自动分析组件 DOM。
darula-hpp/shimmer-from-structure

AI 摘要:该项目解决了前端开发中需要手动维护两套代码(业务组件与骨架屏组件)的痛点。通过在运行时(Runtime)分析真实组件的 DOM 结构,shimmer-from-structure 能够自动测量元素尺寸、获取 CSS 圆角属性,并生成与之完美契合的扫光动画效果。它支持动态数据注入、全局配置(Context API)、以及与 React Suspense 的无缝集成,极大地降低了 UI 加载态的维护成本。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 核心价值与功能特性
• 自动适配结构:无需预定义骨架屏,运行时自动分析组件 DOM。
• 零维护成本:组件布局改变时,骨架屏自动更新,无需手动同步。
• 像素级精确:通过测量实际元素尺寸生成占位块。
• 样式自动提取:自动检测 CSS 中的 border-radius(圆角),确保头像等圆形元素正确显示。
• 感知优化:加载时保留容器背景色和边框,仅对文本和图片内容进行遮盖。

2. 使用模式与 API
• 静态内容包裹:简单的组件直接使用 <Shimmer loading={true}> 包裹即可。
• 动态数据支持:通过 templateProps 属性注入模拟数据,使组件在无真实数据时也能撑开正确的布局结构。
• Suspense 集成:可直接作为 Suspense 的 fallback,利用 React 的生命周期自动处理挂载与卸载。
• 全局配置:提供 ShimmerProvider,允许在应用顶层统一配置扫光颜色、背景色及动画时长等

3. 技术实现原理
• DOM 测量:利用 useLayoutEffect 同步测量所有叶子元素的 getBoundingClientRect()。
• 属性捕获:通过原生 API 获取计算后的 CSS 样式,确保骨架块与原元素形状一致。
• 动画注入:基于测量数据创建绝对定位的扫光层,并应用线性渐变动画。
• 透明处理:加载状态下将真实内容的 color 设为 transparent,从而隐藏文字但保留容器布局。

4. 最佳实践与局限性
• 细粒度控制:建议为不同的业务模块分别包裹 Shimmer,以实现独立的加载状态。
• 性能建议:尽量保持 templateProps 简单,避免在测量阶段进行复杂逻辑运算。
• 已知限制:无法深入捕获 SVG 内部的路径形状;对于异步渲染(如某些 Canvas 图表)需要显式指定容器高度。


author darula-hpp GitHub - darula-hpp/shimmer-from-structure: Universal UI skeleton generator for React, Vue and Svelte. Auto-adapts to your component…
#优质博文 #AI #前端 #开源
agentation:一款为 AI Agents 设计的视觉反馈工具,通过点击并添加标注,随后生成包含元素路径、CSS 选择器(Selectors)、位置等详细上下文的 Markdown 文本。
文档:https://agentation.dev/
Tweet:Introducing Agentation: a visual feedback tool for agents

AI 摘要:Benji Taylor 发布的 Agentation 是一款创新的开源视觉反馈工具,旨在解决开发者向 AI 描述 UI 问题时的沟通障碍。通过 npm i agentation 即可集成,它允许用户直接在网页上点击元素并添加标注,随后生成包含元素路径、CSS 选择器(Selectors)、位置等详细上下文的 Markdown 文本。
GitHub - benjitaylor/agentation: The visual feedback tool for agents.
#优质博文 #前端 #新动态 #Chrome #CSS
从 Chrome 145 开始,在满足特定条件时,100vw 终于能够自动减去滚动条宽度,解决了长期以来因视口单位导致的网页多余水平滚动问题。该改进同样适用于 vh(对应水平滚动条)以及视口单位的小、大、动态变体(sv*, lv*, dv*)
Using 100vw is now scrollbar-aware (in Chrome 145+, under the right conditions)

AI 摘要:本文介绍了 Chrome 145 及更高版本对 CSS 视口单位(Viewport Units,如 vw、vh )的一项重大改进:当根元素 html 设置为 overflow: scroll 或 scrollbar-gutter: stable 时,100vw 会自动扣除滚动条所占的空间。这一改进通过 CSS 工作组(CSSWG)的决议,解决了传统 100vw 导致不必要水平溢出的顽疾,同时通过限制生效条件规避了布局死循环(Cycles)问题。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 核心改进与生效条件
• Chrome 145+ 版本开始,视口单位将能够“感知”滚动条(Scrollbar-aware)。
• 只有在 html 元素上强制显示滚动条(overflow[-y]: scroll)或预留滚动条空间(scrollbar-gutter: stable)时,该特性才会生效。
• 该改进同样适用于 vh(对应水平滚动条)以及视口单位的小、大、动态变体(sv*, lv*, dv*)。

2. 视口单位的历史局限性
• 传统视口单位(Viewport Units)在计算时不考虑经典滚动条(Classic Scrollbars)的宽度。
• 设置 width: 100vw 时,其宽度包含滚动条,导致在有垂直滚动条的情况下,页面会出现不必要的水平滚动条。

3. 布局死循环(Cycles)的挑战
• 解释了为什么不能简单地在所有情况下减去滚动条宽度:这会导致“增加滚动条 -> 减小视口宽度 -> 内容重新布局 -> 滚动条消失”的死循环。
• 通过限制在滚动条“无条件存在”或“预留空间”的情况下生效,可以有效规避此循环。

4. 行业标准与 Web 兼容性
• 详细介绍了 CSS 工作组(CSSWG)关于此问题的讨论和决议历程。
• 引用 HTTP Archive 的数据分析,证明此项改动对现有网站的破坏性极低(仅约 0.0003% 的网站可能受到影响)。
• 强调了目前仅 Chromium 系浏览器支持此特性,尚无纯 CSS 的特性检测方法。

5. 最佳实践建议
• 建议开发者在 CSS Reset(样式重置)中为 html 根元素添加 scrollbar-gutter: stable。
• 相比 overflow-y: scroll,scrollbar-gutter: stable 可以在不强制显示滚动条背景的情况下激活“感知滚动条”的视口计算特性。


Bramus View more posts Using 100vw is now scrollbar-aware (in Chrome 145+, under the right conditions)
#优质博文 #前端 #css #Web性能 #WCAG
HTTP Archive 2025 Web Almanac | CSS-Tricks
介绍 HTTP Archive 发布的 2025 年度《Web 年鉴》报告,总结了当前 Web 性能、CSS 趋势、可访问性及资源膨胀等核心数据。

AI 摘要:这篇文章介绍了最新发布的《2025 Web 年鉴》(Web Almanac),该报告通过对 1720 万个网站的深度分析,揭示了 Web 技术的现状。亮点包括:可变字体(Variable fonts)已成为主流(约 40% 采用率),但网页可访问性(Accessibility)依然严峻,大量网站缺失焦点样式或对比度不足;同时,过去十年间移动端网页体积膨胀了超过 200%,反映出资源过度负荷(Bloat)的问题亟待解决。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 网页设计与 CSS 趋势
• 新的 CSS 属性 text-wrap 的 balance 和 pretty 值虽然发布不久,但已分别达到 2.67% 和 1.71% 的使用率。
• 可变字体(Variable fonts)不再是新鲜事物,桌面端(39.4%)和移动端(41.3%)已有约四成网站在使用。

2. 可访问性(Accessibility)挑战
• 颜色对比度(Color contrast)达标率极低,仅 30% 的网站符合 WCAG 准则。
• 焦点样式移除现象严重,67% 的网站违反了键盘导航必须有可见焦点指示器的规定。
• 图像描述缺失,约 44% 的网站未提供有效的替代文本(Alt attribute),其中 14% 完全缺失标签。
• ARIA 标签使用率高达 70%,但过度依赖或不当使用可能损害语义化(Semantic)HTML 的优势。

3. 性能、内容管理系统(CMS)与生态
• WordPress 依然占据市场主导地位,但增速放缓,目前正处于从扩张向稳定(Stabilization)转型的阶段。
• 网页资源肥胖(Bloat)问题显著,移动端页面体积中位数从 2015 年的 845 KB 增长至 2025 年的 2,362 KB。
• JavaScript 资源负荷极重,中位数达到 697 KB,成为网页性能的主要负担之一。


author Geoff Graham HTTP Archive 2025 Web Almanac | CSS-Tricks
#优质博文 #前端 #CSS #HTML
The Incredible Overcomplexity of the Shadcn Radio Button
是这样的,很多时候会有不必要的复杂性,还有向后兼容的很多逻辑,也没什么办法。但是也有的复杂性在大项目里是必要的。

AI 摘要:这篇文章通过拆解 Shadcn UI 框架中的 Radio Button(单选按钮)组件,指出当前前端开发中存在的“过度工程化”问题。作者发现,原本只需一行原生 HTML 就能实现的单选框,在 Shadcn 中被封装成了依赖 Radix UI、Lucide 图标库、Tailwind CSS 且长达 45 行的代码块。作者通过对比证明,利用现代 CSS(如 appearance: none 和伪元素)完全可以轻松实现自定义样式的原生单选框,从而减少 JavaScript 负载、降低认知负荷并提高性能。


author Paul Hebert
#优质博文 #Turbopack #Rust #前端 #工程化
深入解析 Next.js 的新一代打包工具 Turbopack 如何通过增量计算(Incremental Computation)和细粒度缓存实现极致的开发响应速度。
Inside Turbopack: Building Faster by Building Less

AI 摘要:本文深入探讨了 Turbopack 的核心技术——增量计算(Incremental Computation)。通过从 Webpack 等工具中吸取教训并借鉴 Rust 社区的 Salsa 框架,Turbopack 构建了一套基于“值单元(Value Cells)”的细粒度缓存系统。它不仅能自动追踪函数间的依赖关系,实现“按需”重算,还通过创新的“聚合图(Aggregation Graphs)”解决了大规模依赖图下的查询性能瓶颈。此外,Next.js 16.1 正式引入了持久化的文件系统缓存,进一步提升了大型项目的启动和冷启动效率。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 核心架构:增量计算(Incremental Computation)
• 传统的打包工具随着应用规模增长,构建速度呈线性下降($O(n)$);而 Turbopack 的构建耗时仅取决于变更的大小,而非应用总量。
• 增量计算虽然增加了复杂度和内存开销,但对于大型 Web 应用实现即时反馈(Fast Refresh)至关重要。
• 设计灵感源自十余年的研究,包括 Webpack 的经验以及 Salsa (Rust-Analyzer)、Parcel、Adapton 等系统的启发。

2. 细粒度缓存:值单元(Value Cells)
• 引入 Vc<...>(Value Cells)概念:将每一个执行片段(如读取文件、解析 AST、元数据处理)抽象为类似电子表格的单元格。
• 自动依赖追踪:类似于 SolidJS 的 Signals,当一个函数等待(await)一个 Vc 时,系统会自动建立依赖关系。
• 避免冗余计算:只有当函数真正读取的单元格发生变化时,才会触发重算,而非整个对象发生变化就重算。

3. 变更传播与需求驱动执行(Propagation & Demand-driven)
• 脏值标记(Marking Dirty):当文件变更时,系统将依赖该文件的函数标记为“脏”,并向上冒泡传播,直到受影响的所有节点。
• 需求驱动(Demand-driven):即使标记为脏,系统也会推迟重算,直到该数据被当前的“活跃查询”(如浏览器打开的页面)真正需要。
• 结果比对(Equality Check):如果在传播过程中发现计算出的新值与旧值相等,则停止向上继续传播,从而减少不必要的重算。

4. 大规模优化:聚合图(Aggregation Graphs)
• 性能挑战:在拥有数百万个节点的精细图中,收集错误信息或等待子图计算完成会非常缓慢。
• 聚合层设计:在依赖图之上构建多层聚合图,对下层节点的信息(如错误、警告、状态)进行摘要总结。
• 快速遍历:通过减少需要访问的节点数量,使得系统能够在大规模依赖网络中快速响应全局查询。

5. 持久化存储:文件系统缓存(File System Caching)
• 在 Next.js 16.1 版本中,文件系统缓存已转为稳定版并默认开启。
• 将内存中的依赖图、聚合图及 Vc 结果持久化到磁盘,使得 next dev 在重启后能快速恢复状态。
• 解决了复杂的数据序列化与一致性挑战,显著缩短了大型项目的冷启动时间。


author Anthony Shew, Benjamin Woodruff, Tobias Koppers Inside Turbopack: Building Faster by Building Less
#优质博文 #前端 #工程化 #Rolldown #Vite #新动态

Rolldown 正式发布 1.0 发布候选版本(RC),作为 Vite 未来的核心打包工具,它在保持 Rollup 兼容性的同时,凭借 Rust 实现了 10-30 倍的速度提升。此 RC 标志着 API 的稳定性。在 1.0 之前不会有任何破坏性改动。

Announcing Rolldown 1.0 RC

author VoidZero Team Announcing Rolldown 1.0 RC
#优质博文 #前端 #锚点定位 #CSS #JavaScript #course #动画
介绍如何利用 CSS 锚点定位(CSS Anchor Positioning)实现元素跟随交互目标移动的“随动”(Follow-the-leader)模式。
una.im | Follow-the-leader pattern with CSS anchor positioning

AI 摘要:文章探讨了 CSS 锚点定位(CSS Anchor Positioning)API 的一种高级用法:通过动态更新 anchor-name(锚点名称),让一个定位元素(Follower)在多个潜在锚点之间平滑切换。这种“随动”模式不仅支持纯 CSS 的悬浮(hover)和焦点(focus)触发,还能结合 JavaScript 状态管理或最新的 ::scroll-marker 伪元素,实现极简且高性能的导航高亮、焦点跟随等视觉交互效果。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 技术核心原理 (The Technique)
• 动态锚点绑定:创建一个具有固定 position-anchor 名称的跟随元素,并在交互(如 :hover )时将对应的 anchor-name 赋值给当前目标,实现定位目标的动态切换。
• 平滑过渡动画:利用 CSS transition 作用于 top、left 等属性,使跟随元素在不同锚点间移动时产生平滑的动画效果。
• 定位限制:目前 position-area 属性尚不支持动画过渡,因此实现平滑移动仍需依赖绝对定位属性(如 top, left, right, bottom)。

2. 实际应用案例
• 操作栏 (Action Bar):结合 JavaScript 处理点击状态,并利用 CSS 处理悬浮和焦点态,实现一个类似“放大镜”或“高亮框”在导航项间流转的视觉效果。
• 轮播图滚动指示器 (Carousel Scroll Markers):展示了纯 CSS 的方案,利用 ::scroll-marker 伪元素和 :target-current 伪类,在用户滚动时自动更新锚点名称,驱动指示器跟随。

3. 兼容性与进阶技巧 (Compatibility & Tips)
• 浏览器支持:该技术基于 CSS Anchor Positioning API,目前已在 Chromium 内核浏览器上线,并被列入 Interop 2025,WebKit (Safari) 也即将支持。
• 体验优化:通过伪元素技巧(Pseudo element trick)可以防止鼠标在元素间移动时因间隙导致的状态丢失。
• 性能优势:相比于传统依赖 JS 计算 getBoundingClientRect() 的方案,该方法将布局计算交给浏览器内核,性能更优且代码更简洁。


author una.im
#优质博文 #css #gsap #动画 #前端
利用 GSAP 的 Flip 插件在 CSS 网格(Grid)布局之间创建平滑且响应式的转场动画。
Animating Responsive Grid Layout Transitions with GSAP Flip

AI 摘要:本文详细讲解了如何使用 GSAP Flip 插件来实现动态网格布局的平滑切换。通过结合 HTML 的数据属性(Data Attributes)控制、CSS Grid 的灵活响应式设计以及 GSAP 的状态捕捉能力,开发者可以轻松地在不同列数和尺寸的布局间创建自然的流体动画。文章提供了从基础逻辑到进阶视觉增强(如随机错位和模糊滤镜)的完整代码实现方案。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. HTML 结构与数据属性设计
• 导航面板:通过按钮的 data-size 属性存储目标网格尺寸(如 50%、100% 等)。
• 容器同步:网格容器使用 data-size-grid 属性与按钮状态同步,驱动 CSS 样式变化。
• 灵活项设计:每个网格项利用内联 CSS 变量 --aspect-ratio 定义宽高比,确保在布局变动时比例一致。

2. CSS Grid 响应式布局实现
• 属性选择器驱动:通过 [data-size-grid='...'] 动态调整 grid-template-columns 的列数。
• 响应式适配:利用媒体查询(Media Queries)在不同屏幕宽度下覆盖列数设置。
• 视觉优化:为图片设置 aspect-ratio 属性和滤镜过渡效果,提升交互手感。

3. GSAP Flip 核心逻辑(基础版)
• 状态捕获:在布局改变前使用 Flip.getState() 记录所有网格项的当前位置和尺寸。
• 布局触发:更新容器的 dataset 属性,瞬间改变 DOM 元素的 CSS 布局。
• 动画还原:调用 Flip.from() 让元素从旧位置平滑过渡到新位置,并使用 expo.inOut 缓动函数。
• 交互锁定:通过布尔值变量 animated 防止动画运行期间的重复点击干扰。

4. 进阶效果与视觉增强(进阶版)
• 错位动画(Stagger):引入 stagger 参数并配合随机排序(random order),使元素不再同时移动,增加视觉律动感。
• 容器特效:在 Flip 动画执行的同时,对整个网格容器应用模糊(Blur)和亮度(Brightness)的补间动画。
• 性能考量:使用 will-change: filter 等属性优化渲染性能,确保复杂转场时的帧率稳定。


author Iqbal Muthahhary
#优质博文 #动画 #JavaScript #前端 #CSS
Anime.js v4.3 发布,引入强大的自动布局(Auto Layout)动画功能,支持平滑处理复杂的 CSS 布局变换。

这个真的好诶!跨框架造福前端人。

Introducing Auto Layout in Anime.js v4.3!

官方提供了 文档说明发布日志,并在 CodePen 上发布了 示例集合

顺带一提,我很喜欢现在 Moe Copy AI 现在的内容提取功能~~现在可以直接选中提取推文串进行总结的,准备下个版本改改加一下常用的选择器,现在还是直接选中元素提取出来进行总结。

AI 摘要:Anime.js v4.3 版本正式推出了全新的自动布局(Auto Layout)功能,解决了长期以来 CSS 布局属性(如 display: flex/grid)难以实现平滑过度动画的痛点。该版本支持自动检测 DOM 位置变化、元素入场/出场动画以及子元素的交错效果。其 API 保持了以往的简洁性,支持任意缓动函数(Easing functions),并且动画过程可随时中断(Interruptible),兼容 Solid.js 等现代前端框架。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 核心功能亮点(Core Features)
• 支持对 display: flex、grid 以及 none 等属性进行动画化处理,实现无缝布局切换。
• 自动捕捉并平滑处理 DOM 元素的位置变化(Position changes)。
• 内置入场(Enter)与出场(Leave)动画支持。
• 提供可中断的动画(Interruptible animations)机制,确保交互响应灵敏。
• 支持子元素的交错动画(Staggered animations),提升视觉层次感。

2. 开发者资源与生态(Resources & Ecosystem)
• 确认了与 Solid.js 等框架的兼容性,具有广泛的框架适配潜力。
• 坚持 “极简 API(Dead simple API)” 的设计哲学,降低上手门槛。


author Julian Garnier
#优质博文 #Markdown #前端
Creating “Edit” Links That Open Plain-Text Source Files in a Native App
好思路,通过自定义 URL 协议(如 vscode:// 或 obsidian://)在网站上添加隐藏的“编辑”按钮,直接调用本地编辑器修改 Markdown 文件。

AI 摘要:作者 Jim Nielsen 分享了如何优化其静态博客的编辑体验。通过利用 iA Writer 等原生应用支持的自定义 URL Scheme(URL 协议),他在博文页面中嵌入了一个隐藏的“编辑”链接。当他在阅读文章发现错误时,只需点击该链接,系统便会自动唤起本地编辑器并打开对应的 Markdown 源文件。作者还通过简单的 JavaScript 和 LocalStorage(本地存储)技术,确保该功能仅对自己可见,从而在不依赖复杂 CMS(内容管理系统)的情况下,将操作系统与本地文件系统转化为了高效的内容管理平台。


author Jim Nielsen
#优质博文 #React #前端
useOptimistic Won't Save You:深入探讨 React 19 的 useOptimistic hook,说明其必须结合 Transition 和 Action 状态管理才能真正处理复杂的竞态条件。
作者最后建议,这些复杂的底层 API 更多是为框架开发者设计的,普通开发者应倾向于使用成熟框架提供的抽象。

AI 摘要:本文分析了在 React 中实现乐观 UI (Optimistic UI) 的演进过程。作者通过对比传统的手动状态管理、使用 useRef 处理竞态条件,以及 React 19 的 useOptimistic 钩子,指出单纯使用该钩子并不能自动解决所有问题。要完美处理并发、竞态条件和错误回滚,开发者需要深入理解并发 React (Concurrent React) 的过渡、动作 (Actions) 以及 useActionState 等底层机制。作者最后建议,这些复杂的底层 API 更多是为框架开发者设计的,普通开发者应倾向于使用成熟框架提供的抽象。


author Colum useOptimistic Won't Save You
 
 
Back to Top