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

图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
#优质博文 #前端 #css #动画
Creating Scroll-Based Animations in Full view() | CSS-Tricks

AI 摘要:本文深入探讨了 CSS animation-timeline 属性中的 view() 函数,它允许开发者创建基于元素在滚动容器(scrollport)中可见性(visibility)的动画。文章通过一个图片轮播(carousel)示例,详细演示了如何结合传统 CSS 动画、关键帧(keyframes)和 view() 函数,实现元素进入/退出视图时的缩放、模糊等动态效果。此外,文章还比较了 view() 与 scroll() 函数的区别,并介绍了 view() 函数的轴(axis)和插入(inset)参数,以及 animation-range 属性,帮助读者更精细地控制动画的触发时机和范围,为制作交互式滚动动画提供了实用的指导。

以下是方便搜索索引的大纲(AI 生成),请读原文:
1. view() 函数简介与核心概念
• animation-timeline 属性接受 view() 函数,实现基于元素可见性的动画。
• 类比 JavaScript 的 Intersection Observer,动画随元素进入和退出滚动视口(scrollport)而触发。
• 示例:图片轮播中,图片在中间时清晰放大,在边缘时模糊缩小。
2. 搭建基本布局
• 创建一个 <main> 元素作为 carousel 容器。
• 使用 flexbox 使图片横向排列,并设置 overflow-x: auto 实现滚动。
• 定义 carousel-slide 元素作为图片项,设置其宽度为容器的 1/3,实现一次显示三张图片。
3. 实现滚动与滚动捕捉(Scroll Snapping)
• 在 carousel 容器上设置 scroll-snap-type: x mandatory 实现滚动捕捉。
• 使用 scroll-behavior: smooth 实现平滑滚动(可选)。
• 设置 scrollbar-width: none 隐藏滚动条(可选)。
• 为 carousel-slide 设置 scroll-snap-align: center,确保图片居中对齐。
4. 创建基于视图的动画
• 定义 slide 关键帧动画,实现图片在不同阶段的缩放、圆角和模糊效果。
• 将 slide 动画应用于 carousel-slide 元素。
• 使用 animation-timeline: view(inline) 将动画绑定到元素的视图时间线。
• 强调 animation-timeline 需单独声明在 animation 速记属性之后,以避免被覆盖。
5. view() 与 scroll() 函数的比较
• view() 函数创建基于元素在容器中可见性的视图进度时间线,适用于元素特定的显示效果。
• scroll() 函数创建基于容器滚动位置的滚动进度时间线。
• view() 更适合实现当特定元素滚动到视口时触发的动画。
6. view() 函数的参数与 animation-range 属性
• view() 接受 axis (block, inline, x, y)和 inset 参数。
• inset 参数定义滚动视口边缘的偏移量,精确控制动画触发范围。
• animation-range 属性进一步控制动画的开始和结束点,可使用 entry、exit、cover、contain 等关键词。
• 示例:通过 inset 控制动画在元素从底部进入滚动视口时才开始。
7. 创意轮播动画拓展
• 鼓励探索更多 CSS 属性的动画可能性,如背景位置(background position)动画,创造独特的轮播效果。
• 提及注册 CSS 属性(registered CSS properties)可以使更多属性动画化。


author Preethi Creating Scroll-Based Animations in Full view() | CSS-Tricks
#优质博文 #CSS #Tailwind #前端
Tailwind CSS: Targeting Child Elements (when you have to)

AI 摘要:本文探讨了在 Tailwind CSS 中如何针对无法直接控制的子元素(如来自 CMS 或第三方组件的内容)应用样式。尽管作者推荐在多数情况下使用传统的自定义 CSS 样式表,但文章详细介绍了如何利用 Tailwind 的任意变体 (Arbitrary Variants) 和 [&_selector] 语法来实现子元素样式控制。文中通过具体示例展示了如何使用 & 符号结合 CSS 选择器来定位直接子元素、所有后代元素以及处理伪状态 (pseudo-states),并讨论了这种方法适用的场景,最后通过一个实际案例(CMS 内容样式)对比了传统 CSS 和 Tailwind 方式的实现。

以下是方便搜索索引的大纲 (AI 生成),请读原文:
1. 遇到的问题:为什么需要定位子元素
• 传统 Tailwind CSS 的局限性:通常将工具类直接应用于元素,但对于无法控制的嵌套 HTML (如 CMS 内容) 无法直接应用。
• 典型场景:CMS 内容、第三方组件、动态生成的 HTML。
• 解决方案预告:虽然普通 CSS 样式表是首选,但本文将探索 Tailwind CSS 的任意变体 (Arbitrary Variants) 方案。
2. 传统 CSS 解决方案
• 示例:使用 .cms-content a 等选择器为嵌套链接和列表项添加样式。
• 优点:简单、可读、易维护,通常是最佳实践。
3. Tailwind CSS 的任意变体 (Arbitrary Variants)
• 核心概念:使用方括号 [] 在类名中直接编写 CSS 选择器。
• 语法示例:[&_a]:font-semibold。
• & 符号的含义:在 Tailwind 任意变体中,& 代表当前应用类的元素,类似于 Sass/SCSS 或 CSS 嵌套中的 &。
• 生成的 CSS:通过 & 符号,Tailwind 会将类名自身转换为选择器,再拼接我们自定义的子元素选择器,从而实现后代元素样式控制。
4. 常见的子元素定位模式 (Common Patterns)
• 直接子元素 (Direct Children):使用 [&>div] 定位直接子元素,例如为所有直接 div 添加边框和内边距。
• 所有后代元素 (All Descendants):使用 [&_a] 定位所有后代元素,例如为所有链接添加悬停下划线。
• 子元素的伪状态 (Pseudo-states on Children):使用 [&>button:hover] 或 [&_input:disabled] 为子元素在特定状态下应用样式。
5. 何时选择使用任意变体 (When This Makes Sense)
• 场景一:已完全投入 Tailwind 生态,不愿切换到普通 CSS。
• 场景二:只需少量样式规则,为之创建单独的样式表显得过度。
• 场景三:构建流程难以集成额外 CSS 文件。
• 场景四:希望样式与渲染内容的组件协同放置。
• 注意:对于可控内容,直接应用 Tailwind 类依然是最佳实践。
6. 实际案例:CMS 内容样式
• 背景:处理来自无头 CMS 的预渲染 HTML,无法控制内部标记。
• 传统 CSS 方案:展示了为 .cms-content 下的 a、img、li 元素编写的简洁 CSS 样式。
• Tailwind 方案:演示了如何在 Elm 和 React 组件中,通过将所有子元素样式规则整合到父容器的 className 属性中,利用任意变体实现同样的效果。
• 相关插件:提及 @tailwindcss/typography 插件的 prose 类可以处理富文本样式,但有时需要更精细控制。
7. 总结 (The Takeaway)
• 任意变体允许在 Tailwind 框架内使用任意 CSS 选择器,& 代表当前元素,_ 代表空格。
• 强调了通常情况下,独立的普通 CSS 样式表对于嵌入内容来说更简单、更可读、更易维护。
• Tailwind 和传统 CSS 可以良好共存。
• 鼓励读者了解这种方法的可能性,以备不时之需。


