呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页: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 的循环动画,用趣味视觉缓解用户体验挫败感。
#优质博文 #WebGL #CSS #前端 #动画 #course
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
#优质博文 #React #CSS #前端 #动画 #course
是一篇不错的 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 Animating Elements through framer motion with React.js
#优质博文 #CSS #前端 #动画 #新特性
The Big Gotcha With @starting-style

AI 摘要:本文介绍了 CSS 的新特性 @starting-style,它允许使用 transition 实现入场动画,但作者指出该特性存在严重的 specificity(优先级)陷阱,使得动画常常无法按预期运行。作者对比了 @starting-style 与传统的 keyframes,分析了具体问题案例,并提出三类解决方案:使用 !important、借助 CSS custom properties(变量)、退回到 keyframes。整体结论是:虽然 @starting-style 看似简化了写法,但 keyframe 动画依然更稳定、通用且易于维护。


author Josh W. Comeau The Big Gotcha With @starting-style • Josh W. Comeau
#demo #codepen #CSS #动画
这个是真的酷!
Gallery Button:纯 CSS 相册预览动画,具备折叠展开的纸张效果
#优质博文 #前端 #CSS #SVG #性能优化 #动画
Replace Your Animated GIFs with SVGs

AI 摘要:文章介绍了使用 SVG 动画 作为 GIF 动画 替代方案的优势。与 GIF 相比,SVG 动画文件体积更小、分辨率无损放大、与部分 CSS 媒体查询兼容,还可以直接嵌入 img 标签或作为背景图使用。但也存在局限:如不支持 prefers-reduced-motion、无法触发交互事件(hover/click)、限制 JavaScript 等。整体上,SVG 动画是 GIF 的现代替代,尤其适用于形状移动或变换类动画,性能和画质优势明显。


author John Rhea Replace Your Animated GIFs with SVGs
#优质博文 #UI #UX #交互设计 #动画 #设计 #前端
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 Emil Kowalski
#React #组件库 #前端 #tailwind #动画 #开源
挺不错的~
ForgeUI官网

AI 摘要:ForgeUI 是一个基于 React 的实验性组件库,重点在于“动画优先”的设计理念,提供动画表单、动态卡片、闪烁文字等现代化 UI 组件,旨在帮助开发者快速实现富交互界面。其技术栈包括 Next.js、TypeScript、Tailwind CSS、shadcn/ui 和 Framer Motion。项目定位更像是作者的“个人实验室”,供开发者参考与取用,而非正式社区驱动的开源产品。


author Aman Shakya
#优质博文 #CSS #动画 #color #前端
Color Shifting in CSS • Josh W. Comeau

AI 摘要:本文通过构建粒子效果的案例,揭示了在 CSS 中实现颜色动态变化时会遇到的限制(如 RGB 插值导致灰色过渡),并提出利用 CSS filter 中的 hue-rotate() 作为更佳的解决方案。同时,作者还演示了如何使用随机性和闪烁效果(twinkling)增强动画的自然感受,最后预告了即将上线的动画课程。


