如何用CSS实现Bootstrap嵌套下拉菜单打开后关闭延迟效果
你之前设置transition-delay不生效的核心原因是:transition 动画不支持display属性的状态切换,你现在的代码是通过display: none隐藏子菜单,:hover时切换为display: block,这种切换方式无法触发过渡动画。
解决方法
只需要修改CSS代码,用opacity、visibility替代display控制子菜单的显隐,就能同时实现平滑动画和关闭延迟效果,修改后的完整CSS如下:
.dropdown-submenu { position: relative; } .dropdown-submenu>.dropdown-menu { top: 0; left: 100%; margin-top: -6px; margin-left: -1px; -webkit-border-radius: 0 6px 6px 6px; -moz-border-radius: 0 6px 6px; border-radius: 0 6px 6px 6px; /* 新增以下代码 */ display: block; opacity: 0; visibility: hidden; transform: translateX(10px); /* 0.3s是动画时长,3s是关闭延迟时间,可根据需求调整 */ transition: all 0.3s ease 3s; } .dropdown-submenu:hover>.dropdown-menu { /* 删除原来的display: block */ opacity: 1; visibility: visible; transform: translateX(0); /* 展开时无延迟,鼠标移入立即触发 */ transition-delay: 0s; } .dropdown-submenu>a:after { display: block; content: " "; float: right; width: 0; height: 0; border-color: transparent; border-style: solid; border-width: 5px 0 5px 5px; border-left-color: red; margin-top: 5px; margin-right: -10px; }
参数调整说明
- 要修改关闭延迟时长,调整
.dropdown-submenu>.dropdown-menu中transition属性的最后一个数值即可,比如改为2s就是鼠标移开后2秒再关闭菜单 - 要修改动画快慢,调整
transition属性里的0.3s,数值越大动画越平缓 - 不需要滑入效果可以删除所有
transform相关的代码,仅保留透明度动画即可
HTML部分不需要做任何修改,直接沿用你原来的代码即可正常运行。
内容的提问来源于stack exchange,提问作者TechnoCorner
相关产品推荐
相关产品推荐