author Christian Ekrem Tailwind CSS: Targeting Child Elements (when you have to)
#前端 #优质博文 #CSS #动画 #新特性
CSS Scroll-Triggered Animations are coming to Chrome!

AI 摘要:Chrome 浏览器将在明年初推出纯 CSS 实现的滚动触发动画。这是一种基于时间,并在特定滚动偏移量(scroll offset)触发的动画,与现有的滚动驱动动画不同。这项功能有望在 Chrome 145 版本正式发布,它将替代部分 IntersectionObserver 的用途。

以下是方便搜索索引的大纲 (AI 生成),请读原文:
1. 新特性发布预告
• Chrome 浏览器即将支持纯 CSS 实现的滚动触发动画(Scroll-Triggered Animations)。
• 预计在明年初推出,并在 Chrome 145 版本正式发布。

2. 滚动相关动画的区别
• 滚动驱动动画(Scroll-Driven Animations):动画进度随滚动条移动从 0% 到 100%,停止滚动则暂停,反向滚动则倒退。
• 滚动触发动画(Scroll-Triggered Animations):在达到特定的滚动偏移量时触发,是基于时间的动画。

3. 替代传统实现方式
• 新特性将允许开发者以声明式(declaratively)的 CSS 方式实现,替代部分对 IntersectionObserver 的依赖。

4. 资源与演示
• 为 timeline-trigger 的范围(ranges)创建了一个可视化工具,解释激活范围(activation range)和活动范围(active range)的概念。
• 激活范围(activation range)是触发器被激活的区域,活动范围(active range)是触发器保持激活状态的区域,活动范围必须包含激活范围。

5. 体验方式
• 用户可以在 Chrome Canary 中启用“Experimental Web Platform Features”旗标来提前体验该功能。


author Bramus! CSS Scroll-Triggered Animations are coming to Chrome!
#优质博文 #前端 #CSS #AI #MCP #debug
这个好啊,Chrome DevTools MCP 终于能直接介入浏览器调试了。

Let your Coding Agent debug your browser session with Chrome DevTools MCP

AI 摘要:Chrome DevTools MCP 迎来了重大更新,现在允许 AI 编程助手直接连接到活跃的浏览器会话。这项新功能极大地提升了调试效率,编程助手可以重用现有登录会话、访问活跃的调试面板(如网络面板和元素面板),从而实现手动调试与 AI 辅助调试的无缝切换。文章详细介绍了这一功能的实现原理、安全措施(如用户授权弹窗和控制横幅)以及如何配置和使用,为开发者提供了更智能、更便捷的调试体验。

以下是方便搜索索引的大纲(AI 生成),请读原文
1. Chrome DevTools MCP 新功能概述
• 核心更新:Chrome DevTools MCP 服务器现在支持 AI 编程助手直接连接到活跃的浏览器会话。
• 主要优势
• 重用现有浏览器会话:编程助手可以直接访问已登录的会话,无需重新登录。
• 访问活跃调试会话:编程助手可以直接从 DevTools UI 访问并调查选定的元素或网络请求。
• 工作流改进:实现手动调试与 AI 辅助调试的无缝切换。

2. Chrome DevTools MCP 连接方式
• 现有连接方式
• 使用特定用户配置文件运行 Chrome。
• 通过远程调试端口连接到运行中的 Chrome 实例。
• 在独立临时配置文件中运行多个 Chrome 实例。
• 新增自动连接功能:通过 --autoConnect 选项,MCP 服务器可以请求远程调试连接。

3. 远程调试工作原理及安全措施
• 基础机制:基于 Chrome 现有的远程调试能力。
• 启用步骤:用户需在 chrome://inspect#remote-debugging 中手动启用远程调试。
• 连接流程:
• MCP 服务器配置 --autoConnect 选项后,将尝试连接活跃的 Chrome 实例。
• 用户授权:Chrome 会弹出对话框,要求用户授权远程调试会话,以防止滥用。
• 状态提示:调试会话激活时,Chrome 顶部会显示“Chrome is being controlled by automated test software”横幅。

4. 如何开始使用
• 步骤一:在 Chrome 中设置远程调试
• 导航至 chrome://inspect/#remote-debugging。
• 根据对话框提示允许或禁止传入的调试连接。
• 步骤二:配置 Chrome DevTools MCP 服务器
• 在 MCP 服务器配置中,为 chrome-devtools 服务添加 --autoConnect 命令行参数。
• 示例配置适用于 gemini-cli。
• 步骤三:测试设置
• 运行 gemini-cli 并输入性能检查指令。
• 允许 Chrome 弹窗中的远程调试请求。
• 验证 MCP 服务器是否能成功打开网页并执行性能追踪。
• 更多信息:可参考 GitHub 上的 README 文档获取完整说明。

