公告改成全屏遮罩后,首屏的购买按钮点不动,鼠标移上去没有手型,元素面板显示按钮在遮罩下面,遮罩 z-index 是 9999。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
.notice-mask { z-index: var(--z-modal, 100); }
.notice-mask[hidden] { display: none; }
公告容器和遮罩共用一个 fixed 层,层级直接写到 9999,压过了导航和首屏卡片。遮罩没设 pointer-events,透明区域也拦截点击。这一点先确认清楚,后面就不用反复试。
「公告弹窗层级」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,把公告层级降到导航之下,用站点统一的层级变量,不再手写四位数;遮罩只在弹窗打开时挂载,关闭后立刻移除节点;点一遍首屏所有按钮,确认没有被透明层挡住。
改完照着核一遍,公告打开时按钮仍可点击,关闭后遮罩节点从 DOM 里消失。
