提问人:Alim Gölcük 提问时间:12/8/2022 更新时间:12/9/2022 访问量:122
如何在没有Jquery的情况下在CSS Flexbox中创建可点击的动画下拉列表?
How to create a clickable animated dropdown in CSS Flexbox without Jquery?
问:
我有几个一个接一个的锚标签,你可以看到,当我点击其中一个时,一个div会出现在它下面,如下所示:
HTML、CSS 和 JS 代码:
[HTML全文]
我刚刚得到了第一个锚标签,其他的都是一样的。
<div class="category2">
<a href="#" class="items2" id="itemOne">
Elektrikli El Aletleri
</a>
<div class="subCategory" id="subListOne">
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
</div>
...
</div>
CSS的
.category2 {
flex-direction: column;
display:none;
}
@media screen and (max-width:1220px) {
.category2 {
display: flex;
}
.category2 > a {
height: 50px;
}
}
.items2 {
border:1px solid white;
background-color: black;
color: white;
display: flex;
justify-content: center;
align-items: center;
border-radius: 20px;
font-size:20px;
}
.subCategory {
flex-direction: column;
background-color: darkslategrey;
display: none;
}
通过单击ID为“itemOne”的锚标记,将此“.active”类添加到“.subCategory”旁边。因此,div 变得可见。
.active {
display:flex
}
JS系列
let itemOne = document.getElementById('itemOne');
let subListOne = document.getElementById('subListOne');
itemOne.addEventListener('click', () => {
subListOne.classList.toggle('active');
})
我想做的是将这个事件动画化。我想让 div 在几毫秒内向下滑动。顺便说一句,当我这样做时,我想保护这个 div 的显示作为 flex。
首先,我尝试使用 height 属性来执行此操作,因此而不是
.subCategory {
flex-direction: column;
background-color: darkslategrey;
display: none;
}
我做到了:
.subCategory {
flex-direction: column;
background-color: darkslategrey;
display: flex;
height:0px;
transition: all 0.7s ease
}
“.active”是:
.active {
height:"auto";
}
但它没有成功。
任何帮助将不胜感激。提前致谢。
答:
0赞
daniel
12/8/2022
#1
使用 max-height 属性而不是 height。将 subCategory 的溢出设置为隐藏。然后将其初始 max-height 设置为 0。
然后,在悬停或聚焦时,您将最大高度设置为一个大且不可能的数字,例如 9999px。
<div class="category2" tabindex="1">
<a href="#" class="items2" id="itemOne">
Elektrikli El Aletleri
</a>
<div class="subCategory" id="subListOne">
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
</div>
</div>
.category2 {
flex-direction: column;
display: flex;
}
@media screen and (max-width:1220px) {
.category2 {
display: flex;
}
.category2 > a {
height: 50px;
}
}
.items2 {
border:1px solid white;
background-color: black;
color: white;
display: flex;
justify-content: center;
align-items: center;
border-radius: 20px;
font-size:20px;
}
.subCategory {
flex-direction: column;
background-color: darkslategrey;
transition: .5s ease-in-out;
max-height: 0;
overflow: hidden;
}
.category2:hover .subCategory{
max-height: 999px;
}
看看我在这里做了什么
0赞
Gerard
12/8/2022
#2
您可以对属性进行动画处理max-height
let itemOne = document.getElementById('itemOne');
let subListOne = document.getElementById('subListOne');
itemOne.addEventListener('click', () => {
subListOne.classList.toggle('active');
})
.category2 {
display: flex;
flex-direction: column;
}
.category2>a {
height: 50px;
}
.items2 {
border: 1px solid white;
background-color: black;
color: white;
display: flex;
justify-content: center;
align-items: center;
border-radius: 20px;
font-size: 20px;
}
.subCategory {
flex-direction: column;
background-color: darkslategrey;
display: flex;
max-height: 0px;
overflow: hidden;
transition: max-height 0.7s ease
}
.subCategory > a {
color: white;
text-decoration: none;
}
.active {
max-height: 400px;
}
<div class="category2">
<a href="#" class="items2" id="itemOne">Elektrikli El Aletleri</a>
<div class="subCategory" id="subListOne">
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
<a href="#">Lorem ipsum dolor sit.</a>
</div>
</div>
评论
0赞
Alim Gölcük
12/9/2022
但是在第一次点击时,动画不会像第二次点击那样发生。第一个直接打开。@Gerard
0赞
Gerard
12/9/2022
@AlimGölcük Aplologies。我已经适应了课堂.9999像素影响了动画。max-height
active
0赞
Alim Gölcük
12/9/2022
有没有办法解决这个问题?@Gerard
0赞
Gerard
12/9/2022
@AlimGölcük 立即运行代码。我相信它在更改后可以正常工作。
0赞
Alim Gölcük
12/9/2022
是的,在你的第一条评论之后,我已经尝试过了。但我想我们不能以动态的方式处理它。因为随着 div 内容的越大,高度可能还不够,我们必须始终手动更改它。@Gerard
评论