我一直在尝试创建一种过渡效果,在悬停时,子菜单从主导航栏下方滑出。到目前为止,我已经掌握了所有元素,浪费了各种各样的帖子,但却无济于事。但是无济于事。
这是JSFiddle。
我猜我必须摆脱display: none -> display: block
隐藏子菜单的方式,因为它对过渡没有好处,但是其他各种方法,例如过渡max-height
,opacity
从一个巨大的top
值等下拉它已经失败了。使用膨胀的top
值方法,子菜单可以在所有内容上滑动而不是在下面,并且在将背景透明时,以某种方式更改z-index值会将其推到一切。非常奇怪的行为。
如果有人能向我解释如何为子菜单创建平滑的滑出过渡,我将不胜感激。
谢谢
答案 0 :(得分:1)
工作示例:
https://jsfiddle.net/6umr3733/1/
过程:我们将下拉列表的top
值设置为-100%。这使它脱离了屏幕。我们给它一个transition
值,使其在下降时保持平滑。
.dropdown_content {
line-height: 1;
position: absolute;
top:-100%;
background-color: #fff;
z-index:-10;
width: 120%;
left: -20%;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
transition: all 0.5s ease;
}
当我们将鼠标悬停在dropdown
上时,您的div会下降200%,即原来的位置。
.dropdown:hover .dropdown_content {
top:100%;
}
希望我能帮到你,祝你好运。
答案 1 :(得分:1)
您可以简单地使用transform: scaleY();
属性在隐藏时将子菜单压缩为0,在可见时将其压缩为1.
检查JSFiddle
只需删除Display
属性,然后添加transition
,transform: scaleY(0); transform-origin: 0 0;
何时正常; transform: scaleY(1);
则悬停至.dropdown_content
。
答案 2 :(得分:1)
转换比例或转换max-height: 0
是导航元素的更好选择。
如果元素的初始状态是“display:none”,它将在DOM中传递,这将隐藏辅助技术中的元素(以及任何子元素)。
此外,您可以使用sibling sectors选择.dropdown,而不是过度嵌套元素
相邻的兄弟姐妹:.dropbtn:hover + .dropdown_content