对 Bootstrap 5 进行动画处理下拉列表

Animating Bootstrap 5 dropdown

提问人:miken32 提问时间:4/15/2021 最后编辑:miken32 更新时间:5/14/2021 访问量:6258

问:

我正在尝试使用 CSS 对右对齐的 Bootstrap 下拉列表进行动画处理,但无法让它工作。我以为通过将属性设置为应用于元素的属性,它会起作用,但事实并非如此。transitionwidth

我可以看到元素的宽度最初在浏览器检查器中设置为 0,并在菜单可见后设置为“自动”。如果我手动调整宽度,我可以看到应用过渡,但由于某种原因,当显示菜单时不会发生。我尝试使用像素值而不是“自动”,没有任何变化。

我希望看到菜单以与菜单按钮旋转相同的速度向右“滑出”。这可能吗?

div.dropdown > .btn {
    transition: transform 0.8s cubic-bezier(0,-0.14,.27,1.55);
    transform: rotate(90deg);
}

div.dropdown > .btn.show {
    transform: rotate(270deg);
}

div.dropdown > .dropdown-menu {
    transition: width 0.8s cubic-bezier(0,-0.14,.27,1.55);
    width: 0;
}

div.dropdown > .btn.show + .dropdown-menu {
    width: auto;
}
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>

<div class="dropdown dropend p-4">
    <button class="btn btn-secondary" type="button" data-bs-toggle="dropdown">
        ++
    </button>
    <ul class="dropdown-menu dropdown-menu-end">
        <li><a class="dropdown-item" href="#">Action</a></li>
        <li><a class="dropdown-item" href="#">Another action</a></li>
    </ul>
</div>

css css-animations bootstrap-5

评论


答:

3赞 riky1 4/15/2021 #1

您可以尝试此解决方案。 过渡中的动画是你自己的。

div.dropdown > .btn {
    transition: transform 0.8s cubic-bezier(0,-0.14,.27,1.55);
    transform: rotate(90deg);
}

div.dropdown > .btn.show {
    transform: rotate(270deg);
}

div.dropdown>.dropdown-menu {    
    display: inherit;
    transform: translate(69px, 19px) scaleX(0);
    transition: all 0.8s cubic-bezier(0,-0.14,.27,1.55);
    transform-origin:left;
    left: 0;
}

div.dropdown>.btn.show+.dropdown-menu {
    display: inherit;
    transform: translate(69px, 19px) scaleX(1);
}
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>

<div class="dropdown dropend p-4">
    <button class="btn btn-secondary" type="button" data-bs-toggle="dropdown">
        ++
    </button>
    <ul class="dropdown-menu dropdown-menu-end">
        <li><a class="dropdown-item" href="#">Action</a></li>
        <li><a class="dropdown-item" href="#">Another action</a></li>
    </ul>
</div>

已针对 firefox 修复

div.dropdown>.btn.show+.dropdown-menu {
    display: inherit;
    transform: translate(69px, 19px) scaleX(1);
}

评论

0赞 miken32 4/15/2021
transform: translate(69px, 19px) scaleX(0);这些价值观从何而来?
0赞 riky1 4/15/2021
Bootstrap 添加内联样式;nedd 来修复下拉位置。 用于水平过渡,从 0 到 1。transform: translate(69px, 19px)scaleX(0)
0赞 miken32 4/15/2021
我只在动画收缩时看到动画,而不是在它膨胀时看到动画
0赞 riky1 4/15/2021
FIxed firefox 过渡。试试吧。
0赞 miken32 4/15/2021
+1 表示努力,它现在可以在 Firefox 中使用。但是菜单div上的翻译不是固定的,这取决于按钮的内容。