Bootstrap 4动画下拉菜单

8

在 Bootstrap(4.0)中,下拉菜单默认是没有动画效果的。我该怎样使其像折叠导航栏一样“滑动”展开呢?

值得注意的是,这个下拉菜单位于导航栏内。以下是示例代码:https://www.codeply.com/go/JKj5onR3ug

<nav class="navbar navbar-dark bg-dark">
  <a class="navbar-brand" href="#">Never expand</a>
  <button class="navbar-toggler collapsed" type="button" data-toggle="collapse" data-target="#navbarsExample01" aria-controls="navbarsExample01" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="navbar-collapse collapse" id="navbarsExample01" style="">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
        <div class="dropdown-menu" aria-labelledby="dropdown01">
          <a class="dropdown-item" href="#">Action</a>
          <a class="dropdown-item" href="#">Another action</a>
          <a class="dropdown-item" href="#">Something else here</a>
        </div>
      </li>
    </ul>
  </div>
</nav>
5个回答

8

以下是我使用纯CSS制作下拉动画的方法,使用transform: scale属性:

SCSS样式

.dropdown {
    .dropdown-menu {
        transition: all 0.5s;
        overflow: hidden;
        transform-origin: top center;
        transform: scale(1,0);
        display: block;
    }
    &:hover {
        .dropdown-menu {
            transform: scale(1);
        }
    }
}

Codepen上查看演示


7
最简单的方法是使用“collapse”来切换它,而不是使用“dropdown”。然后您只需要一点CSS来确保在“collapsing”动画处于活动状态时它会显示。还请注意,在“dropdown-menu”上设置了“position-relative”。
.dropdown-menu.collapsing {
    display:block;
}

在Codeply上试一试


"Dropdowns的位置是由Popper.js控制的(除非它们包含在导航栏中)."

因为导航栏内的dropdowns定位方式不同,这里提供另一个使用标准按钮dropdowns的示例:https://www.codeply.com/go/vJhVEh9Okd


另一种选择是使用Bootstrap 3.x dropdown动画技术之一.


1
那很好,但为什么需要“position-relative”类?它似乎没有这个也可以工作吧? - Michael Ruta
谢谢示例和思路 @Zim,它可以工作,但我发现我可以修复一些问题:
  • 扩展的导航栏上下拉菜单没有正常工作。
  • 动画有点问题,因为下拉菜单有垂直内边距。 这是修复后的示例: https://www.codeply.com/go/09IISWbMoa
- Mikha

2

我喜欢这个。简单而且好!

.dropdown-menu {
   display: block;
   opacity: 0;
   padding: 0;
   max-height: 0;
   overflow: hidden;
   transition: all .3s ease-in;
}
 .dropdown-menu.show {
   max-height: 500px;
   opacity: 1;
   padding: 0.5rem 0;
}

非常好用,谢谢! - Saghachi

1

您需要覆盖下拉菜单的css样式。请使用以下css代码。

.dropdown-menu {
    display: block;
}

.navbar-nav .dropdown-menu {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.5s;
}

.navbar-nav .dropdown-menu.show {
    max-height: 500px;
}

0

试一下这段代码 :)

            .dropdown-menu {
                float: none;
                position: static;
                padding: 0;
                display: block;
                &.show{
                    max-height: 500px;

                }
            }

            .dropdown-menu {
                max-height: 0;
                overflow: hidden;
                transition: max-height 0.5s;
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接