呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
#优质博文 #React #前端 #工程化 #SSR #组件设计 #course
Building Bulletproof React Components:一位 Vercel 资深工程师分享如何构建能应对真实复杂场景的健壮 React 组件。
[以下是方便搜索索引的大纲(AI 生成),请读原文
author Shu Ding
Building Bulletproof React Components:一位 Vercel 资深工程师分享如何构建能应对真实复杂场景的健壮 React 组件。
AI 摘要:本文系统性地提出了构建 React 组件的十大原则,涵盖服务端渲染(Server Rendering)、水合(Hydration)、多实例、并发渲染(Concurrent Rendering)、组合(Composition)、Portal、View Transition、Activity、数据泄露防护及未来兼容性等现代 React 应用中的关键挑战。作者通过具体代码示例,展示了常见陷阱及其解决方案,强调组件应具备在不可预测环境中稳定运行的能力,而非仅满足“理想路径”下的功能实现。
[以下是方便搜索索引的大纲(AI 生成),请读原文
1. 服务端与水合兼容性
• Server-Proof:避免在组件顶层直接调用浏览器专属 API(如 localStorage),应将相关逻辑移至 useEffect 中,确保服务端渲染(SSR)不崩溃。
• Hydration-Proof:防止水合过程中的视觉闪烁(FOUC),可通过内联 <script> 在 React 水合前同步设置 DOM 状态,确保服务端与客户端初始渲染一致。
2. 多实例与上下文隔离
• Instance-Proof:使用 React 的 useId Hook 为每个组件实例生成唯一 ID,避免多个同类型组件因共享硬编码 ID 而相互干扰。
• Portal-Proof:监听事件时应基于组件所在 DOM 的 ownerDocument.defaultView 获取正确 window 对象,确保在 iframe、弹窗或 createPortal 场景下仍能正常工作。
3. 并发与异步渲染适配
• Concurrent-Proof:在 Server Component 中使用 React.cache 包装数据获取逻辑,避免同一请求内多次重复调用相同异步操作。
• Transition-Proof:配合 React 19 的 <ViewTransition> 实现平滑 UI 切换时,状态更新需通过 startTransition 触发,以启用过渡动画。
4. 组合性与副作用管理
• Composition-Proof:优先使用 Context 而非 React.cloneElement 向子组件传递数据,以兼容 Server Component、lazy 加载和异步 children 等现代 React 特性。
• Activity-Proof:对于通过 <style> 注入全局 CSS 变量的组件,在被 <Activity> 隐藏时应通过 useLayoutEffect 动态设置 media="not all" 来禁用样式,防止副作用残留。
5. 安全与未来兼容性
• Leak-Proof:利用 experimental_taintUniqueValue 或 experimental_taintObjectReference 标记敏感数据(如 token),防止其意外序列化并泄露至客户端。
• Future-Proof:当组件行为依赖值的持久性时(如随机色生成),应使用 useState 而非 useMemo,因为后者仅为性能提示,React 可能在 HMR 或未来优化中丢弃缓存。
author Shu Ding
#优质博文 #前端 #CSS #可视化 #WCAG
Trying to Make the Perfect Pie Chart in CSS 这是真 CSS 魔法师(探索如何仅用 CSS(辅以极少量 JavaScript)构建语义化、可定制且无障碍的饼图。
author Juan Diego Rodríguez
Trying to Make the Perfect Pie Chart in CSS 这是真 CSS 魔法师(探索如何仅用 CSS(辅以极少量 JavaScript)构建语义化、可定制且无障碍的饼图。
AI 摘要:本文作者 Juan Diego Rodríguez 试图在尽量不依赖 JavaScript 的前提下,用纯 CSS 构建一个“完美”的饼图,需满足三大目标:语义化(屏幕阅读器可读)、HTML 可定制(仅改 HTML 即可更新图表)、JavaScript 最小化。文章首先指出 conic-gradient() 虽能快速绘制饼图,但缺乏语义且难以动态定制;随后提出基于 <figure> + <ul> 的语义化结构,利用 data-percentage 和 data-color 属性驱动样式,并通过 CSS 自定义属性(--radius、--percentage、--bg-color 等)结合 attr() 函数提取数据。由于 CSS 无法在兄弟元素间累积状态,作者借助极简 JavaScript 计算每个扇形的起始角度(--accum),再通过 conic-gradient(from var(--offset)) 实现正确旋转。最后,利用 CSS Grid 叠放扇形,并借助 cos() 与 sin() 函数将标签沿圆周精准定位。最终成果兼具视觉美观与无障碍支持,但仍留有改进空间,如自动计算百分比、自动生成配色等。
author Juan Diego Rodríguez
#优质博文 #CSS #性能优化 #Safari #前端 #AI #调试
A Broken Heart 太有乐子了,一个表情符号导致页面加载速度变慢 100 倍的调试故事,Safari 又是 Safari(
[以下是方便搜索索引的大纲(AI 生成),请读原文]
author Allen Pike
A Broken Heart 太有乐子了,一个表情符号导致页面加载速度变慢 100 倍的调试故事,Safari 又是 Safari(
AI 摘要:作者讲述了一次离奇的前端性能调试经历,网页仪表板在 Safari 下的加载时间从 1 秒激增至 10 秒。通过性能分析和 AI 辅助的二分查找法,最终定位问题根源为一个使用了 Noto Color Emoji 字体的心形表情符号(❤️)。该字体在 Safari 上的特定渲染路径导致了极高的布局耗时,文章对此进行了技术复盘并给出了临时解决方案。
[以下是方便搜索索引的大纲(AI 生成),请读原文]
1. 问题发现与初步排查
• 作者发现网页仪表板加载时间异常增加,初步怀疑是 React 框架的性能问题。
• 使用 Safari 性能分析器排查后,发现 CPU 时间主要消耗在 Layout 阶段,而非 JavaScript 执行或网络请求。
• 排除了服务器延迟、第三方脚本等因素,确认问题具有浏览器特异性。
2. 定位核心故障点
• 利用 Claude(AI 编程助手)进行代码二分查找,迅速隔离出导致性能下降的代码段。
• 发现“发送反馈”按钮中新增的一个 ❤️ 表情符号是罪魁祸首。
• 测试显示,移除该表情后布局仅需 2ms,保留则需 1600ms,性能差距达百倍。
3. 技术深度解析
• 问题源于项目引入了 Google 的 Noto Color Emoji 字体,旨在解决 Linux 环境下的表情渲染一致性。
• 该字体依赖 COLRv1 标准,在 Safari 中回退到 SVG 渲染时触发了 CoreSVG 层面的性能 Bug。
• 创建最小复现案例证实:仅引入该字体并渲染单个字符即可导致 Safari 26.2 出现严重卡顿。
4. 解决方案与反思
• 临时解决方案:在 CSS 中将 Apple Color Emoji 优先级置于 Noto Color Emoji 之前,避免在苹果平台触发该 Bug。
• 对 AI 编程工具的辩证思考:AI 虽然极大加速了 Bug 定位和复现过程,但其建议引入的字体库也是导致该问题的根源,体现了 AI 工具的高效与风险并存。
author Allen Pike
#优质博文 #前端 #React #tools
TanStack 团队发布新库 TanStack Hotkeys,解决键盘快捷键开发中常见的跨平台、作用域冲突、输入框聚焦忽略等“小坑”,提供类型安全(Type-safety)、快捷键序列识别、状态追踪及 React 等框架适配器,并集成 Devtools 插件提升开发体验。
author TANSTACK(Twitter@tan_stack)
TanStack 团队发布新库 TanStack Hotkeys,解决键盘快捷键开发中常见的跨平台、作用域冲突、输入框聚焦忽略等“小坑”,提供类型安全(Type-safety)、快捷键序列识别、状态追踪及 React 等框架适配器,并集成 Devtools 插件提升开发体验。
AI 摘要:TanStack 团队发布新库 TanStack Hotkeys,致力于简化 Web 应用中键盘快捷键的实现。该库解决了开发者常遇到的跨平台修饰键差异、event.key 与 event.code 的选择、快捷键冲突与作用域管理、在文本输入框聚焦时自动忽略快捷键、以及注册与清理逻辑等复杂问题。它提供类型安全的模板字符串 API、支持快捷键序列检测与按键状态追踪,并为 React 等主流框架提供适配器。此外,官方还推出配套的 TanStack Devtools 插件,可实时查看已按下的按键、注册的快捷键及其作用域和配置,显著提升调试效率。
author TANSTACK(Twitter@tan_stack)
Sanity 团队开发了 React 组件
<LogoSoup /> 解决网页中多品牌 Logo 排列时因尺寸、比例与视觉重量不一致导致的“Logo Soup”混乱问题。The logo soup problem (and how to solve it
AI 摘要:文章深入剖析了在网页或应用中展示多个合作方 Logo 时常见的“Logo 汤”问题——即不同 Logo 因原始尺寸、宽高比(aspect ratio)、视觉密度(visual weight)和内边距(padding)差异,导致排版混乱、视觉失衡。作者指出,手动调整既耗时又不可持续,提出通过数学公式(Proportional Image Normalization Formula)结合图像分析技术,实现 Logo 的自动视觉比例归一化。为此,Sanity 团队开发了 React 组件 <LogoSoup />,能自动处理 Logo 的尺寸缩放、内容裁剪、密度补偿与光学对齐(optical alignment),并支持与 CMS(如 Sanity)集成,使非技术人员也能轻松维护 Logo 列表。
author Rostislav Melkumyan
#优质博文 #前端 #HTML #WCAG
You might not need role="presentation"
author Steve Frenzel
You might not need role="presentation"
AI 摘要:本文通过规范解读与真实代码案例,指出开发者常误将 role="presentation" 当作 aria-hidden="true" 使用,从而错误地移除语义却保留内容,导致可访问性问题。作者强调该属性仅在极少数场景(如布局表格、标签页组件、菜单模式)中合理,并建议优先使用语义化 HTML 或 aria-hidden 替代。多数误用可通过删除该属性并优化结构解决。
author Steve Frenzel
#优质博文 #JavaScript #新特性 #前端
It’s about to get a lot easier for your JavaScript to clean up after itself
author Mat Marquis
It’s about to get a lot easier for your JavaScript to clean up after itself
AI 摘要:本文介绍了 JavaScript 的“显式资源管理”(Explicit Resource Management)提案,该提案旨在标准化资源清理流程。作者 Mat Marquis 以幽默风格阐述了当前资源释放方式的混乱现状,并指出新特性 [Symbol.dispose] 和 using 关键字如何提供统一、可预测的清理机制。前者为对象定义标准清理方法,后者在变量作用域结束时自动调用该方法,从而避免资源泄漏。该提案已进入 TC39 Stage 3,在除 Safari 外的主流浏览器中已可试用。
author Mat Marquis
#优质博文 #前端 #移动端 #性能优化
Mobile performance: How to make your website mobile friendly:本文探讨了网站在移动端性能低下的深层原因,并提供了针对图片、JavaScript、CSS 及第三方脚本的实战优化方案。
author Jakub Andrzejewski
Mobile performance: How to make your website mobile friendly:本文探讨了网站在移动端性能低下的深层原因,并提供了针对图片、JavaScript、CSS 及第三方脚本的实战优化方案。
AI 摘要:文章指出移动设备由于硬件性能(Processing Power)、内存限制及不稳定的网络环境,面临比桌面端严峻得多的性能挑战。即使通过了桌面端的性能审计,移动端仍可能因为 JavaScript 阻塞、大型图片资源及布局偏移等问题导致用户流失。作者建议通过实验室数据(Lab Data)与现场数据(Field Data)结合的方式进行监控,并详细介绍了使用响应式图片(Responsive Images)、延迟 JavaScript 执行、提取关键 CSS(Critical CSS)以及对第三方脚本进行节流(Throttling)等具体优化手段,以提升用户的感知速度(Perceived Speed)。
author Jakub Andrzejewski
#优质博文 #前端 #JavaScript #国际化
A Percise Parser:本文介绍了一个因硬编码地区数值格式(Locale Formatting)并使用拙劣的字符串操作,导致国际化失效的 JavaScript 解析器(Parser)案例。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
author Remy Porter
A Percise Parser:本文介绍了一个因硬编码地区数值格式(Locale Formatting)并使用拙劣的字符串操作,导致国际化失效的 JavaScript 解析器(Parser)案例。
AI 摘要:文章讲述了一家德国公司在国际化扩张过程中遭遇的技术故障,其根源是一个名为 handleInput 的 JavaScript 数值解析函数。该函数不仅硬编码了德国本地的数字格式(如用点号作为千分位、逗号作为小数点),还通过一系列极其混乱的字符串分割(Split)、拼接和隐式类型转换来处理精度。这种缺乏通用性且逻辑脆弱的代码最终被具有区域感知(Locale-aware)的标准解析器所取代。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 背景与问题发现
• 一家德国公司在业务向国际市场扩张时,系统在其他地区(Locale)频繁崩溃。
• 工程师 Thomas 追踪到问题核心是一个处理数值输入的“精确”解析器。
2. 拙劣的代码逻辑分析
• 格式清理:函数首先手动剥离正号(+),并将点号(.)作为千分位符直接删除,这在非德语区会导致错误。
• 混乱的精度处理:代码通过 indexOf(',') 寻找小数点,然后进行复杂的字符串分割与整数解析(parseInt)。
• 隐式类型转换陷阱:利用 JavaScript 的特性,将字符串类型的整数与数值类型的整数相加,导致了非预期的字符串拼接(Concatenation),最后再除以 100 来恢复数值。
• 输出不一致:根据输入条件的不同,函数有时返回数值类型,有时却保留为字符串,缺乏一致性。
3. 解决方案与反思
• 修复工作本身并不复杂:Thomas 删除了冗余逻辑,改用支持区域感知的标准数值解析器。
• 真正的挑战在于理解原始开发者编写这段奇葩代码的初衷和逻辑。
author Remy Porter
#优质博文 #前端 #Vite #Rolldown #工程化 #新动态
What’s New in ViteLand: January 2026 Recap
VoidZero 2026 年 1 月回顾
What’s New in ViteLand: January 2026 Recap
VoidZero 2026 年 1 月回顾
1. 品牌与设计统一(Unified Design)
• 实现了 VoidZero 旗下所有项目(Vite, Vitest, Rolldown, Oxc)的视觉身份统一,发布了全新的官网和 Logo。
• 更新了 Vite 的启动模板(Starter Templates),将新品牌标识内置其中。
• 强调了工具链的深度集成:Vite 8 在底层直接使用 Rolldown 和 Oxc,实现了一致的开发者体验。
2. 核心项目进展(Project Updates)
• Vite:自 2020 年发布以来,累计下载量超过 30 亿次;React 服务端组件(React Server Components, RSC)插件进行了优化,以支持 TanStack Start 等框架。
• Vitest:启动 4.1 测试版(Beta),引入测试标签(Test Tags)功能,并支持通过禁用 viteModuleRunner 选项在脱离 Vite 的情况下运行。
• Rolldown:正式达成候选发布版(Release Candidate, RC)里程碑,API 进入稳定阶段;推出“Lazy Barrel Optimization”,在 AntDesign 等场景下可减少 92% 的模块编译,提速 2 倍。
• Oxc:Oxlint 支持 oxlint.config.ts 动态配置;Oxfmt 实现了与 Prettier 100% 的一致性(Conformance),并新增了 Tailwind CSS 类名排序功能。
3. 社区动态与生态(Community & Events)
• 榜单表现:在 2025 JavaScript Rising Stars 榜单中,Vite、Oxc、Rolldown 和 tsdown 均名列前茅。
• 生态迁移:Hugging Face、Turborepo 和 Lichess 等知名项目宣布从 ESLint/Prettier 迁移至 Oxlint/Oxfmt。
• 周边工具:社区推出了基于 Oxc 的代码体积优化工具 jsshaker 以及 Oxlint 的终端用户界面工具 oxlint-tui。
重なるレイヤーに色が溶け出すようなエフェクトを組み合わせた Matthew Pothier さんのポートフォリオサイト:介绍了一位电影摄影师极简且具有独特 WebGL 色彩流动效果的个人作品集网站。
站点地址:Matthew Pothier-Cinematographer
#优质博文 #tools
互联网档案馆发布插件,解决 40% 的互联网死链问题 - 小众软件:互联网档案馆(Internet Archive)推出了 WordPress 插件 Link Fixer,旨在解决互联网日益严重的“链接腐化”(Link Rot)问题。该插件通过自动检测失效的 URL(如 404 错误),并引导用户访问 Wayback Machine 中存储的历史网页快照,据称能修复约 40% 的死链。
居然是 WordPress 插件(
互联网档案馆发布插件,解决 40% 的互联网死链问题 - 小众软件:互联网档案馆(Internet Archive)推出了 WordPress 插件 Link Fixer,旨在解决互联网日益严重的“链接腐化”(Link Rot)问题。该插件通过自动检测失效的 URL(如 404 错误),并引导用户访问 Wayback Machine 中存储的历史网页快照,据称能修复约 40% 的死链。
居然是 WordPress 插件(
#优质博文 #前端 #CSS #锚点定位 #course
Drawing Connections with CSS Anchor Positioning - Roland Franke
锚点定位真好玩儿吧:在无需 JavaScript 的情况下实现 UI 元素(如评论与其回复)之间的视觉连线。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
author Roland Franke
Drawing Connections with CSS Anchor Positioning - Roland Franke
锚点定位真好玩儿吧:在无需 JavaScript 的情况下实现 UI 元素(如评论与其回复)之间的视觉连线。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
• 核心挑战: 在 CSS 中视觉化连接相关元素(如评论线、Tooltip 工具提示)通常很棘手,传统方案往往依赖 JavaScript 计算、额外的标签或不稳固的布局假设。
• 锚点定位机制:
• 使用 anchor-name (锚点名称) 为一个元素命名作为参考点。
• 使用 anchor-scope (锚点作用域) 限制锚点名称的影响范围,确保组件的独立性。
• 在另一个元素中使用 anchor() (锚点函数) 获取参考元素的边界位置(如 start, end, center)。
• 代码实现:
• 通过为 .comment 和 .reply 定义锚点名,在回复的 ::after 伪元素中利用 inset 属性引用这些锚点,从而精确绘制连接线。
• 结合 Logical Properties (逻辑属性) 如 inset-block-start,使布局能够自适应不同的语言和书写方向。
• 技术优势:
• 无需 JavaScript: 减少了脚本负担,提升了性能。
• 布局感知: 当内容增长或容器变动时,连接线会自动更新位置。
• 代码简洁: 减少了冗余的 Wrapper (包装) 元素。
• 浏览器兼容性: 目前处于 Baseline: Newly available (基线:新近可用) 阶段,主要在最新版本的 Chromium 系浏览器中得到支持,建议作为 Progressive Enhancement (渐进增强) 使用。
author Roland Franke
#优质博文 #前端 #CSS #JavaScript #新特性 #Chrome
New to the web platform in January
汇总了 2026 年 1 月 Web 平台的重大进展,重点介绍了 Chrome 144 和 Firefox 147 稳定版的发布。其中,CSS 锚点定位 (CSS Anchor Positioning) 和 Navigation API 随着 Firefox 的支持正式达到 Baseline Newly Available 状态。此外,Chrome 144 引入了期待已久的 Temporal API、声明式的
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
author Rachel Andrew
New to the web platform in January
汇总了 2026 年 1 月 Web 平台的重大进展,重点介绍了 Chrome 144 和 Firefox 147 稳定版的发布。其中,CSS 锚点定位 (CSS Anchor Positioning) 和 Navigation API 随着 Firefox 的支持正式达到 Baseline Newly Available 状态。此外,Chrome 144 引入了期待已久的 Temporal API、声明式的
<geolocation> 元素以及用于自定义页内搜索样式的 ::search-text 伪元素[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 稳定版浏览器发布(Stable browser releases)
• Baseline 状态更新:随着 Firefox 147 的发布,CSS 锚点定位 (CSS Anchor Positioning) 和 Navigation API 现已在所有主要引擎中可用,正式进入 Baseline 阶段。
• CSS 锚点定位 (CSS Anchor Positioning):允许元素相对于“锚点”元素进行定位,适用于工具提示 (Tooltips)、菜单和弹出层。
• Navigation API:提供了一种现代化的方式来启动、拦截和管理应用程序中的导航,是单页应用 (SPA) 的核心增强。
• Temporal API:Chrome 144 引入了这一重磅 JavaScript API,作为 Date 对象的现代替代方案,提供更强大的日期和时间处理功能。
• 声明式 <geolocation> 元素:Chrome 144 新增了由用户激活的地理位置控制控件,简化了权限流程并减少了对复杂 JavaScript API 的依赖。
2. CSS 与样式增强(CSS Enhancements)
• ::search-text 伪元素:Chrome 144 支持自定义浏览器“页内查找”结果的样式,类似于 ::selection。
• caret-shape 属性:开发者现在可以指定文本插入光标的形状,如条状 (bar)、块状 (block) 或下划线 (underscore)。
• 视图过渡 (View Transition) 增强:Firefox 147 开始支持单页应用 (SPA) 的视图过渡类型识别,并支持通过 Document.activeViewTransition 获取当前活动的过渡对象。
3. Beta 版预览与未来动态(Beta browser releases)
• Chrome 145 Beta:引入了 text-justify 属性、多列布局改进(column-wrap 和 column-height)以及可自定义的 <select> 列表框。
• Firefox 148 Beta:支持 Location.ancestorOrigins,用于检测文档是否被嵌入到 <iframe> 中以及被哪些站点嵌入。
author Rachel Andrew
#优质博文 #前端 #CSS #锚点定位 #layout #course
Solving Shrinkwrap: New Experimental Technique
好文,利用 CSS Anchor Positioning(锚点定位)和 Scroll-Driven Animations(滚动驱动动画)解决网页排版中“自动换行导致的容器宽度无法自动收缩(Shrinkwrap)”这一经典难题。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
author Roman Komarov
Solving Shrinkwrap: New Experimental Technique
好文,利用 CSS Anchor Positioning(锚点定位)和 Scroll-Driven Animations(滚动驱动动画)解决网页排版中“自动换行导致的容器宽度无法自动收缩(Shrinkwrap)”这一经典难题。
AI 摘要:本文提出了一种创新的 CSS 实验性方案,旨在解决困扰开发者多年的“Shrinkwrap”难题:当块级元素内的文本自动换行时,容器宽度依然占据最大可用空间而非紧贴文本内容的现象。
作者 Roman Komarov 通过巧妙结合 Anchor Positioning(锚点定位)进行尺寸测量,并利用 Scroll-Driven Animations(滚动驱动动画)将测量值跨层级传递给父元素,从而动态调整容器尺寸。尽管该技术在 HTML 结构上有一定要求且目前仍处于实验阶段,但它为实现真正的紧凑包裹效果(如聊天气泡、自适应提示框等)提供了全新的纯 CSS 路径。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 核心挑战与背景 (The Problem)
• 解释“Shrinkwrap”问题:当元素内的内容(如文本)自动换行时,CSS 的 shrink-to-fit 算法通常会让容器扩展到最大可用宽度,导致视觉上出现多余的空白。
• 回顾该问题在 CSS 规范(CSSWG)中长达十年的讨论,以及 text-wrap: balance 等新属性如何凸显了这一缺陷。
2. 技术实现原理 (The Base Technique)
• 结构设计: 采用四层嵌套 HTML 结构,包括容器、内容包装器、源元素和探测元素 (probe)。
• 远程测量 (Remote Dimension Measuring): 利用 Anchor Positioning(锚点定位)来确定内部行内元素的边界。
• 数值传递: 结合 Scroll-Driven Animations(滚动驱动动画)和自定义属性(CSS Variables),将测量到的像素值转换成可以在父元素中使用的数值,从而动态设置 inline-size(行向尺寸)。
3. 代码实现与 API (Code & Limitations)
• 展示核心 CSS 代码,利用 @property 定义变量,通过 animation-range 和 view-timeline 实现尺寸捕捉。
• 使用限制: 元素必须仅包含 Phrasing Content(短语内容,即行内元素);目前主要在 Chrome 和 Safari 中运行,且 Safari 存在某些实验性 Bug。
• API 定义: 提供 --sw-limit(限制宽度)和 --sw-padding(间距调整)等自定义属性。
4. 进阶复杂场景 (Complex Content)
• 多锚点策略 (Multiple Explicit Anchors): 演示如何处理具有多个 Flex(弹性布局)或 Grid(网格布局)项的容器包裹。
• 链式锚点 (Chained Anchors): 针对不确定数量的项目,提出一种基于容器查询(Container Queries)和锚点链的自动化测量方案(目前仅 Chrome 支持较好)。
• 内容重复法: 探讨解决导航菜单等具有复杂相互依赖关系的布局方案。
5. 实际应用案例 (Use Cases)
• 聊天气泡 (Chat Bubbles): 让气泡背景完美贴合换行后的文本,保持美观的视觉边距。
• 表单分组标题 (Fieldsets and Legends): 解决 legend 标签在换行时导致的边框对齐问题。
• 覆盖图注 (Overlay Image Captions): 实现图片上的半透明遮罩背景随文本长度动态收缩。
• 提示框 (Tooltips): 优化设计系统中的气泡提示,使其在不同文本长度下都能保持紧凑。
6. 总结与未来趋势 (What's Next)
• 作者呼吁浏览器厂商提供原生的 CSS 属性或函数来简化这一过程。
• 强调简单场景的解决方案已趋于成熟,而跨依赖的复杂布局仍是未来探索的方向。
author Roman Komarov
#优质博文 #前端 #性能优化 #JavaScript
The Browser Hates Surprises
author Durgesh Rajubhai Pawar
The Browser Hates Surprises
AI 摘要:文章指出,浏览器的渲染引擎实际上是一个高效的约束求解器。当开发者中途“惊吓”浏览器(如延迟加载图片、动态插入滚动条等)时,会强制触发回流(Reflow),导致累积布局偏移(CLS)和用户体验的卡顿(Jank)。作者通过对比实验,提出了四种具体的优化方案:利用 scroll-margin-top 处理粘性布局遮挡、使用 scrollbar-gutter 预留滚动条空间、配置 aspect-ratio 预留图片位置,以及通过 Promise.all 编排数据加载。核心观点是:优化不仅是为了更快的加载,更是为了实现更平稳(Calm)的渲染。
author Durgesh Rajubhai Pawar
#优质博文 #前端 #CSS
CSS @scope: An Alternative To Naming Conventions And Heavy Abstractions
author Blake Lundquist
CSS @scope: An Alternative To Naming Conventions And Heavy Abstractions
AI 摘要:本文探讨了在复杂前端界面开发中,传统 CSS 命名规范(如 BEM)以及现代抽象工具(如 Tailwind 或 CSS-in-JS)的局限性。作者重点介绍了现已达成 Baseline 兼容的 CSS @scope 特性。@scope 允许开发者在不牺牲 CSS 级联(Cascade)和继承特性的前提下,实现精确的样式隔离。通过支持“甜甜圈作用域(Donut Scoping)”和引入邻近性(Proximity)原则,@scope 有效解决了样式泄露和特异性(Specificity)战争问题,为构建现代、可维护的 UI 提供了一种更符合原生 Web 标准的替代方案。
author Blake Lundquist
#优质博文 #前端 #CSS #grid #新特性
CSS Bar Charts Using Modern Functions | CSS-Tricks:本文介绍了如何利用 CSS 现代函数 sibling-index() 和升级后的 attr() 函数(可以接受 data- 属性),以更简洁、高效的方式构建纯 CSS 柱状图。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
author Preethi
CSS Bar Charts Using Modern Functions | CSS-Tricks:本文介绍了如何利用 CSS 现代函数 sibling-index() 和升级后的 attr() 函数(可以接受 data- 属性),以更简洁、高效的方式构建纯 CSS 柱状图。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 核心技术原理 (Core Technical Principles)
• 使用 display: grid 创建图表容器,并通过 grid-template-rows: repeat(100, 1fr) 建立百分比基准。
• 引入 sibling-index() 函数:自动为列表项分配连续的 grid-column 索引,无需手动编写选择器或 CSS 变量。
• 引入增强版 attr() 函数:直接从 HTML 的 data-value 属性中读取数值,并将其转换为 CSS 可用的 <number> 类型,用于控制 grid-row 的跨度 (span)。
2. 自动布局实现 (Automatic Layout Implementation)
• 详细拆解 sibling-index() 的工作方式:如何智能生成网格顺序,减少对 nth-child 等样式的依赖。
• 解释 attr(data-value number) 的类型转换功能:如何将字符串属性无缝转换为网格行数。
• 探讨浏览器兼容性:目前在 Chrome 和 Safari 中已有支持,但 Firefox 和部分移动端浏览器仍待完善。
3. 多样化图表应用 (Diverse Chart Applications)
• 纵向柱状图:通过调整 grid-row 的起始和结束位置改变增长方向。
• 标记图表 (Marker Charts):跳过完整的柱条,仅在特定网格点显示标记元素。
• 横向柱状图:交换行与列的逻辑,实现水平方向的数据展示。
4. 历史回顾与演进 (Historical Evolution)
• 对比 2015 年至 2022 年间的传统图表实现方法(如利用伪元素、手动 Grid 布局及 CSS 自定义属性)。
• 强调新技术如何通过减少“黑科技” (Hacks) 和冗余代码来优化开发流程。
author Preethi
#优质博文 #CSS #动画 #前端 #新特性
Elastic/Bouncy Text Effect:仅使用纯 CSS 实现一种有趣的悬停弹跳文字动画。目前该效果属于实验性特性,仅支持 Chrome 浏览器。
author Temani Afif
Elastic/Bouncy Text Effect:仅使用纯 CSS 实现一种有趣的悬停弹跳文字动画。目前该效果属于实验性特性,仅支持 Chrome 浏览器。
AI 摘要:这篇文章介绍了如何仅使用纯 CSS 实现一种有趣的弹性文字(Elastic/Bouncy Text)效果。作者 Temani Afif 通过组合使用最新的 CSS 特性,如 shape() 函数、 sibling-index() / sibling-count() 索引函数以及 linear() 缓动函数,实现了文字在悬停时的动态曲线跳动。虽然该技术目前仅支持 Chrome 浏览器且对 HTML 结构有特定要求(如每个字母需独立包装并使用等宽字体),但它展示了现代 CSS 在路径动画和动态计算方面的强大能力。
author Temani Afif
#优质博文 #HTML #性能优化 #前端
Performance-Optimized Video Embeds with Zero JavaScript
author Stefan Bauer
Performance-Optimized Video Embeds with Zero JavaScript
AI 摘要:本文介绍了一种利用原生 HTML 标签 <details> 和 <summary> 来优化视频嵌入(Video Embeds)性能的创新方法。通过这种方案,开发者可以在完全不使用 JavaScript 的情况下实现视频的按需加载(Lazy Loading),有效降低页面初始加载时的资源消耗,显著提升首次内容绘制(First Contentful Paint, FCP)和最大内容绘制(Largest Contentful Paint, LCP)等性能指标。该方法不仅能防止累积布局偏移(Cumulative Layout Shift, CLS),还具备原生辅助功能支持,是替代传统重型第三方视频插件的高效方案。
author Stefan Bauer