我正在为我的历史项目制作一个网站,我遇到了一个问题。我试图为一个细节标签制作动画,但似乎没有任何效果。以下是我用于打开动画的代码:
@keyframes open {
0% {
opacity: 0;
transform: translateY(-1vw);
}
100% {
opacity: 1;
margin-left: 0px
}
}
details[open] summary~* {
animation: open .5s cubic-bezier(0.785, 0.135, 0.15, 0.86);
}
<details>
<summary>Cfare do te mesosh gjate ketij materiali:</summary>
<ul>
<li>
<p>Shqiperia gjate luftes se pare boterore</p>
</li>
<li>
<p>Shqiperia mes lufterave boterore</p>
</li>
<li>
<p>Shqiperia gjate luftes se dyte boterore</p>
</li>
</ul>
</details>
这基本上是一个简单的淡入动画,我很想做一个淡出以及!
先谢了!
1条答案
按热度按时间gajydyqb1#
我花了一段时间才弄明白,但这是一个有趣的问题。
当你 * 打开 * details元素时,它的内容-根据定义-变得可见。这就是为什么你应用的每个动画都是可见的。然而,当你 * 关闭 * details元素时,它的内容-根据定义-变得不可见,* 立即 。所以即使你尝试应用的每个动画实际上会发生,它也只是不可见。
所以我们需要告诉浏览器延迟隐藏元素,应用动画,然后才隐藏元素。让我们使用一些JS来完成这个任务。
我们需要捕捉用户何时切换details元素。 假设 *,相关事件应该是
toggle
。然而,这个事件只有在浏览器隐藏所有内容 * 之后 * 才触发。所以我们实际上将使用click
事件,它在隐藏发生 * 之前 * 触发。请注意,持续时间不保证是准确的,not in CSS和not in JS.这就是为什么我设置了JS超时比CSS动画持续时间(400 ms vs 500 ms)稍低一点,所以我们可以确保动画在我们隐藏元素后结束一点,所以我们不会得到任何 Flink .