5. 未来展望
• 调试任务交接:AI 编程助手可以接管调试任务,提升效率。
• 面板数据暴露:计划逐步向编程助手暴露更多 DevTools 面板数据。


author Sebastian Benz
#优质博文 #React #前端 #course
Do's and Don'ts of useEffectEvent in React

AI 摘要:useEffectEvent 是 React 新增的 Hook,用来在 Effect 中获取最新的 props / state 而不触发 Effect 重新执行。它通过保持函数引用稳定,解决了“依赖列表必须包含所有变量”导致的频繁重渲染问题。文章列举了它的使用场景、可做与不可做的细节,以及最佳实践和迁移建议,帮助开发者在合适的场景安全使用该特性。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 什么是 useEffectEvent
• 介绍了 useEffectEvent 的核心概念:创建一个始终读取最新值的稳定函数引用
• 说明它如何在不触发 Effect 重跑的情况下访问最新的 props / state

2. 解决的问题
• 通过聊天应用示例,展示传统写法需把所有变量加入依赖导致不必要的重跑
• 对比使用 useEffectEvent 后,仅在真正需要的依赖(如 roomId)变化时才重新执行 Effect

3. Do's 与 Don'ts
Do:在 Effect 内直接调用、用于读取最新值、用于需要 Effect 上下文的事件处理、分离响应式与非响应式逻辑、同步调用
Don't:在普通 UI 事件处理器中使用、在渲染阶段调用、作为 props 传递、异步或延时调用、替代正常的 memoization

4. 详细示例
正确:在 Effect 中抽离非响应式逻辑(如主题变化)保持连接仅在 roomId 改变时重建
错误:在按钮点击等普通事件中使用 useEffectEvent,建议使用普通函数或 useCallback
正确:在定时器或轮询中读取最新的回调函数(如 onTick)
错误:在异步 fetch 回调中调用 useEffectEvent,可能在组件卸载后仍被调用
正确:在清理函数中也可使用 useEffectEvent 记录页面退出事件
错误:把 useEffectEvent 作为其他 Hook(如 useMemo)的依赖,破坏其稳定性

5. 常见使用场景
• 日志与分析:在路径变化时记录页面访问,内部使用最新的主题、语言、用户 ID 等信息
• 第三方回调:向消息服务订阅回调,回调内部使用最新的用户偏好而无需重新订阅
• 防抖实现:在防抖定时器中使用最新的搜索参数和过滤条件

6. 最佳实践
• 只在确实需要读取非响应式值时使用
• 考虑逻辑是否应该放在 Effect 之外的普通事件处理器里
• 保持 Event 函数单一职责,写清使用原因以便维护
• 等待 stable 版本发布再用于生产环境

7. 迁移路径
• 对比使用 useCallback 并频繁更改依赖或通过 eslint-disable 抑制警告的情形,说明 useEffectEvent 可作为更清晰的替代方案
• 建议先重构组件逻辑,确认是否真的需要该 Hook


author Slicker
#优质博文 #前端 #html #javascript #css #tools #AI
Useful patterns for building HTML tools

AI 摘要:Simon Willison 在这篇文章中总结了构建 HTML 工具的核心模式:保持单文件、避免 React、使用 CDN 加载依赖、利用复制粘贴、调试工具、URL 与 localStorage 持久化、收集 CORS API、直接调用 LLM、文件操作、可下载文件、Pyodide 与 WebAssembly、复用已有工具以及记录开发过程。通过这些模式,作者在两年内用 LLM 生成了 150+ 个实用工具,并提供了大量示例与源码链接。
#优质博文 #CSS #前端 #新特性
草案
Fit width text in 1 line of CSS

AI 摘要:本文介绍了 CSS 实验性新属性 text-grow 和 text-shrink,它们旨在用一行代码解决文本与容器宽度匹配的经典布局问题。文章详细解释了其语法、可选值和工作原理,同时也指出了当前存在的开放性问题和可访问性考量,并鼓励开发者参与相关讨论。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 新属性介绍与语法
• 介绍了实验性 CSS 属性 text-grow 和 text-shrink,它们可以简洁地让文本宽度适配容器。
• 详细解析了语法结构:text-grow: <fit-target> <fit-method>? <length>?;,并解释了 <fit-target> (如 per-line, consistent)、 <fit-method> (如 scale, font-size) 和可选 <length> 参数的含义。

2. 开放问题与社区讨论
• 指出了该属性在可访问性(如用户放大字体时)和具体行为(如最后一行、行高、内联图片的处理)上仍存在待解决的问题。
• 汇总了社区(如 Una Kravets, Donnie D’Amato)对该技术适用场景(如更适合打印样式)的讨论和思考,并提供了参与 W3C GitHub 议题讨论的链接。

3. 发展脉络与展望
• 回顾了从过去依赖 FitText.js 等复杂方案到如今一行 CSS 可能解决问题的技术演进。
• 整体表达了对这一新属性简化前端开发工作流的期待,同时保持了对其成熟度审慎乐观的态度。


author Geoff Graham Fit width text in 1 line of CSS | CSS-Tricks
#优质博文 #CSS #前端 #新特性
酷!
CSS Wrapped 2025

