css - 在css中单击时动画li标签
问题描述
告诉我为什么代码不起作用,我hachu点击动画li标签,动画一个接一个,持续3秒
#menu #sm-menu:checked~.menu2 li {
animation: menu 1.5s;
animation-fill-mode: forwards;
}
@keyframes menu {
from {
transform: translateY(0px);
}
to {
transform: translateY(300px);
}
}
#menu .menu2 ul li:nth-child(2) {
animation-delay: .3s;
}
#menu .menu2 ul li:nth-child(3) {
animation-delay: .6s;
}
#menu .menu2 ul li:nth-child(4) {
animation-delay: .9s;
}
#menu .menu2 ul li:nth-child(5) {
animation-delay: 1.2s;
}
<div class="menu" id="menu">
<a href=""><i>fas</i></a>
<input type="checkbox" id="sm-menu">
<div class="sm-menu"><label for="sm-menu"><i>fa</i>fas</label></div>
<nav class="menu2">
<ul>
<li><a href="#">menu1</a></li>
<li><a href="#">menu2</a></li>
<li><a href="#">menu3</a>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</li>
<li><a href="#">menu4</a></li>
<li><a href="#">menu5</a></li>
</ul>
</nav>
</div>
解决方案
问题在于CSS 特异性。
此规则的选择器
#menu #sm-menu:checked~.menu2 li {
animation: menu 1.5s;
animation-fill-mode: forwards;
}
比这个 强
#menu .menu2 ul li:nth-child(2) {
animation-delay: .3s;
}
所以它会覆盖它,并在以下规则中 使用速记animation
属性覆盖。animation-delay
你有两个解决方案:
- 更好的一个:像这样使下面的规则更强大(你的 CSS 的改进版本):
#sm-menu:checked~.menu2 li {
animation: menu 1.5s;
animation-fill-mode: forwards;
}
@keyframes menu {
from {
transform: translateY(0px);
}
to {
transform: translateY(300px);
}
}
#menu .menu2 li:nth-child(2) {
animation-delay: .3s;
}
#menu .menu2 ul li:nth-child(3) {
animation-delay: .6s;
}
#menu .menu2 ul li:nth-child(4) {
animation-delay: .9s;
}
#menu .menu2 ul li:nth-child(5) {
animation-delay: 1.2s;
}
- 第二个粗略的方法是使用
!important
规则,这是一个例外,它会覆盖任何其他像这样的选择器。
注意:最好尽可能使用简洁的选择器。
推荐阅读
- logging - kube-scheduler 产生巨大的日志文件
- java - 如何使用流从具有条件的对象列表中获取子列表,例如对象的对象属性之和小于或等于阈值?
- python - 这段代码有什么问题?我收到名称错误
- python - 使用 QtWebdriver 选择一个 QComboBox
- java - 带有 RecyclerView 的自定义对话框不显示确定取消按钮
- hive - 如何在蜂巢中选择炸弹?
- android - 在个人资料图像上设置个人资料编辑图标
- javascript - 如何创建一个显示日期的滑块,有没有办法根据滑块的位置使标记出现在网站上?
- java - 运行 JAR 文件需要 JAXB
- z3 - 如果我在(get-model)之后标记它?