css - 动画 Bootstrap 5 下拉菜单

标签 css twitter-bootstrap css-animations bootstrap-5

我正在尝试使用 CSS 为右对齐的 Bootstrap 下拉菜单设置动画,但无法使其正常工作。我认为通过将 transition 属性设置为应用于元素的 width 属性它会起作用,但它不起作用。

我可以看到元素的宽度最初在我的浏览器检查器中设置为 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/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/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>

最佳答案

您可以试试这个解决方案。 过渡动画是您自己的。

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/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/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);
}

关于css - 动画 Bootstrap 5 下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67098303/

相关文章:

javascript - 将列表中超过三步的 sibling 隐藏起来的最巧妙方法是什么?

css - CartoDB:信息窗口中的样式 block 被忽略。无法覆盖自定义样式

jquery - 如何在 Angular Controller 中使用 Typeahead JS 定位 Bootstrap 模式

javascript - 无法使用 JQuery 将事件监听器添加到克隆元素 - 用于 CSS 动画

javascript - 如何在 Chrome 之外操作 object.style.animationDuration?

javascript - JQuery click() 事件监听器不工作

javascript - 使用替换为浏览器前缀 js/css

jquery - 推特 Bootstrap 折叠选项卡问题

twitter-bootstrap - Bootstrap 3.1.1 - .map 扩展文件的用途是什么?

html - CSS3 选框效果 - 难倒