呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页: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
#优质博文 #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
#优质博文 #Node #后端 #工程化
Dynamic Configuration in Node.js: Beyond Environment Variables
Node.js 应用如何从传统的静态环境变量转向动态配置,以实现无需重新部署即可实时调整系统行为。

AI 摘要:文章深入分析了在 Node.js 中使用静态环境变量的局限性,特别是在需要快速响应生产环境变化(如调整频率限制、切换特性开关等)时。作者对比了实现动态配置的三种主流技术方案:轮询 (Polling)、Webhooks 和服务器发送事件 (SSE / Server-Sent Events),并强调了将“代码部署”与“配置更改”解耦的重要性。通过使用动态配置工具,开发者可以实现更快的事故响应、更安全的灰度发布以及更清晰的权责分离。


author Dmitry Tilyupo Dynamic Configuration in Node.js: Beyond Environment Variables | Replane
#优质博文 #前端 #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
#优质博文 #数据库 #系统架构 #后端 #运维
探讨了传统“软删除”模式(如 archived_at 列)带来的长期复杂性,并对比分析了触发器、应用层事件和 WAL 等更优的替代方案。
对于新项目,作者优先推荐基于触发器的方案,因为它部署简单、不引入额外基建,且有效隔离了活跃数据与归档数据。
The challenges of soft delete

AI 摘要:本文深入分析了在数据库中直接使用 archived_at 字段实现软删除(Soft Delete)的弊端,指出这种做法会导致数据膨胀、索引效率下降、查询逻辑复杂化以及数据迁移困难等问题。作者对比了三种替代方案:应用层异步归档、数据库触发器(Triggers)记录 JSON 快照以及基于 WAL 的变更数据捕获(CDC)。作者认为,对于大多数新项目,使用触发器将删除的数据转移至独立的归档表是平衡简洁性与实用性的最佳选择。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 传统软删除模式的弊端
• 数据膨胀与性能损耗:99% 的已删除数据永不被读取,却占用了昂贵的存储,导致数据库备份与恢复耗时剧增。
• 查询与索引复杂化:应用代码必须在每个查询中过滤已删除记录,索引也需要额外关注这些“死数据”,增加了误读风险。
• 数据迁移(Migration)难题:旧的归档数据可能不符合新的 Schema 约束或校验规则,导致数据库迁移变得棘手。
• 恢复逻辑不一致:恢复记录往往不只是修改一个状态位,还可能涉及外部系统调用,重复编写创建逻辑容易滋生 Bug。

2. 替代方案一:应用层归档 (Application Level Archiving)
• 机制与优势:在删除记录时发送事件(Event)到消息队列(如 SQS),由另一个服务将其序列化为 JSON 并存储至 S3 等对象存储中。
• 优点:主库结构保持纯净,处理异步化提高性能。
• 缺点:增加了基础设施复杂度,且 S3 中的归档数据难以直接通过 SQL 查询进行检索

3. 替代方案二:数据库触发器 (Triggers)
• 实现方式:利用 PostgreSQL 触发器在执行 DELETE 前,将行数据转换为 JSONB 格式并插入一个通用的 archive 归档表。
• 级联删除处理:通过会话变量(Session Variable)追踪根源,记录级联删除(Cascade Delete)是由哪个父表操作引起的。
• 优势:兼具性能与灵活性,主表无冗余数据,归档表易于清理(例如清理 90 天前的数据)且仍然支持 SQL 查询。

4. 替代方案三:基于 WAL 的变更数据捕获 (CDC)
• 技术栈:利用 Debezium、Kafka 或 pgstream 等工具读取 PostgreSQL 的预写日志(WAL),过滤删除事件并流转至外部存储。
• 优势:对主库性能几乎零影响,无需修改业务逻辑或添加触发器。
• 运维挑战:需要维护复杂的 Kafka 集群;需警惕 WAL 积压(Lag)导致主库磁盘写满,需合理配置 max_slot_wal_keep_size。


author Atlas9
#优质博文 #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
#优质博文 #AI #独立开发
不会编程的人能靠 AI 独立开发应用吗?
作者认为,AI 确实大幅降低了“将想法翻译成代码”的技术门槛,但“不会编程”、“靠 AI”和“应用”这些词语的边界远比想象中模糊。在与 AI 协作的过程中,使用者会不自觉地习得编程概念,AI 更多是作为博学但死板的“徒弟”或“翻译官”,帮助有逻辑、有想法的人实现愿景,而非代替思考和定义问题。

author So!azy
#优质博文 #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
#优质博文 #AI #开源 #Ollama
当安全团队因合规性禁用云端 AI 工具(如 Cursor / Claude Code)时,OpenCode 配合 Ollama 可提供了本地运行的替代方案,这篇文章简要介绍了一下。
虽然我没有这种烦恼,但是 mark 一下。
Your security team blocked Cursor and Claude Code—time to switch to OpenCode

AI 摘要:文章介绍了 OpenCode,这是一个支持本地 LLM(大语言模型)运行的开源 AI 编程助手。针对医疗、金融等对数据主权(Data Sovereignty)要求严苛的行业,OpenCode 通过集成 Ollama,确保代码不离开本地机器,从而规避了 Cursor 和 Claude Code 等云端工具带来的合规风险。虽然本地模型在逻辑推理和复杂调试上目前仍逊于云端模型,但在严格监管的环境下,它是目前最可行的 AI 辅助开发方案。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 合规挑战与解决方案
• 多数云端 AI 工具(AI coding tools)会将代码片段发送至第三方服务器,这违反了医疗(PHI)、金融(SOC 2)或政府行业的合规要求。
• OpenCode 作为开源替代方案,通过支持本地模型运行(Local model execution)确保数据隐私。
• 虽然本地模型在质量上不一定优于 Cursor,但在云端工具被封锁时,它是唯一的合规选择。

