概览原生 Popover 提供无样式弹层的基础行为与可访问性,Anchor Positioning 则允许以锚点精确定位弹层。两者组合能在保持轻量的同时提供稳定的交互与布局治理。基础结构<button id="trigger" popovertarget="menu">菜单</button>
<div id="menu" popover>
<ul>
<li>项目 A</li>
<li>项目 B</li>
</ul>
<button popovertarget="menu" popovertargetaction="hide">关闭</button>
</div>
定位与样式#trigger {
anchor-name: --trigger;
}
#menu[popover] {
position: fixed;
position-anchor: --trigger;
top: anchor(bottom);
left: anchor(center);
transform: translateX(-50%);
padding: 0.5rem 0.75rem;
border-radius: 8px;
box-shadow: 0 8px 24px rgba(0,0,0,.12);
background: white;
}
@media (prefers-reduced-motion: reduce) {
#menu[popover] { transition: none; }
}
交互治理使用 `popovertarget` 与 `popovertargetaction` 控制显示与关闭,避免额外 JS。保持弹层在视口内:在窄视口下调整 `top/left` 为安全位置或使用容器内定位。通过 `role` 与 `aria` 提供语义,确保键盘导航与读屏器体验。验证与指标浏览器:Popover API(Chrome 120+、Safari 17+、Firefox 120+);Anchor Positioning(Chrome 125+)在缩放 125% 与移动端视口下定位稳定,无溢出与遮挡问题

发表评论 取消回复