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

如何将指定CSS样式应用到特定li/span类实现默认激活悬停效果

样式不生效原因

核心问题是CSS选择器和实际HTML的类名、结构不匹配:

  • 你的CSS规则匹配的是带is-active类的<a>标签,但当前HTML里激活态的<a>用的类名是selected1,选择器根本匹配不到目标元素
  • 你的CSS选择器最外层依赖.nav--icons的父容器,如果导航最外层没有加这个类,整条规则都会失效
  • 你只写了悬停/激活时span的样式,没写span默认状态的初始属性,就算匹配到元素也不会有平滑显示的效果
正确实现代码

调整后的HTML结构

统一用is-active作为激活态的状态类名,补全外层必要的结构类名:

<nav class="nav--icons">
  <ul>
    <li>
      <a class="is-active" href="#home">
        <svg class="icon icon-home" viewBox="0 0 24 24" width="24" height="24">
          <path fill="currentColor" d="M21.6 8.2l-9-7c-0.4-0.3-0.9-0.3-1.2 0l-9 7c-0.3 0.2-0.4 0.5-0.4 0.8v11c0 1.7 1.3 3 3 3h14c1.7 0 3-1.3 3-3v-11c0-0.3-0.1-0.6-0.4-0.8zM14 21h-4v-8h4v8zM20 20c0 0.6-0.4 1-1 1h-3v-9c0-0.6-0.4-1-1-1h-6c-0.6 0-1 0.4-1 1v9h-3c-0.6 0-1-0.4-1-1v-10.5l8-6.2 8 6.2v10.5z"></path>
        </svg>
        <span>Home</span>
      </a>
    </li>
    <!-- 其余导航项按相同结构书写即可 -->
  </ul>
</nav>

完整可运行CSS

补全span默认状态样式、过渡属性,修正选择器匹配规则:

/* 清除默认列表样式 */
.nav--icons ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
/* 导航项基础样式 */
.nav--icons ul li a {
  display: inline-flex;
  align-items: center;
  padding: 8px 12px;
  color: #333;
  text-decoration: none;
  border-radius: 4px;
  transition: all 0.3s ease;
}
/* 激活态a标签样式 */
.nav--icons ul li a.is-active {
  color: #fff;
  background-color: #000;
}
/* span默认隐藏状态 */
.nav--icons ul li a span {
  opacity: 0;
  max-width: 0;
  transform: translate3d(-6px, 0, 0);
  overflow: hidden;
  white-space: nowrap;
  transition: all 0.3s ease;
}
/* 悬停/激活时span展开显示 */
.nav--icons ul li a:hover span,
.nav--icons ul li a.is-active span {
  opacity: 1;
  max-width: 40px;
  transform: translate3d(0, 0, 0);
  margin-left: 6px;
}
实现效果
  • 带is-active类的默认激活项,加载完成就直接呈现黑底白字效果,旁边的文字标签默认展开
  • 鼠标悬停在其他导航项上时,对应文字标签会平滑展开,移开后自动收起
  • 所有状态切换带0.3s的平滑过渡,没有生硬的跳变

内容的提问来源于stack exchange,提问作者Heçkır 001

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:03:24