You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:无JavaScript实现抽屉式Webform聚焦保持展开的无障碍方案

问题:抽屉组件在Tab切换内部表单时自动关闭的无JS解决方法?

我是无障碍领域的新手,正在学习相关知识。我搭建了一个小型项目,将资讯/文章、webform放在左侧的抽屉组件中,初始状态为闭合,鼠标悬停或获得焦点时展开(类似浏览器标签页,但位于容器左侧)。Tab键可正常访问包括webform在内的所有元素,但当Tab切换到抽屉内的webform元素时,抽屉会因自身失去焦点而关闭。请问是否存在无需JavaScript的方法,让抽屉在Tab切换内部webform元素时保持展开状态?

代码片段

CSS

.form {
  position: relative;
  padding: 30px 50px;
  margin-bottom: 10px;
  color: #aaa;
  background: rgba(25, 25, 25, 0.5);
  backdrop-filter: blur(5px);
  -webkit-backdrop-filter: blur(5px);
  border-radius: 5px;
  box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);
  transition: 1250ms;
  transform: translateX(-517px);
  max-width: 100%;
}

.form:hover,
.form:focus,
.form:active {
  transform: none;
  z-index: 9999;
}

.article2 {
  border-color: #00b7ff;
}

HTML

<div class="article2 form" tabindex="5">
  <h3>Kontaktforms</h3>
  <form>
    <h2>Kontakta oss</h2>
    <label for="name">Namn</label>
    <input type="text" id="name" name="name" tabindex="6" required />

    <label for="email">E-postadress</label>
    <input type="email" id="email" name="email" tabindex="7" required />

    <label for="message">Meddelande</label>
    <textarea id="message" name="message" tabindex="8" required></textarea>

    <input type="submit" value="Skicka" />
  </form>
</div>

解决方案

可以用CSS的:focus-within伪类实现,它会在元素本身或内部任意子元素获得焦点时触发样式,完美适配你的场景:

修改CSS中的触发选择器,将.form:focus替换为.form:focus-within:

.form:hover,
.form:focus-within,
.form:active {
  transform: none;
  z-index: 9999;
}

原理很直接:当Tab切换到抽屉内的表单元素时,:focus-within会检测到容器内有元素获得焦点,从而保持抽屉的展开样式,直到焦点完全离开整个抽屉容器。这种方法完全不需要JavaScript,同时符合无障碍交互的要求。

内容的提问来源于stack exchange,提问作者Niels von Daake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 01:52:32