-
:has()是目前唯一能根据后代内容反向选择父级的原生CSS方案,但仅支持可选中子元素(不能匹配纯文本节点),需配合语义class或data属性使用;文本匹配应优先通过JavaScript添加class或直接用属性选择器(如[data-action="submit"])实现,避免依赖易变的文本内容。
-
现代浏览器自定义滚动条需分WebKit(Chrome/Edge/Safari)和Firefox两套方案:前者用::-webkit-scrollbar伪元素,仅对overflow溢出的块级容器生效;后者用scrollbar-width和scrollbar-color,且color仅在width为auto或thin时生效。
-
Html5-QRCode是省事、兼容性好、识别率够用的方案;jsQR仅解码,需额外处理视频流、权限、降级等数十行胶水代码,移动端易黑屏卡死且无文件上传fallback。
-
响应式表格小屏转卡片需语义打散并用flex重排,关键在为td添加data-label属性并通过媒体查询控制display值,保留表格结构以保障可访问性与SEO。
-
let和const均为块级作用域、不提升、不可重复声明,区别仅在于是否允许重新赋值;var因函数作用域和变量提升易引发闭包、作用域泄露等问题,应避免使用。
-
本文介绍一种高效、非递归但逻辑等价于递归的算法,将扁平的节点数组按parent-id关系构建成嵌套的树形结构,适用于文件系统、菜单、组织架构等场景。
-
支付页面需防误操作、保状态、抗重放、可访问:提交时禁用整个表单并设aria-disabled;服务端必须幂等校验;确认页须reset表单、移除监听器、replaceState;成功页订单号应入URLpath并服务端渲染,缓存头设为no-store。
-
Intl.ListFormat比手写join更可靠,因其内置多语言分隔规则(如英语用“and”、中文用“、”、日语用「・」),而手写无法覆盖语义差异;应按locale和选项缓存实例,传入前归一化为字符串数组,并注意SSR和响应式场景下的正确初始化与DOM方向处理。
-
JavaScript中的微任务队列没有明确的长度限制,它是一个动态增长的FIFO队列,与当前宏任务的生命周期绑定;1.微任务队列在规范层面无固定上限,理论上可无限增长;2.微任务优先级高于宏任务,在当前宏任务执行后立即清空微任务队列;3.若微任务无限生成,会持续占用主线程,导致页面冻结、宏任务无法执行;4.常见微任务包括Promise回调、MutationObserver、queueMicrotask();5.避免微任务过度膨胀的方法包括避免递归创建微任务、分解大型任务、使用setTimeout调度、利用
-
PWA必须包含start_url、display、icons(192x192和512x512PNG)、name、short_name字段,且serviceworker需在HTTPS下注册并处理fetch事件。
-
JWT是一种轻量级自包含身份验证机制,由Header.Payload.Signature三部分组成,服务端签发、客户端存储并携带,通过验签验证身份,适用于分布式系统。
-
CSS动画在隐藏页会被浏览器暂停,CPU无负担;而requestAnimationFrame不会自动感知可见性,需手动结合document.hidden和visibilitychange控制启停。
-
reset.css清除所有默认样式,适合完全自定义项目;2.normalize.css保留并统一默认样式,修复浏览器差异,更适合现代开发;3.多数项目推荐使用normalize.css,因其兼顾语义化与一致性。
-
Vue组件中emit不捕获原生DOM事件,子组件需监听DOM事件后调用emit抛出语义化业务事件;父组件应监听业务事件而非DOM事件,避免传递原生event对象、滥用.native修饰符,并采用kebab-case命名。
-
层提升由浏览器自动触发,非手动开关;常用CSS属性包括transform:translateZ(0)、will-change:transform、opacity:0.99和filter;但仅层提升不能强制调用独显,须配合Windows图形设置或NVIDIA控制面板绑定高性能GPU,并通过chrome://gpu及任务管理器GPU性能页验证是否生效。