如何制作流畅的下拉菜单 { 最好用 css3 或带解释的小 JS 行 }
How to make smooth slide down menu { Preferably by css3 or little JS lines with explanation }
我需要在没有 javascript/jquery 的情况下制作下拉菜单,或者从他们那里一点一点地制作,我试图避免使用 js,因为我是这方面的初学者。
我一直在尝试 Css3 来完成这件事,在多次失败后我通过动画实现了它但是在设置动画延迟 属性 时它仍然存在一些错误并且有代码:
* {
list-style-type: none;
text-decoration: none;
}
body {
margin: 0;
padding: 0;
}
nav {
margin: 0;
padding: 0;
}
nav > ul {
margin: 0px auto;
padding: 0;
text-align: center
}
nav > ul > li {
display: inline-block;
position: relative
}
nav > ul > li > a {
display: block;
width: 100px;
height: 30px;
background-color: #7f8c8d;
color: #fff;
padding-top: 10px
}
/* ANIMATE UL TO SLIDE DOWN WHEN HOVER */
nav > ul > li > ul {
margin: 0;
padding: 0;
height: auto;
overflow: hidden;
visibility: hidden;
position: absolute;
animation-name: slideUp;
animation-duration: 150ms;
animation-direction: alternate;
animation-fill-mode: forwards;
animation-timing-function: linear;
transition: all 3s ease;
}
nav > ul > li:hover > ul {
animation-name: slideDown;
visibility: visible;
animation-duration: 1s;
animation-direction: alternate;
animation-fill-mode: backwards;
animation-timing-function: linear;
}
@keyframes slideDown {
from {
height: 0px
}
to {
height: 200px
}
}
@keyframes slideUp {
from {
height: 200px
}
to {
height: 1px
}
}
/* END ANIMATION */
nav > ul > li > ul > li {
position: relative;
display: block;
box-sizing: border-box;
margin-top: 1px
}
nav > ul > li > ul > li > a {
display: inline-block;
width: 100px;
height: 30px;
padding-top: 10px;
background: #bdc3c7;
color: #000
}
<body>
<nav>
<ul>
<li>
<a href="#">Menu li</a>
<ul>
<li class="sub"><a href="#">sub</a>
</li>
<li class="sub"><a href="#">sub</a>
</li>
<li class="sub"><a href="#">sub</a>
</li>
<li class="sub"><a href="#">sub</a>
</li>
</ul>
</li>
<li>
<a href="#">Menu li</a>
<ul>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
</ul>
</li>
<li>
<a href="#">Menu li</a>
<ul>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
</ul>
</li>
<li>
<a href="#">Menu li</a>
</li>
<li>
<a href="#">Menu li</a>
</li>
</ul>
</nav>
</body>
有一个code没有设置延迟
这是在设置动画延迟时 属性 codepin
提前致谢。
我只是删除了您的一些 css,从而减少了错误。此类任务不需要高级动画属性。
这些是我更改的属性:
nav > ul > li > ul {
margin: 0;
padding: 0;
position: absolute;
overflow: hidden;
transition: all 3s ease;
height: 0;
}
nav > ul > li:hover > ul {
height: 200px;
}
我需要在没有 javascript/jquery 的情况下制作下拉菜单,或者从他们那里一点一点地制作,我试图避免使用 js,因为我是这方面的初学者。
我一直在尝试 Css3 来完成这件事,在多次失败后我通过动画实现了它但是在设置动画延迟 属性 时它仍然存在一些错误并且有代码:
* {
list-style-type: none;
text-decoration: none;
}
body {
margin: 0;
padding: 0;
}
nav {
margin: 0;
padding: 0;
}
nav > ul {
margin: 0px auto;
padding: 0;
text-align: center
}
nav > ul > li {
display: inline-block;
position: relative
}
nav > ul > li > a {
display: block;
width: 100px;
height: 30px;
background-color: #7f8c8d;
color: #fff;
padding-top: 10px
}
/* ANIMATE UL TO SLIDE DOWN WHEN HOVER */
nav > ul > li > ul {
margin: 0;
padding: 0;
height: auto;
overflow: hidden;
visibility: hidden;
position: absolute;
animation-name: slideUp;
animation-duration: 150ms;
animation-direction: alternate;
animation-fill-mode: forwards;
animation-timing-function: linear;
transition: all 3s ease;
}
nav > ul > li:hover > ul {
animation-name: slideDown;
visibility: visible;
animation-duration: 1s;
animation-direction: alternate;
animation-fill-mode: backwards;
animation-timing-function: linear;
}
@keyframes slideDown {
from {
height: 0px
}
to {
height: 200px
}
}
@keyframes slideUp {
from {
height: 200px
}
to {
height: 1px
}
}
/* END ANIMATION */
nav > ul > li > ul > li {
position: relative;
display: block;
box-sizing: border-box;
margin-top: 1px
}
nav > ul > li > ul > li > a {
display: inline-block;
width: 100px;
height: 30px;
padding-top: 10px;
background: #bdc3c7;
color: #000
}
<body>
<nav>
<ul>
<li>
<a href="#">Menu li</a>
<ul>
<li class="sub"><a href="#">sub</a>
</li>
<li class="sub"><a href="#">sub</a>
</li>
<li class="sub"><a href="#">sub</a>
</li>
<li class="sub"><a href="#">sub</a>
</li>
</ul>
</li>
<li>
<a href="#">Menu li</a>
<ul>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
</ul>
</li>
<li>
<a href="#">Menu li</a>
<ul>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
<li><a href="#">sub</a>
</li>
</ul>
</li>
<li>
<a href="#">Menu li</a>
</li>
<li>
<a href="#">Menu li</a>
</li>
</ul>
</nav>
</body>
有一个code没有设置延迟
这是在设置动画延迟时 属性 codepin
提前致谢。
我只是删除了您的一些 css,从而减少了错误。此类任务不需要高级动画属性。
这些是我更改的属性:
nav > ul > li > ul {
margin: 0;
padding: 0;
position: absolute;
overflow: hidden;
transition: all 3s ease;
height: 0;
}
nav > ul > li:hover > ul {
height: 200px;
}