AI 摘要:本文是 Chrome 团队对 2025 年即将到来或已部分实现的 CSS 新特性的全面总结。文章涵盖了从交互增强(如无 JavaScript 的对话框控制、兴趣触发器)、UI 组件现代化(如完全可自定义的 select 元素、原生 CSS 轮播)、布局与定位革新(如锚点容器查询、滚动状态查询),到 CSS 语言能力提升(如 if() 条件语句、自定义函数、增强的 attr() 函数)等多个方面。这些特性旨在让开发者能够用更声明式、更简洁且高性能的代码构建更丰富、更易访问的 Web 体验。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 交互与行为增强
• Invoker Commands**:通过 commandfor 和 command 属性,无需 JavaScript 即可声明式地控制 <dialog> 和 [popover] 元素的显示、隐藏等操作,并支持自定义命令。
Dialog Light Dismiss:为 <dialog> 元素新增 closedby 属性,实现类似 Popover 的“轻关闭”行为(点击外部或按 ESC 键关闭)。
Interest Invokers:通过 interestfor 属性,为按钮或链接提供声明式的悬停/聚焦触发 UI(如工具提示),并可设置 interest-delay 控制延迟。
ToggleEvent.source:在 ToggleEvent 中新增 source 属性,用于识别触发 popover/dialog/details 切换操作的具体元素。
DOM State-Preserving Move:新的 moveBefore() DOM API,在移动元素(如 iframe、视频)时能保持其内部状态(播放、焦点等),不会重新加载。

2. UI 组件与控件
Customizable select:通过 appearance: base-select 解锁对 <select> 元素的完全 CSS 定制,包括下拉列表、选项样式,并支持在 <option> 内使用 HTML 内容。
• ::scroll-marker/button()**:新增 CSS 伪元素,用于创建原生的、可访问的轮播导航按钮和标记点,无需 JavaScript。
scroll-target-group:将一组锚点链接转换为滚动标记组,结合 :target-current 伪类实现“滚动侦测”高亮效果。
text-box features:通过 text-box-trim 和 text-box-edge 属性,基于字体的视觉边界(如大写字母高度)精确控制文本垂直对齐,实现完美视觉居中。

3. 布局、定位与滚动
Anchored container queries:结合 CSS 锚点定位,使用 container-type: anchored 和 @container anchored(fallback: ...) 查询,让元素能根据其定位回退状态(如从底部翻转到顶部)自适应样式。
Scroll-state queries:通过 container-type: scroll-state,让子元素能查询父容器是否处于“可滚动”、“吸附”或“固定”状态,并据此应用样式。
scrollIntoView() container:scrollIntoView 方法新增 container: 'nearest' 选项,确保只滚动最近的祖先滚动容器,而非整个视口。
Stretch sizing keyword:新的 stretch 尺寸关键字,让元素在考虑外边距的情况下填满包含块,不同于 100%。
corner-shape:新的 corner-shape 属性,提供除圆角外的多种边角形状(如斜面、凹口、圆弧、方圆形),并支持 superellipse() 函数进行精细控制。

4. CSS 语言与表达能力
Tree counting functions:新增 sibling-index() 和 sibling-count() CSS 函数,用于获取元素在兄弟节点中的索引和总数,简化交错动画等效果。
Advanced attr() function:增强的 attr() 函数,现在可用于任何 CSS 属性,并能将属性值解析为颜色、长度、数字等特定类型。
if() statements:新的 CSS if() 函数,内联支持条件判断,可与 media()、supports()、style() 查询结合,简化动态样式逻辑。
Custom Functions:支持使用 @function 定义自定义 CSS 函数,提高样式代码的复用性和可读性。
Expanded range syntax:现在样式查询和 if() 语句中支持使用范围语法(如 >, <),允许对自定义属性值进行大小比较。
shape() function:新的 shape() CSS 函数,用于创建复杂、响应式的裁剪路径,比 clip-path: path() 更易于维护和动画。

5. 动画与过渡
Nested View Transition Groups:视图过渡 API 支持嵌套的 ::view-transition-group ,通过 view-transition-group: nearest 属性在过渡期间保留 3D 变换和裁剪效果。


author Una Kravets
#优质博文 #design #UX
The f*** off contact page - Nic Chan

AI 摘要:本文作者 Nic Chan 分享了一个早年客户案例,客户是一家服务型设计公司,却执意要模仿大型 SaaS 企业的“劝退式联系页面”(fuck off contact page)——一种通过隐藏真实支持渠道来减少咨询量的设计。作者分析了这种页面为何与客户(服务型公司)获取线索的根本目标相悖,并反思了项目中出现这一问题的根源:折扣报价导致客户不尊重专业意见、未能有效教育客户理解设计流程(如线框图)的价值,以及双方缺乏信任。文章最终倡导设计师应通过公开分享价值观来吸引理念一致的客户。


author Nic Chan
#优质博文 #前端 #CSS #Astro #ISR #性能优化
想起以前做的 ISR,心血来潮搜一下 Astro 里的 ISR 怎么做,做一下。
On-Demand ISR For Astro on Vercel

AI 摘要:本文详细介绍了如何在 Vercel 平台上为 Astro 静态网站配置按需增量静态再生成 (On-Demand ISR)。文章首先解释了 ISR 和按需 ISR 的概念及其适用场景,然后通过一步步的代码示例,指导读者如何初始化项目、添加 Vercel 适配器并配置 ISR 参数、创建动态页面,以及最关键的部分——如何通过一个受保护的 API 端点来手动触发缓存失效和页面重建,从而实现对静态内容更新时间的精细控制。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 概念解析
• 什么是 ISR:解释增量静态再生成 (ISR) 的概念,即无需重新构建或部署整个网站即可更新静态内容(如博客文章或 GET API 端点)。
• 什么是按需 ISR:对比传统基于 TTL(生存时间)的 ISR,说明按需 ISR 允许在 TTL 到期前手动使缓存失效并触发重建,从而更精确地控制内容的新鲜度。
• 适用场景:列举按需 ISR 的典型用例,如不常更新但更新后需立即生效的内容,或渲染成本高(计算、时间、外部 API 费用)的频繁访问内容。

2. 项目配置
• 初始化 Astro 项目:使用命令行工具创建一个包含 Tailwind CSS 和 React 的 Astro 项目,并初始化 Git。
• 添加 Vercel 适配器:通过 astro add vercel 命令添加适配器,并在 astro.config.mjs 文件中配置 ISR 参数,包括设置 bypassToken(用于授权缓存失效的密钥)和 exclude(排除 API 路由不被缓存)。

