-
用 CSS anchor positioning 将提示框绑定到按钮,说明 anchor-name、position-anchor、position-area 的组合方式,以及浏览器回退、边界翻转和重复组件的处理方法。
-
JavaScript Array.toSorted 怎样避免原数组被改写?本文对比 sort() 与 toSorted() 的修改边界,说明数字和对象排序的比较函数写法、浅拷贝限制,以及旧运行时使用 [...items].sort() 的安全降级。
-
通过工单分组示例说明 JavaScript Map.groupBy 的对象引用键、原引用查询、属性修改与成员重建,以及归档和清理方式。
-
JavaScript Element.toggleAttribute 怎样同步布尔属性?本文用一个可展开面板说明如何切换 hidden、disabled 等属性,区分属性存在与属性值,利用 force 参数固定状态,并处理 ARIA 属性与非法名称的边界。
-
模态框打开后,背景内容不应只是被遮罩,还应从焦点、点击、文本查找和辅助技术访问路径中退出。本文用 HTML inert 属性与 HTMLElement.inert 完成背景冻结,并说明 dialog.showModal、继承状态、disabled、aria-hidden 与视觉提示的边界。
-
Vite 依赖预构建出现重复,常见原因不是简单的缓存脏了,而是同一个包的条件导出被解析成多个入口。本文从 exports 条件、源码入口、optimizeDeps 配置和 node_modules/.vite 缓存四处排查,并给出适合开发环境的最小修复方式。
-
在 Vite 项目里,使用 ?worker 导入得到的是 Worker 构造器,而不是普通模块对象。本文用一个最小的 TypeScript 示例说明 worker 文件、消息协议、?worker&inline、?sharedworker 与 vite/client 类型提示的关系,并整理部署和生命周期中的常见误区。
-
CSS zoom 会让缩放后的组件参与布局,适合整体比例调整;transform: scale() 只做视觉变换,适合不希望推动兄弟元素的预览或悬浮效果。
-
CSS sibling-index() 可以读取元素在同一父节点兄弟元素中的位置,并直接参与 calc() 生成递增的 animation-delay。本文从 DOM 顺序、动画步长、prefers-reduced-motion、@supports 和 nth-child() 降级几个环节说明如何在动态列表中减少手写编号,同时保留旧环境的基础样式。
-
用 border-radius 先建立圆角区域,再通过 CSS corner-shape 绘制 notch、bevel、scoop 等卡片边角,并用 @supports 保留旧浏览器的圆角降级。
-
用 CSS shape() 和 clip-path 为卡片定义可伸缩裁剪路径,说明 from、line、curve、百分比、rem 与 calc() 的配合方式,并比较 shape() 和 path() 的适用边界。
-
CSS font-size-adjust 可以按 x-height、cap-height 或 CJK 字符度量调整字体使用字号,让首选字体不可用时的后备字体保持相近字高。本文说明固定比例、from-font、继承、size-adjust 与旧浏览器降级边界。
-
CSS Grid 通过 grid-area、order 或响应式布局改变视觉位置后,卡片的 DOM 顺序和键盘焦点顺序可能不一致。本文用 reading-flow 的 grid-rows、grid-columns 与 grid-order 对齐访问顺序,并说明 tabindex、reading-order 和兼容性边界。
-
用 Temporal 区分同一时刻换区、当地日历加日和实际时长,结合预约示例处理夏令时歧义,并说明接口存储与兼容层选择。
-
Promise.withResolvers() 返回 promise、resolve 和 reject 三个控制点。本文从一次性外部事件与连续数据批次两个场景说明如何拆开 Promise 控制器、何时重新创建,以及生命周期和兼容性边界。