制作向下滑动菜单动画,如果我将最大高度设置为100%,<ul>
只会将其高度扩展到第一个嵌套<li>
。我可以将关键帧中的max-height
设置为400%,但这会导致动画在其他下拉菜单中的速度提高两倍,且子菜单更少。我在悬停之前<ul>
的高度似乎是调试时的完整大小,不确定为什么它在动画中受限制。
作为次要问题,我会使用这样的动画遇到浏览器支持问题吗?
@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>
答案 0 :(得分:1)
我只需使用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;
}