3. 实现与验证
• 创建动态页面:在首页添加一个显示服务器渲染时间戳的组件,用于验证缓存效果。部署后,刷新页面时间戳不变,且响应头 x-vercel-cache 显示 HIT,证实页面来自缓存。
• 实现按需失效端点:创建一个受保护的 API 端点 (/api/invalidate),该端点接收 POST 请求,内部向目标路由发送带有 x-prerender-revalidate 头(值为 bypassToken)的 HEAD 请求,以触发缓存失效和重建,并验证响应头确认操作成功。
• 测试:通过 curl 命令调用该 API 端点,成功使首页缓存失效,再次访问首页时看到新的时间戳,证明按需 ISR 生效。


author Shawn On-Demand ISR For Astro on Vercel | Shawn's Blog
#优质博文 #CSS #前端
The Hidden Selectors of The HTML Element

AI 摘要:本文来自 Temani Afif 的 CSS 小贴士系列,介绍了除 html {} 与 :root {} 外,还能选中 <html> 元素的几种“隐藏”选择器,如嵌套选择器 &、:scope、:has()、:not() 等,并通过组合操作符展示了多种有趣写法。虽然这些技巧在实际开发中不一定实用,但它们揭示了 CSS Selector 机制的底层逻辑与灵活性,是一次颇具趣味性的语法探索。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 根元素的经典选择方式
• 介绍了我们熟知的两种方式:html {} 与 :root {}
• 提出问题:是否存在其他隐藏选择器可用于选中 <html> 元素

2. 嵌套选择器(Nesting Selector &)
• 在非嵌套上下文中,& 等效于 :scope
• 可直接用作选择 <html> 元素

3. :scope 选择器
• 当没有定义作用域根节点时,:scope 默认代表整个文档根,即 <html>
• 示例代码展示了如何直接使用 :scope { ... } 来作用于全页面样式

4. :has() 选择器的新奇用法
• <html> 是唯一同时包含 head 与 body 的元素,可利用结构特征进行反向匹配
• 示例::has(head) 或 :has(body) 都能命中 <html>

5. :not() 与组合筛选
• <html> 是唯一没有父节点的元素,可利用 `:not(* *)`(排除有祖先的元素)进行匹配
• 加入子代组合符 > 可形成如 :not(* > *) 的结构,用“CSS 符号表情”形式趣味收尾

6. 组合选择器的实验与调侃
• 展示 :is() 、:where() 与多重 & 的奇怪组合写法(如 &&&&)
• 指出这些写法在逻辑上可行但缺乏实际用途,更多是对 CSS Selector 灵活性的探索

7. 结语与扩展阅读
• 作者认为这些“隐藏选择器”是有趣但不实用的实验
• 附带更多 CSS Tips,如 Direction-Aware CSS ShapesDirection-Aware Arrow Shape using corner-shape,扩展了方向感知样式的应用视角


author Temani Afif The Hidden Selectors of The HTML Element
#优质博文 #React #SSR #ISR #前端 #工程化 #构建系统
Build your own web framework - Vercel

AI 摘要:本文由 Vercel 的 Lydia Hallie 撰写,介绍如何利用 Vercel 的 Build Output API 构建一个基于 React 的简易 Web 框架,支持静态渲染(Static Rendering)、增量静态再生(Incremental Static Regeneration, ISR)、服务端渲染(Server-Side Rendering, SSR)、边缘函数(Edge Functions)和自动图片优化等功能。文章不仅讲解框架涉及的文件结构和构建流程,还展示如何将每种渲染模式映射为 Vercel 可识别的输出,从而部署到无服务器(Serverless)和 Edge 环境。虽然该示例为教学版,但完整演示了现代框架实现高性能与可扩展架构的关键思路。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 框架目标与核心组件
• 通过 Vercel Build Output API 构建自定义 Web 框架
• 实现静态页面、增量渲染、服务端渲染、边缘渲染和图片优化等现代框架功能
• 所有页面位于 pages/ 目录,并根据配置选择不同渲染策略(static、ssr、prerender 或 edge)

2. 页面设计与优化策略
Landing Page:通过图片优化与 Edge 缓存提升首页首字节时间(TTFB)
Products Page:结合静态与动态渲染,利用 ISR 实现自动再生更新
Popular Page:借助 Edge Functions 根据用户地理位置实现个性化推荐

3. 框架实现细节
Static Rendering
• 使用 ReactDOMServer.renderToString 将组件预渲染为 HTML
• 输出文件结构至 .vercel/output/static,生成可 Hydrate 的 JS 包
Incremental Static Regeneration (ISR)
• 创建 .func 文件夹与 prerender-config.json 配置缓存过期与再生逻辑
• 增设 fallback HTML 提供渐进体验
Serverless Functions
• 每个动态页生成一个 Lambda(serverless)函数,用于按需(re)生成页面
• 利用 .vc-config.json 定义运行时、入口点与上下文
Edge Server Rendering
• 在 Edge Runtime 中使用 React 进行服务端渲染
• 动态注入 req 对象以生成个性化内容

4. 自动图片优化(Automatic Image Optimization)
• 自定义 Image 组件,将图片请求代理至 /_vercel/image
• 基于 vercel.config.js 生成 .vercel/output/config.json,统一图片格式(webp/avif)、域名和缓存策略

5. 构建与输出过程(Build Output)
• 遍历所有页面并执行对应的渲染方法
• 拷贝静态资源至 .vercel/output/static
• 自动创建 .vercel/output/config.json 配置文件
• 构建完成后可直接通过 Vercel 部署,享受边缘分发与函数服务

6. 结论
• 框架可作为理解现代渲染机制与 Vercel 部署架构的参考
• 虽非生产版本,但展示了现代框架(如 Next.js)背后的核心逻辑
• 适合框架作者或独立开发者应用 Vercel 的核心特性进行自研集成


author Lydia Hallie
via @hyoban 投稿 Build your own web framework - Vercel
#优质博文 #前端 #CSS #3D
The Deep Card Conundrum
我喜欢这个解决方案,不仅因为它有效(而且效果非常好),还因为它教会了我一个谦卑的教训。

