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

如何实现侧边菜单悬停时文本平滑滑入过渡(无需额外JS)

纯CSS实现侧边菜单悬停平滑展开效果

完全可行,不用写任何JavaScript,靠CSS就能实现文本显示/容器展开的平滑滑动过渡。

问题分析

你原来的代码用display: none/inline控制文本显示,但display属性不支持CSS过渡动画,所以悬停时文本会突然出现,没有平滑效果。我们需要改用支持过渡的属性来实现,比如width、opacity、overflow这些。

解决方案代码

HTML 调整

把原来的d-none类去掉,改用CSS控制初始隐藏状态:

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" integrity="sha512-iecdLmaskl7CVkqkXNQ/ZH/XLlvWZOJyj7Yy7tcenmpD1ypASozpmT/E0iPtmFIB46ZmdtAc9eNBvH0H/ZpiBw==" crossorigin="anonymous" referrerpolicy="no-referrer" />

<div class="row">
  <div class="col-10"></div>
  <div class="col-2">
    <ul class="nav nav-pills flex-column mb-auto">
      <li class="nav-item">
          <a href="#" class="nav-link active" aria-current="page">
              <i class="fa-solid fa-book"></i>
              <span class="nav-title">Bio</span>
          </a>
      </li>
      <li>
          <a class="nav-link" data-id="tags">
              <i class="fa-solid fa-tags"></i>
              <span class="nav-title">Tags</span>
          </a>
      </li>
    </ul>
  </div>
</div>

CSS 修改

核心是给文本添加过渡属性,用width和opacity实现平滑显示,同时让容器自然扩展:

:root {
    --darkblack: #000615;
    --black: #0B1721;
    --lightblack: #141B37;
    --yellow: #F7C921;
    --darkyellow: #a28b2a;
    --cyan: #21B7FF;
    --darkcyan: #1c7eaf;
    --magenta: #FF217D;
    --darkmagenta: #531a3b;
}

.nav {
  align-items: flex-end;
}

.nav-pills .nav-link {
  width: auto;
  display: flex;
  align-items: center;
  gap: 8px;
  padding-right: 1rem;
}

.nav-pills .nav-link.active {
   color: var(--black) !important;
   background-color: var(--cyan);
 }

.nav-pills .nav-link:not(.nav-link.active) {
  color: var(--cyan) !important;
  cursor: pointer;
}

/* 文本初始状态:隐藏+透明 */
.nav-title {
  width: 0;
  opacity: 0;
  overflow: hidden;
  white-space: nowrap;
  transition: width 0.3s ease, opacity 0.3s ease;
}

/* 悬停时展开文本 */
.nav-pills .nav-link:hover .nav-title {
  width: auto;
  opacity: 1;
}

关键细节说明

  • 用width: 0替代display: none,配合overflow: hidden隐藏文本,宽度变化可触发过渡动画。
  • opacity: 0/1让文本有淡入淡出效果,增强平滑感。
  • white-space: nowrap确保文本不换行,保持横向展开的效果。
  • 给.nav-link设置display: flex,让图标和文本对齐规整,容器会随文本宽度自动扩展,实现容器平滑展开。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:03:22