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

如何让CSS导航菜单元素的点击效果持续到点击另一元素为止

:active伪类生效规则

:active伪类仅在元素被按下未松开的短暂时间段内生效,鼠标松开后样式立即失效,无法实现持久的选中状态效果。

实现持久选中效果的两种方案

方案1:纯CSS实现(依赖:target伪类)

适合简单静态页面,不需要引入JS:

HTML代码

<nav>
  <a href="#ex1" id="ex1"> ex1 </a>
  <a href="#ex2" id="ex2"> ex2 </a>  
  <a href="#ex3" id="ex3"> ex3 </a>
</nav>

CSS代码

/* 匹配当前哈希对应的导航元素 */
nav a:target {
  background-color: darkblue;
  color: #fff;
}
/* 可选:默认第一个元素处于选中状态 */
nav a:first-child {
  background-color: darkblue;
  color: #fff;
}
nav a:target ~ a {
  background-color: transparent;
  color: inherit;
}

注意:该方案会修改页面URL的哈希值,和哈希路由冲突的项目不推荐使用

方案2:JS实现(通用方案,适用性更广)

通过类名切换控制选中状态,适配所有场景:

HTML代码

<nav>
  <a href="#" class="nav-item"> ex1 </a>
  <a href="#" class="nav-item"> ex2 </a>  
  <a href="#" class="nav-item"> ex3 </a>
</nav>

CSS代码

/* 自定义选中态样式 */
.nav-item.active {
  background-color: darkblue;
  color: #fff;
}

JS代码

const navItems = document.querySelectorAll('.nav-item')
// 给所有导航项绑定点击事件
navItems.forEach(item => {
  item.addEventListener('click', function(e) {
    // 若不需要跳转链接可开启阻止默认行为
    // e.preventDefault()
    // 清空所有导航项的选中状态
    navItems.forEach(el => el.classList.remove('active'))
    // 给当前点击项添加选中状态
    this.classList.add('active')
  })
})
// 可选:默认第一个导航项选中
navItems[0]?.classList.add('active')

内容的提问来源于stack exchange,提问作者MSA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:36:03