我曾一度认为 perspective-origin 是个“坏”属性。我对它抱有抵触情绪,因为我只把它看作是造成图像失真的根源。我一心只想找到制作 3D 的“正确”方法,却忽略了真正能解决问题的工具。

Cubiq 并没有这种偏见。他看到的是一个数学问题:“我需要当旋转方向为 Y 时,投影看起来要像 X。”然后他找到了控制投影的属性。

有点感慨

AI 摘要:本文由 Amit Sheen 撰写,讲述他如何在纯 CSS 的限制下实现具有真实 3D 深度和裁剪效果的“Deep Card”。传统做法会因 overflow: clip 扁平化 3D 空间而失败。作者在尝试数年未果后,受到 Cubiq 的启发,用 perspective-origin 动态校正视角,实现了既可保持 3D 空间又可裁剪内容的完美效果。这一方案不仅重燃了纯 CSS 的创造力,也提醒开发者,不要过早排斥某些特性,真正的创新往往在规则之外。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 卡片与“深度卡片”的概念
• 普通卡片是二维的,最多用阴影暗示层次;“Deep Card”试图在卡片内构建真实的体积。
• 技术目标:让元素在旋转时表现出真实景深与透视变化。

2. CSS 陷阱与规范限制
• 核心难题是 overflow: clip 与 transform-style: preserve-3d 无法共存。
• 依据 CSS Transforms Module Level 2 规范:含有分组属性的元素(如 overflow、opacity、filter)会被“扁平化”,导致 3D 效果丢失。

3. 伪 3D 的尝试(Faking It)
• 通过 scale() 与 translate() 等方式模拟透视变化。
• 优点:高性能、跨浏览器兼容;缺点:角度一大透视破碎,难以保持自然立体感。

4. 数学解法的探索之路
• 尝试为每层使用 clip-path 来动态裁剪,但计算复杂度极高,需要实时三角与投影运算。
• 作者几乎放弃时,收到开发者 Cubiq 的信息,成为突破契机。

5. 关键突破:perspective-origin 的反向运用
• 以往被认为“畸变丑陋”的属性被重新发掘。
• Cubiq 的公式通过基于旋转角度动态计算 perspective 与 perspective-origin,实现投影映射式的深度对齐。
• 结果:在被扁平化的上下文中实现了视觉上的真实 3D 效果。

6. 实现细节与代码结构
• HTML 结构:.card-container > .card > .card-content + .card-back。
• JS 监听鼠标位置,计算 --mouse-x、--mouse-y。
• CSS 关键:
• 外层提供全局 perspective。
• 内层通过 calc(cos/sin) 动态校正视角。
• overflow: clip 限定边界,translateZ() 生成深度分层。
• 注意 .card-layers 容器避免直接扁平化问题。

7. 深化与扩展效果
• 利用亮度变化、半透明叠加强化视觉深度。
• 控制 z-index 实现不同的层次呈现。
• 可添加交互,如点击翻转 180°(前后双面内容)。
• 内层动画(如视差滚动与文字 3D 动效)进一步扩展场景。

8. 启示与总结
• 结论:纯 CSS 也能实现真实的 3D 深度与裁剪效果。
• 哲思:别轻易排除技术手段,创新常源自对“禁区”的重新理解。
• 鼓励读者“go build something deep”——继续挑战 CSS 的极限。


author Amit Sheen The Deep Card Conundrum
#优质博文 #CSS #前端 #布局
The Downsides of scrollbar-gutter: stable; (and one weird trick)

AI 摘要:本文阐述了 scrollbar-gutter: stable; 在解决页面布局因滚动条出现与否而引起的内容跳动(layout shift)问题上的便利,同时指出它在某些场景下(如 iframe 环境或元素居中对齐)会导致“空白滚动条占位”以及视觉不居中的副作用。作者进一步提出一种利用 CSS Scroll State 查询的替代方案,通过检测页面是否可滚动来动态调整内边距,为未来更灵活的滚动状态响应式设计提供了思路。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 引入与背景
• 提到 Zach 建议在样式表中默认使用 scrollbar-gutter: stable;。
• 该属性能为滚动条预留空间,避免内容在滚动条出现或消失时的跳动。
• 应用场景:在系统设置为“始终显示滚动条”时尤为明显。

2. scrollbar-gutter: stable; 的优点与原理
• 通过为滚动条占位,页面在加载更多内容时不会发生横向位移。
• 浏览器支持广泛,适合用于布局稳定性的优化。
• 视觉表现:用白色或暗色条带代替滚动条区域,从而避免内容的移动。

3. 使用中的缺陷与视觉问题
• 在 CodePen 等 iframe 环境中,会出现“纯白空隙”(白条)的问题。
• 在非 iframe 环境下虽无白条,但元素居中计算仍未考虑滚动条占位。
• 导致视觉上轻微偏移,尤其在内容需要精确居中时效果不佳。

4. 替代方案:基于 Scroll State 的新思路
• 介绍 CSS scroll-state 容器查询用法,通过判断页面是否可滚动来实现自定义布局调整。
• 示例代码展示了如何利用自定义 CSS 变量和 vendor prefix 控制滚动条宽度。
• 该方法灵活但依赖较新的浏览器支持,尚属实验性方案。
• 作者希望未来能有系统级变量(如 env())能动态获取滚动条宽度,提升可用性。

5. 总结与展望
• scrollbar-gutter: stable; 简单易用,但小缺陷让人犹豫是否应作为默认。
• CSS Scroll State 提供潜在方向,让开发者更精确地应对滚动相关的布局变化。
• 未来网页布局中可能会实现更智能的滚动状态适配机制。


author Chris Coyier The Downsides of scrollbar-gutter: stable; (and one weird trick)
#优质博文 #前端 #CSS #排版 #设计 #layout #容器查询
Getting Creative With “The Measure”

