-
选框架前需明确项目功能需求,小页面或已有设计系统时无需完整CSS框架;Bootstrap提供预设组件和JS交互,Tailwind是原子类工具集,二者适用场景不同。
-
用Map实现撤销/重做,核心是将其作为“操作-快照”索引层,键为操作ID或类型序号,值存深拷贝状态、diff摘要或命令对象,避免引用污染;更新严格匹配用户显式意图,还原时协同past/future指针精准定位。
-
width变化不触发transition需确保元素有明确数值宽度(非auto)、写在默认状态而非hover中、行内元素设为block/inline-block;优先用max-width或flex-basis替代width过渡。
-
服务端主动关闭WebSocket必须走RFC6455关闭帧流程:先发CLOSE帧、等待对端响应、再关底层连接;直接调用close()或terminate()会导致1006异常断开,生产环境严禁用terminate()主动下线,仅限恶意帧拦截或超时强制清理。
-
CSS的background-image无法真正按需加载图片,仅能通过image-set()实现DPR切换或媒体查询模拟响应式,但后者会预加载所有图片;最优解是改用picture+srcset语义化方案。
-
使用Flexbox与Grid结合实现响应式页脚布局,.footer采用Grid设置整体多列结构,配合auto-fit和minmax实现自适应列数,内部模块如.brand、.social等使用Flexbox进行垂直排列与对齐,通过媒体查询在小屏下切换为单列并居中显示,结合gap、justify-self等属性优化间距与定位,确保不同设备下布局合理、对齐自然。
-
:has()伪类兼容性有限,Chrome105/Firefox103/Safari16.4起支持,旧版本静默失效;不支持伪元素和状态伪类;构建工具可能误删;JS监听+class切换更可靠。
-
box-shadow浮起效果需在默认状态显式声明初始值才能触发transition;建议用0.25sease-out进效+ease-in退效;避免all过渡和小数模糊值,高DPI下优先filter:drop-shadow()。
-
最稳妥是绑定在轮播容器上并用event.target.closest('.carousel-item.active')查找目标元素,避免误触和重复绑定,同时确保active类在transitionend后更新。
-
使用Flexbox实现三栏布局,父容器设为flex且不换行,左右栏定宽,中间栏通过flex-grow:1自适应填充剩余空间,并可设置min-width和margin优化显示效果。
-
骨架屏呼吸感应通过background-position位移渐变实现而非换色;使用三段式线性渐变、background-size翻倍、shine动画控制位移,避免background-color动画引发重绘卡顿。
-
必须用:root[data-theme='dark']作为顶层限定,因其是CSS最稳定的根伪类,能确保变量安全替换、后代继承暗色上下文,并避免优先级、作用域及SSR闪烁问题。
-
语义正确的导航必须用<nav>包裹,而非<divclass="nav">;多导航可用多个<nav>但不可嵌套;CSS推荐flex布局;下拉菜单需aria-expanded和键盘支持;汉堡菜单须用aria-controls关联面板。
-
float固定宽度布局仍值得用,因其在后台管理页侧边栏+主内容区等场景下最轻量且IE8+兼容性最佳;需手动处理高度塌陷与响应式降级,推荐伪元素清除浮动,主内容用margin-left避让定宽侧栏而非calc(),IE6兼容需注意zoom:1与空白节点问题。
-
移动端轮播图核心是保障流畅交互:需禁用原生滚动干扰(passive:false、touchMoveStopPropagation:true),避免加载抖动(aspect-ratio/伪元素占位)、自动播放需响应用户操作并延迟重启(≥1.5秒)。