[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 引言:粒子特效与颜色变化的重要性
• 粒子从随机颜色开始,逐渐淡出时改变色相 (hue)
• 动画核心在于“颜色渐变”而非单一随机取色

2. 颜色生成的方式
• 使用 RGB 随机值生成色彩 → 结果缺乏统一风格
• 使用 HSL 固定饱和度和亮度,只在色相上变化 → 形成更加统一的色调效果

3. 从单一颜色到颜色过渡
• 初步尝试利用 HSL 渐变 → 浏览器实际以 RGB 插值,导致过渡中间产生灰度色
• HSL 的 0° 与 360° 等效,无法实现完整色相轮动画

4. CSS 渲染限制:RGB 插值问题
• color-transition 过程中浏览器默认以 RGB 渠道计算
• 中间值往往失真,无法表现我们感知的平滑色相变化

5. CSS filter 的解决方案
• 使用 filter: hue-rotate() 实现真实的色相旋转
• 可实现超过 180° 的平滑过渡
• 注意:该方法常使颜色显得更暗,需要选择更亮或低饱和度的初始色

6. 增强动画的细节:Twinkling 闪烁效果
• 使用 keyframes + 随机参数产生轻微闪烁,避免所有粒子同步
• 过渡不再是死板的线性透明度衰减,而是更自然的消隐效果


author Josh W. Comeau
Color Shifting in CSS • Josh W. Comeau
#demo #codepen #svg #gsap #动画
Rainbow Loop 彩虹循环
Tom Miller takes inspiration from a rainbow of crayon colors by wearepretendfriends for this brilliant GSAP-fueled SVG animation.
Tom Miller 从 wearepretendfriends 的彩虹蜡笔颜色中汲取灵感,制作了这个精彩的 GSAP 驱动的 SVG 动画
#优质博文 #前端 #CSS #动画 #渐进增强 #浏览器兼容 #HTML
The interpolate-size property is a great example of progressive enhancement

AI 摘要:文章以 details 元素的展开动画为例,展示如何在 :root 启用 CSS 属性 (interpolate-size) 以允许对 auto 等关键字尺寸做插值过渡,利用 lh 单位与自定义属性计算闭合态高度,开启态使用 height: auto 与 overflow: clip;无需 @supports 包裹,因为未知属性会被忽略,从而在 Chromium 获得平滑动画,在 Firefox/Safari 等未支持浏览器优雅降级为无动画但不破坏布局的最小可用体验,体现了渐进增强的最佳实践。

1. 背景与定义
• 需求来源:长期呼声是能将高度或宽度过渡到 auto 及 min-content、max-content、fit-content 等关键字尺寸。
• 能力说明:CSS 属性 (interpolate-size) 允许对关键字尺寸进行插值,使 height/width 过渡到 auto 成为可能。
• 支持现状:当前主要在 Chromium 系列可见效果,其他浏览器尚未跟进,属于渐进增强的理想目标场景。
• 参考阅读:Animate to height: autoMDN 兼容性表Shoptalk Show #679

2. 实践方案与代码思路
• 全局启用:在 :root 设置 interpolate-size: allow-keywords;无需 @supports 包裹,未识别属性会被忽略。
• 闭合态高度计算:采用 lh 单位 (lh) 获取文本行高,结合自定义属性计算 padding,使用 calc 组合出闭合态 height。
• 动画设置:对 height 做 transition,选择线性 (linear) 且时长短促,保证“迅捷而不拖沓”的交互手感。
• 展开态处理:使用 height: auto 配合 overflow: clip,避免滚动条并实现干净的内容裁切。
• 延伸阅读:lh 单位介绍overflow: clip 详解

3. 渐进增强与兼容策略
• 无需防守式 @supports:未知属性在旧浏览器被忽略,不会破坏布局与交互。
• 分层体验:Chromium 获得平滑动画;Firefox/Safari 获得“无动画但可用”的最小可用体验 (MVE)。
• 零 polyfill 负担:不引入沉重的脚本或补丁,等待兼容性完善后即刻“自动生效”。
• 方法论回顾:什么是渐进增强

4. 适用场景与实用建议
• 手风琴/折叠面板:在多组 details 组成的手风琴中,可用相同 name 属性实现互斥展开。
• 动效节奏:尺寸动画更适合线性插值与短时长,避免拖沓的缓动曲线影响可用性。
• 可配置性:通过自定义属性调整 padding 与动画时长,便于在不同组件语境重用。

5. 关键要点速览
• interpolate-size 让“过渡到 auto”成为可能,但目前只在部分浏览器体现动画。
• 利用“未知即忽略”的 CSS 特性,直接书写未来语法,旧浏览器自然降级。
• 以 lh 为基础计算闭合态高度,展开态使用 auto + clip,代码简洁且语义清晰。


author Andy Bell The interpolate-size property is a great example of progressive enhancement
#优质博文 #前端 #CSS #动画 #course
这篇写得真好,offeset-path 讲明白了。
The -path of Least Resistance (Part 2)

AI 摘要:本文从静态形状的剪切路径 (clip-path) 转向运动路径 (offset-path),系统讲解如何用 offset-distance、offset-anchor、offset-position、offset-rotate 等控制元素沿自定义路径自然运动;阐明 offset transform 在 transform 栈的执行顺序及其对视觉结果与性能的影响;区分闭合与开放路径、负值与溢出距离的行为;展示用 shape() 切分路径与 ray() 创建无限射线;并给出交互触发与可访问性 (prefers-reduced-motion) 的实践建议与性能优化策略。

1. 概念与对比
• 从剪切路径 (clip-path) 的“控形”转向偏移路径 (offset-path) 的“控动”
• 参照系差异:clip-path 相对元素 border-box,而 offset-path 相对包含块 (containing block)
• shape() 浏览器支持度低于 offset-path 与 clip-path

2. 值与坐标
• 支持绝对单位与百分比,适配响应式
• 大量使用 CSS 变量,使路径定义、函数参数、单点坐标可参数化
• 路径静态由 offset-path 定义,位置动态由 offset-distance 驱动

3. 距离与动画
• 核心动画仅需 offset-distance: 0% → 100%
• 非线性运动:通过多关键帧实现往返与停顿
• 可用 transition 在 hover、focus、click 等交互中平滑过渡 offset-distance

4. 锚点与起点
• offset-anchor 决定元素哪个点贴合路径(类似 transform-origin)
• offset-position 决定路径在包含块中的起始位置:normal(居中)、auto(元素自身位置)、或显式坐标

5. 旋转与方向
• offset-rotate 控制沿路径方向的旋转:auto、固定角度、auto 叠加角度、reverse
• 通过 auto 使元素切线对齐,实现自然转向

6. 变换栈与相互关系
• 变换顺序:单独 transform 属性 (translate/rotate/scale) → offset transform → transform
• 相同路径在不同层次的变换组合会产生不同视觉结果

7. 性能考虑
• offset-path 属于 transform 栈,享受硬件加速,避免重排重绘
• 动画中避免改动 offset-path,本应动画 offset-distance;用变量或类切换路径
• 简化路径:简单直线不必用 shape(),circle() 性能优于大量曲段的 path()

8. 闭合与开放路径
• circle()、inset()、polygon() 天生闭合,0% 与 100% 连续循环
• path()、shape() 可开可闭;开放路径 100% 回到 0% 会“跳跃”
• 负值与溢出:闭合路径可环绕归一化,开放路径则钳制在 0%–100%

9. 分段路径与“切割”
• 使用 shape() 的 move 指令在中途打断并重启路径
• 适合制作从一点“传送”到另一点的分段运动效果

10. 无限射线 ray()
• ray(angle) 生成无穷直线;100% 通过关键字定义参照距离:closest-side、closest-corner、farthest-side、farthest-corner、sides
• 始终为开放路径,超过 100% 将无限延伸,适用于飞出屏幕、激光、方向性动画

11. 可访问性与交互
• 尊重用户减少动画偏好:@media (prefers-reduced-motion: no-preference) 有条件启用
• 交互驱动:用状态切换与 transition 提供可控运动反馈

12. 总结与实践要点
• clip-path 控形,offset-path 控动,二者组合形成 CSS 空间表达的完整语汇
• 选对参照系与锚点,明确起点与旋转策略
• 动画以 offset-distance 为主,路径参数化,注意性能与可访问性


author Amit Sheen The `-path` of Least Resistance (Part 2)
#优质博文 #前端 #CSS #动画 #demo
好,好酷的纯 CSS 动画……

Circular gallery of rounded images:利用少量CSS的 offset 属性和 :nth-child 选择器,即可创建一个将多张图片排列成同心圆的画廊效果。

⚠️ Limited support (Chrome only for now)
#优质博文 #CSS #前端 #动画 #视差滚动 #新特性
Bringing Back Parallax With Scroll-Driven CSS Animations

AI 摘要:本文详细介绍了如何利用新兴的 CSS 滚动驱动动画技术,以纯 CSS 的方式重新实现经典的视差滚动 (Parallax) 效果。与传统的 JavaScript 方案相比,这种新方法将动画移出主线程运行,从而显著提升了性能和流畅度。文章通过实例讲解了 animation-timeline 属性的两种核心时间轴函数 scroll() 和 view() 的使用场景与区别,并进一步介绍了如何使用 animation-range 属性精确控制动画的触发时机与范围,最后还探讨了针对运动敏感用户的无障碍设计和浏览器兼容性的回退方案。


author Blake Lundquist Bringing Back Parallax With Scroll-Driven CSS Animations | CSS-Tricks
#优质博文 #CSS #动画 #前端 #新特性
Infinite Marquee Animation using Modern CSS

AI 摘要:本文介绍了如何用现代 CSS 新特性(如 shape(), sibling-count(), sibling-index() 等)实现一个无限循环的简洁 Marquee(走马灯)动画,无需 JavaScript,并能自动适配任意数量、任意宽度的图片或元素。作者详细讲解了这一方案相比传统方法(如 <marquee> 或元素克隆)在性能、可维护性和响应式设计上的优势,并提供了完整、紧凑的 CSS 代码实例。相比以往需要繁琐计算或操作 DOM,此方法仅需 10 行 CSS 即可实现高效且灵活的无限轮播动画,同时分析了 shape() 函数的基本用法及其带来的灵活性。


author Temani Afif Infinite Marquee Animation using Modern CSS
#优质博文 #css #Unicode #前端 #字素簇 #动画
太酷了。
Project AIRI DevLog @ 2025.08.01Clustr

AI 摘要:本文由 Makito 首次在 Project AIRI 的 DevLog 分享,聚焦于如何在前端应用中处理和实现流式 UTF-8 字节流的文本动画,尤其是在聊天或语音转写等实时场景下正确分割和显示「字素簇」(grapheme cluster)。作者深入探讨了 Unicode 编码、多码点合成字符的边界难题,以及利用 Web API,如 TextDecoder、Intl.Segmenter,实现安全高效的字素簇流式提取,并介绍了自己的开源库 Clustr。文章结合了丰富的实例和交互组件,面向希望在项目中实现高质量文本动画及多语言兼容的前端开发者,具有较高参考价值。

1. 背景与动机
• 投稿者首次在 DevLog 发文,介绍参与 Project AIRI 过程。
• 动画文本在现代 UI(如聊天消息)中的作用和实现难点。
• 第三方库(Anime.js, splt, GSAP)在文本动画实现上的进展与现有不足。
• 项目的需求:需实时处理和动画化接收自 UTF-8 字节流的数据。

2. Unicode 基础与「字素簇」难题
• 码点(Code point)与 UTF-8 字节流的对应关系,字节组装所需注意事项。
• Unicode「字素簇」的定义,即多个码点合为视觉整体的最小文本单元。
• 通过实际 Emoji 和南亚文字示例,阐释组合字符的裸数据和视觉表现。
• 传统 Web API 如 TextDecoder 能将字节流还原为码点字符,但不足以分割复杂字素簇。

3. Web API 应用与完善方案
• 利用 TextDecoder.decode(stream选项)实现流式解码,拼接字符串缓冲区。
• 使用 Intl.Segmenter 拆分字符串为字素簇,支持多语言处理。
• 提出解决方案:因为流数据随时变化,需确保不完整的字素簇不被导出,因而采用「丢弃最后一个」策略缓冲输出,避免合成字符的过早显示。

4. 流式字素簇库 Clustr 的诞生
• 市场调研发现缺乏专门处理流式 UTF-8 字节流并输出字素簇的库。
• 作者自研 Clustr,核心代码不到100行,实现了上述需求。
• Clustr 能帮助前端实时渲染流式文本动画,兼容多语言复杂字符。

5. 互动组件与社区交流
• 提供探索字素簇组合和实时代码交互的小组件。
• 鼓励开发者参与 Project AIRI 相关 GitHub 仓库,共同讨论和改进工具。


author Makito
#优质博文 #CSS #demo #codepen #动画 #svg #webgl #液态玻璃
也是一个 Liquid Glass Web 实现合集 demo 整理,有几个实现的确实漂亮啊~
Liquid Glass on the Web

AI 摘要:本文深入探讨了 Apple 即将在其操作系统中全面采用的 Liquid Glass(液态玻璃)设计风格,并分析现有 web 技术如何实现这一视觉效果。作者梳理了 Liquid Glass 在网页端的多种实现方法,包括 CSS 的 backdrop-filter 和 SVG 滤镜(filter),并特别关注了该效果在可访问性(accessibility)上的挑战。文中还介绍了社区工具与实践案例,并指出 Liquid Glass 视觉语言强调的不仅是玻璃质感,还包含液体流动的动态感。


author Chris Coyier
#前端 #demo #动画 #css #codepen

jhey ʕ•ᴥ•ʔ(@jh3yy): number range slider using 3D CSS transforms
sometimes a shift in perspective unlocks a new solution
check the reveal👇
使用 3D CSS 转换的数字范围滑块
有时,视角的转变会解锁新的解决方案
检查显示 👇


https://fixupx.com/jh3yy/status/1945596617802867087

https://codepen.io/jh3y/pen/xxvVWxN
#优质博文 #CSS #前端 #UX #动画
Scroll-Driven Sticky Heading

AI 摘要:本文详细介绍了如何使用 CSS 滚动驱动动画(Scroll-Driven Animations, SDA)创建一个随着用户滚动页面而动态变化的粘性标题效果。通过结合伪元素和滚动时间轴,作者展示了如何实现标题文本的动态切换和动画效果,同时兼顾了浏览器兼容性和无障碍访问。文章从基础的语义化标记开始,逐步深入到动画实现、兼容性处理及用户偏好考虑,最后鼓励读者发挥创意,探索 SDA 的更多可能性。

1. 引言与背景
• 介绍了滚动驱动动画(SDA)作为一种强大的工具,可以根据用户的滚动位置动态变换页面元素,增强网站的互动性和吸引力。
• 作者分享了通过 SDA 实现主标题(h1)文本随滚动变化的创意,并将在本文中逐步拆解实现过程。
• 强调效果仅在支持 SDA 的浏览器(如 Chromium 系)中有效,且提供了不支持时的静态回退方案。

2. 动画效果的初步解析
• 探讨了文本动画的核心原理,灵感来源于早期的打字机效果。
• 通过伪元素的 content 属性实现文本内容的动态切换,而无需依赖宽度动画或特定字体,保持灵活性。

3. 构建基础结构
• 从语义化标记入手,使用 <main> 和 <section> 结构,包含多个带有标题和内容的section(如“Primary Colors”主题)。
• 初始 CSS 仅做基础样式调整,确保内容静态、语义化和无障碍访问,为后续动画效果奠定基础。

4. 添加滚动驱动标题
• 在页面顶部添加一个额外的 <h1> 作为动画标题,并通过 aria-hidden="true" 确保其对屏幕阅读器不可见。
• 其他静态标题使用 .srOnly 类隐藏视觉呈现,但保留无障碍访问支持,确保语义完整性。

5. 兼容性处理
• 使用 @supports (animation-timeline: scroll()) 检查浏览器对 SDA 的支持,不支持时隐藏动画标题,显示静态内容。
• 确保无障碍技术和不支持 SDA 的浏览器用户仍能访问完整内容。

6. 实现粘性标题
• 通过 position: sticky 和 top: 0 让动画标题固定在视口顶部。
• 添加背景、边距等样式优化视觉效果,确保标题在滚动中清晰可见。

7. 关键帧与滚动位置
• 使用自定义脚本显示滚动进度百分比,帮助确定标题切换的精确位置(如 30%、60%、90%)。
• 通过伪元素的 content 属性和滚动时间轴,设置关键帧以切换标题文本。

8. 文本动画细节
• 清除动画标题的初始内容,使用伪元素动态填充文本。
• 设置 animation-timing-function: step-end,确保文本在指定关键帧处精准切换。
• 手动编写关键帧,逐步增减字符,模拟打字动画效果,增强过渡自然感。

9. 用户偏好与无障碍
• 考虑 prefers-reduced-motion 偏好,使用媒体查询禁用动画,提供静态替代方案,照顾对运动敏感的用户。
• 强调无障碍设计,确保内容对所有用户可访问。

10. 效果扩展与创意
• 提出动画标题的多样化实现,如固定部分文本,单独动画其余部分,或通过 SDA 改变颜色、背景等。
• 展示如何叠加多个滚动驱动动画,丰富视觉效果。

11. 总结与号召
• 强调 SDA 不仅是炫酷技巧,更是网页设计的革新工具,能显著提升用户体验。
• 鼓励读者尝试 SDA,探索创意可能性,并分享作品、想法或问题,激发社区交流。


author Amit Sheen
Scroll-Driven Sticky Heading | CSS-Tricks
#前端 #趣站 #tools #webgl #three #demo #动画
洗衣机酱是一个 3D 洗衣店,在这里图像会被清洗。一个使用 Three.js 构建的本地、无广告的背景移除器——快速、私密、有趣。


好可爱好有创意!
https://tools.dverso.io/bgremove/
Media is too big
VIEW IN TELEGRAM
 
 
Back to Top