AI 摘要:本文从传统排版学出发,探讨了 “measure(行长)” 概念如何指导现代网页设计。作者建议以内容可读性为核心,用自定义 CSS 属性结合 ch 单位控制文本宽度,将 measure 延伸到多栏布局、网格系统 (Grid)、以及容器查询 (Container Query) 的设计逻辑中。通过以内容为依据而非设备尺寸来设定断点,设计者可以创造出更自然、更连贯、更具可读性的排版系统。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 传统排版中的 measure 概念
• “Measure” 起源于金属活字时代,指每行文本能容纳的宽度,是版面设计的核心要素。
• 好的 measure 提高阅读舒适度,差的 measure 会让读者疲劳。
• 从排版角度来看,measure 应成为布局决策的依据,而非被动的结果。

2. 使用 CSS 自定义属性定义 measure
• 使用 --measure 自定义属性并以 ch 单位(字符宽度)定义行长。
• 推荐 60–70 字符每行为理想可读长度。
• 不同字体的 x-height 与字宽会影响实际视觉行长,需通过视觉调整。

3. 保持文字可读性
• 通过 max-inline-size: var(--measure) 控制正文宽度取代 max-width。
• 运用 CSS 逻辑属性 (Logical Properties) 进行方向无关的布局。
• 有效防止“大屏长行综合症”,保持阅读舒适。

4. 设计多栏文本 (Multi-column Layout)
• 使用 column-width: var(--measure) 让浏览器自动计算可读列数。
• 单栏与多栏布局可自适应,不需媒体查询。
• measure 让版面转换更加平滑自然。

5. 用 measure 引导网格布局 (Grid System)
• 在网格定义中,将主文本区的列锁定在 measure 宽度,如 grid-template-columns: minmax(0, var(--measure)) 1fr;。
• 第一列保持理想阅读宽度,第二列灵活适配剩余空间。
• 强化内容与版面之间的连结感。

6. 以 measure 为条件的容器查询 (Container Queries)
• 打破以设备宽度设断点的思维,用内容本身触发布局变化。
• 当容器宽度小于 measure 时,布局可自动折叠至单栏。
• 创建 “内容驱动 (Content-driven)” 的响应设计,而非 “设备驱动 (Device-driven)” 布局。

7. 构建 measure 系统
• 定义多个 measure 变量(如 --measure-s, --measure-l)应对不同文本类型。
• 小 measure 用于说明文字,标准 measure 用于正文,大 measure 用于标题与引导。
• 统一的行长节奏让页面更具整体性与阅读流畅感。

8. 从 measure 出发重新理解设计
• 以 measure 为核心的设计能让排版从“试错”转变为“对话”。
• 内容与布局相互协调,带来更有意识和一致性的视觉节奏。


author Andy Clarke Getting Creative With “The Measure” | CSS-Tricks
cosine - 前端人の日常频道
#优质博文 #React #安全 #RSC #前端 这就是 R!S!C!(逃 叠甲:任何东西都会有漏洞的啦只是想吐槽一下再说我们也没用 RSC 连服务器组件都没用没影响的没影响的。 Critical Security Vulnerability in React Server Components – React AI 摘要:React 官方披露了一个在 React Server Components (RSC) 中的严重远程代码执行漏洞(CVE-2025-55182),影响多个版本的 react-server…
#优质博文 #前端 #React #安全 #RCE #POC
CVE-2025-55182 React Server Components RCE POC

AI 摘要:作者展示了 CVE-2025-55182 漏洞的具体利用方式,说明该漏洞出现在 React Server Components 的反序列化机制中。通过伪造 Chunk 对象以及操控 then 方法触发链式调用,攻击者可以利用 Next.js 的服务端组件解析逻辑实现远程代码执行 (RCE)。文章详细讲述了漏洞的产生原理、攻击向量和具体请求示例,说明此问题的严重性与利用条件。

