用途:在列表项或卡片中构建下拉操作菜单、上下文菜单,正确处理 z-index 堆叠与点击外部关闭。
主要能力:解决列表项下拉菜单的三个常见缺陷——被父容器 overflow-hidden 裁剪、被同级卡片覆盖(跨堆叠上下文时 z-index 失效)、触发按钮点击时先关后开的重复切换。
核心用法:
- 点击外部检测使用 document.addEventListener("click", handleClickOutside),不要用 mousedown,否则会先于按钮 onClick 触发导致重复切换;在按钮 onClick 中调用 e.stopPropagation() 阻止文档监听器触发。
- 菜单打开时将整个父卡片层级抬升,如 className 中在 menuOpen 时用 z-30,否则 z-0,因为每张卡片自成一个堆叠上下文,菜单内的 z-20 只在卡内生效。
- 避免在包含下拉菜单的容器上使用 overflow-hidden,仅在可展开区域等必要处使用。
- 触发按钮与菜单项 onClick 均需 stopPropagation(),触发按钮外层使用 relative,下拉菜单使用 absolute 配合 top-full 或 bottom-full 定位。
- 定位可选右下(absolute right-0 top-full mt-1)、左下、右上、左上等组合。
- 若在具有不同 z-index 的堆叠项上显示 Tooltip,需将 Tooltip 渲染在列表循环之外,按悬停项计算位置,否则会被困在父级堆叠上下文中。
适用场景:React 列表、卡片网格中的操作菜单组件。限制:资料未提供安装命令、价格、平台兼容性等更多信息。