2. OpenCode 技术架构与配置
• OpenCode 提供终端 TUI(Text user interface)、VS Code 扩展和桌面应用。
• 核心功能是通过 Ollama 充当本地编排器,支持 Qwen 2.5 Coder 和 DeepSeek Coder 等模型。
• 需要手动调整上下文窗口(Context window)配置,默认的 4,096 token 往往不足以处理多文件编辑,建议提升至 16K–32K。

3. 性能评测与实战表现
• 代码重构(Refactoring):本地模型需要更多的人工干预和显式指令(Explicit instructions),难以一次性完成高质量重构。
• 模式匹配(Pattern-matching):在编写输入验证(Input validation)等标准任务时表现出色,能自动匹配项目规范。
• 复杂调试(Debugging):在处理跨文件或涉及系统底层逻辑(如时区处理)的 Bug 时,本地模型容易出现幻觉(Hallucinations)并失败。

4. 行业应用场景建议
• 适用场景:医疗保健、金融机构和政府承包商,这些行业无法签署供应商的免责协议。
• 权衡取舍:选择本地模式意味着放弃了云端模型(如 Claude Sonnet 4)的高速度和深度架构理解能力,需要预留 2-3 倍的开发时间。
• 结论:如果条件允许,首选 Cursor;如果出于合规性必须本地化,OpenCode 是目前的最佳实践。


author Ikeh Akinyemi Your security team blocked Cursor and Claude Code—time to switch to OpenCode - LogRocket Blog
#优质博文 #CMS #Sanity #AI
"You should never build a CMS" | Sanity:Sanity 回应 Cursor 将 CMS 迁移至 Markdown 的热议,分享了许多非常好的使用 CMS 的理由。

感觉这个确实:
当同一条信息(如价格、法律条文)出现在多个地方时,Markdown 需要手动更新多处,而结构化内容只需修改一处。

AI 摘要:这篇文章是 Sanity 官方对 Lee Robinson(Cursor 团队)近期将内容从 CMS 迁移到 Markdown 文件这一趋势的深度回应。作者承认了传统 Headless CMS(无头内容管理系统)在复杂性、身份验证和 AI 接入方面的痛点,但指出“删除 CMS 并不等于删除了管理需求”。文章强调 Markdown 方案在处理非规范化数据、复杂语义协作和高级查询(Grep 的局限性)方面存在天然缺陷。Sanity 认为,真正的解法不是退回到原始的扁平文件,而是利用如 MCP(Model Context Protocol,模型上下文协议)等新技术,让 AI 直接与结构化内容 API 交互,构建真正面向 AI 的内容基础设施。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 现状反思:为何开发者想要逃离 CMS
• 承认 Headless CMS 带来的复杂性并没有为所有用户提供成比例的价值。
• 痛点分析:笨重的预览工作流(Preview workflows)、碎片化的身份验证(Auth fragmentation)以及高昂的存储成本。
• AI 接入障碍:传统的 API 验证屏蔽了 AI Agent,使其无法像读取本地代码库一样轻松访问 CMS 内容。

2. 核心争论:Markdown 的“内容即页面”陷阱
• 简单性的错觉:Markdown 适合一对一的简单页面,但无法处理内容的规范化(Normalization)。
• 维护噩梦:当同一条信息(如价格、法律条文)出现在多个地方时,Markdown 需要手动更新多处,而结构化内容只需修改一处。
• 实体与字符串:Markdown 本质上是字符串的堆砌,缺乏实体(Entities)概念,难以进行复杂的关联分析。

3. 工具边界:Git 与内容协作的错位
• 合并冲突的本质:代码合并是结构化的(Mechanical),而内容合并是语义化的(Semantic),Git 无法理解内容修改的意图。
• 实时协作需求:内容团队通常需要实时反馈,而非 Git 式的异步提交与拉取。
• 扩展性瓶颈:随着内容规模增长,Git 方案往往会演变成需要通过 Slack 协调修改或复杂的 PR 审核流程。

4. 技术深潜:Grep 无法替代结构化查询
• 检索局限性:Grep(全局正则表达式搜索)只能做简单的模式匹配,无法处理逻辑复杂的查询(如“查询某日期后发布的所有企业类案例”)。
• 查询语言的力量:展示了 GROQ 语言在处理复杂数据筛选时的优势,强调结构化数据才是 AI Agent 推理的最佳底座。

5. 未来趋势:面向 AI 的内容基础设施
• MCP 服务器的兴起:介绍 Sanity 推出的 MCP 服务器,使 AI Agent 能直接操作内容模式(Schema)并管理发布。
• 格式误区:区分“适合 AI 输入输出的格式(Markdown)”与“适合作为基础设施的格式(结构化数据)”。
• 真正的 AI 驱动:内容应是可查询的(Queryable)而非仅可搜索的(Grep-able),且应与展示层无关(Presentation-agnostic)。
“You should never build a CMS” | Sanity
#优质博文 #动画 #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
 
 
Back to Top