[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 漏洞背景与影响范围
• 漏洞编号为 CVE-2025-55182,影响 React Server Components 的反序列化过程
• 可在 Next.js 16.0.6 环境下触发
• 利用对象结构中的 $@ 标记机制篡改 Chunk 引用并控制反序列化流程

2. 核心利用思路 (Exploit 原理)
• 使用 $@ 引用构造伪造的 Chunk 实例
• 将 Chunk.prototype.then 作为根对象的 then 属性,使得在 Promise 处理时自动触发攻击逻辑
• 通过修改 status 为 RESOLVED_MODEL 调用 initializeModelChunk 以执行受控对象的代码路径

3. 攻击链实现与触发机制
• 攻击目标是触发 Blob 反序列化流程
• response._formData.get 被重写为 JavaScript Function 构造器,实现任意代码执行
• 构造的 multipart/form-data 请求载荷通过控制 _prefix 字段注入任意命令(例如 child_process.execSync('xcalc'))

4. 安全意义与防护思考
• 漏洞本质源于反序列化信任边界不明与模型解析机制的未过滤输入
• 需加强 React Server Components 的反序列化安全校验
• 建议暂时限制相关功能或升级框架版本


Source CVE-2025-55182 React Server Components RCE POC
#优质博文 #React #安全 #RSC #前端
这就是 R!S!C!(逃
叠甲:任何东西都会有漏洞的啦只是想吐槽一下再说我们也没用 RSC 连服务器组件都没用没影响的没影响的。
Critical Security Vulnerability in React Server Components – React

AI 摘要:React 官方披露了一个在 React Server Components (RSC) 中的严重远程代码执行漏洞(CVE-2025-55182),影响多个版本的 react-server-dom 系列包。问题出在 RSC 的负载反序列化逻辑中,攻击者可通过构造恶意 HTTP 请求在服务器上执行任意代码。相关漏洞获评 CVSS 10.0(最高等级),已在 19.0.1、19.1.2、19.2.1 等版本修复。React 团队建议开发者立即升级,并说明了受影响的框架包括 Next.js、React Router、Waku 等。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 漏洞概述与影响范围
• 披露的漏洞是针对 React Server Components 的未授权远程代码执行 (Remote Code Execution, RCE) 问题。
• 漏洞编号为 CVE-2025-55182,CVSS 评分为 10.0(极高严重度)。
• 所有使用 RSC 的 React 应用,即使没有定义特定 Server Function 接口,也可能受影响。

2. 受影响版本与安全修复
• 受影响版本:19.0、19.1.0、19.1.1、19.2.0。
• 修复版本:19.0.1、19.1.2、19.2.1。
• 修复建议:立即升级至修复版本的 react-server-dom-webpack、react-server-dom-parcel、react-server-dom-turbopack。

3. 受影响的框架与构建工具
• 部分框架与构建工具依赖或内置受影响包,包含 Next.js、React Router、Waku、@parcel/rsc、@vitejs/plugin-rsc、rwsdk。
• React 团队后续将更新具体升级指令。

4. 技术细节与漏洞原理
• RSC 机制允许客户端通过 HTTP 请求触发服务器端函数。
• 漏洞源于 React 在反序列化客户端请求载荷 (payload) 时的处理缺陷,导致攻击者可执行任意代码。
• 目前细节暂未完全公开,以防在修复完成前遭滥用。

5. 漏洞披露时间线
• 11 月 29 日:由安全研究员 Lachlan Davidson 通过 Meta Bug Bounty 计划报告漏洞。
• 11 月 30 日:Meta 安全部门确认漏洞并与 React 团队协作修复。
• 12 月 1 日:完成修复并与受影响项目共同测试与部署缓解措施。
• 12 月 3 日:在 npm 发布修复版本并正式公开 CVE。

6. 致谢与归属
• 感谢安全研究员 Lachlan Davidson 的发现、报告及协助修复贡献。


author The React Team Critical Security Vulnerability in React Server Components – React
#优质博文 #前端 #CSS #浏览器 #新动态
New in Chrome 143

AI 摘要:Chrome 143 正式发布,本次更新带来了对锚点定位元素(anchor positioned elements)的新式容器查询(anchored fallback container queries),改进了背景图像定位语法(side-relative background-position),并新增对 font-language-override 的支持,使开发者可精确控制字体替代语言标签。在提高 CSS 表现力的同时,也强化了排版的一致性与多语言支持。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. CSS 新特性
Anchored fallback container queries:新增 @container anchored(fallback),可基于元素定位的备用状态(position-try-fallbacks)设置不同样式,用于调整锚点元素的连线或动画表现。
Side-relative background positioning:现在可在 background-position-x/y 长属性中直接使用相对边位置语法(如 left 30px、bottom 20px),提高图像定位灵活性,该特性现已进入 Baseline 新可用级别。
Font language override:新增 font-language-override 属性,允许为 OpenType 字形替换指定自定义四字语言代码,从而覆盖系统语言设置,便于实现多语言、特殊字体排版控制。

2. 版本信息与资源链接
• 详细更新内容见 Chrome 143 release notes
• 开发者工具更新详情:What's new in Chrome DevTools (143)
• 功能状态更新在 ChromeStatus.com
Chrome release calendar 提供未来版本发布时间表。

3. 社区与后续更新
• 推荐订阅 Chrome Developers YouTube channel 获取最新视频提示。
• 关注 Chrome 团队在 X 或 LinkedIn 的最新发布。
• 官方将于 Chrome 144 发布时继续更新新功能说明。


author Rachel Andrew New in Chrome 143  |  Blog  |  Chrome for Developers
#优质博文 #CSS #前端 #新特性
Gallery of Skewed Images with Hover Effect

AI 摘要:本文展示了如何利用现代 CSS 的新特性 corner-shape 创建一个具备悬停 (hover) 交互的倾斜图片库。通过使用逻辑属性和自定义变量,只需少量代码即可实现具有方向感知 (direction-aware) 的图像倾斜效果。当用户悬停图片时,相邻形态会流畅过渡,视觉上极具动感。文末还比较了使用 clip-path 的替代实现,强调虽然兼容性更好,但缺乏方向感知的智能特性。

[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 组件与功能简介
• 主题为一个倾斜 (skewed) 图片库,展示如何简单实现经典布局。
• 利用现代 CSS 新属性 corner-shape 让图片边角自动响应文字方向。
• 通过 flex 布局与 transition 结合,实现平滑扩展的悬停动画。

2. 核心实现原理
• 定义变量 --s 控制倾斜程度和形状曲率。
• 使用逻辑属性如 border-start-start-radius、border-end-end-radius 确保布局在不同书写方向中正常表现。
• 通过伪类 :hover、:has() 与相邻选择器的配合,让图片在交互时动态调整边形与间距。

3. 替代方案与兼容性
• 提供使用 clip-path 的另一种实现方法。
• 虽然 clip-path 方式浏览器支持度较高,但不具备方向感知能力。
• 建议根据实际兼容需求在项目中选择适合的实现。

4. 延伸与参考
• 推荐阅读作者的其他作品:Direction-Aware Arrow Shape using corner-shapeDynamic Tooltip Position with Anchor Positioning IV
• 这些示例共同展示了现代 CSS 如何简化复杂动效组件的实现。


author Temani Afif Gallery of Skewed Images with Hover Effect
#优质博文 #数据库工具 #Electron #全栈 #tools #开源
data-peek

一个为开发者设计的轻量级桌面数据库客户端应用,支持 PostgreSQL、MySQL 与 Microsoft SQL Server。功能包括 SQL 查询编辑、多标签页、行内编辑、ERD 关系图可视化、查询计划分析、快捷键等。
采用 Electron + React + TypeScript 技术栈构建,UI 使用 shadcn/ui 与 Tailwind CSS。
项目开源(MIT License),鼓励社区贡献并提供商业使用许可。

author Rohithgilla12
Source GitHub - Rohithgilla12/data-peek: A minimal, fast, database client desktop application. Built for developers who want to quickly…
 
 
Back to Top