制作下拉菜单动画,如果我将最大高度设置为100%,则<ul>
只会将其高度扩展到第一个嵌套的<li>
。我可以将“关键帧”中的max-height
设置为400%,但这会使动画在其他下拉菜单中以更少的子菜单运行的速度快一倍。调试时,我将鼠标悬停在<ul>
之前的高度似乎是完整大小,不确定为什么它会在动画中受到限制。
作为第二个问题,我会使用这样的动画遇到浏览器支持问题吗?
JSFiddle
@keyframes slideDown {
0% {
max-height: 0%;
opacity: .2;
}
100% {
max-height: 400%;
opacity: 1;
}
}
#menuTabs {
float: left;
position: absolute;
margin-left: 0px;
background: #256AAA none repeat scroll 0% 0%;
width: 100%;
overflow: visible;
}
#menuTabs ul {
left: 50%;
margin: 0px;
clear: left;
float: left;
padding: 0px;
font-size: 15px;
position: relative;
text-align: center;
font-family: helvetica;
list-style: outside none none;
}
#menuTabs ul li {
margin:0;
padding:0;
right:50%;
float:left;
display:block;
list-style:none;
min-width: 170px;
max-width: 170px;
position:relative;
}
#menuTabs ul li a {
color:#000;
display:block;
background:#ddd;
padding:0px 50px;
line-height:1.3em;
text-decoration:none;
font-family:'Oxygen', sans-serif;
color: #FFF;
margin-top: 0px;
font-weight: bold;
padding: 15px 50px;
text-decoration: none;
background: #Blue;
}
#menuTabs ul li:hover > a {
visibility: visible;
text-decoration: none;
background: #CCC;
}
ul#menu li.selected a {
color: #000;
background-color: #fff;
}
#menuTabs ul li ul {
margin: 0;
padding: 0;
width: 100%;
visibility: hidden;
overflow: hidden;
position: absolute;
left: 0%;
max-height: 0%;
}
#menuTabs ul li ul a {
z-index: 1;
display: block;
font-size: 12px;
max-width: 70px;
min-width: 120px;
min-height: 22px;
overflow: visible;
position: relative;
padding: 14px 25px;
background: #256AAA none repeat scroll 0% 0%;
}
#menuTabs ul li ul a:hover {
background: #CCC;
}
#menuTabs ul li:hover ul {
visibility: visible;
position: absolute;
background: #CCC;
}
#menuTabs ul li:hover ul {
max-height: 0%;
animation-name: slideDown;
animation-duration: 2s;
animation-fill-mode: forwards;
}
#menuTabs ul li ul li {
left: 0%;
display: block;
}
<div id="menuTabs">
<ul id="menu">
<li><a href="#"> Services</a>
<ul id="class">
<li id="srv1"><a href="#"> SubMenu</a>
</li>
<li id="srv2"><a href="#"> SubMenu2</a>
</li>
</ul>
<li><a href="#">Resources</a>
<ul>
<li><a href="#"> SubMenu2</a></li>
<li><a href="#"> SubMenu3</a></li>
<li><a href="#"> SubMenu4</a></li>
<li><a href="#"> SubMenu5</a></li>
</ul>
</li>
</li>
</ul>
</div>
最佳答案
我可以通过使用transition
而不是keyframes
来做到这一点,它运行起来更流畅,更容易。我还没有找到一种方法来处理动态高度,所以我认为您必须选择一个高度,该高度应包含您可能拥有的最大物品数。
jsfiddle
#menuTabs ul li ul {
...
max-height: 0;
transition: all .1s ease-out;
opacity: .5;
}
#menuTabs ul li:hover ul {
...
max-height: 400%;
transition: all .25s ease-in;
opacity: 1;
}