CSS转换同步

时间:2013-11-29 20:23:17

标签: css css3

你有一个打开的菜单:悬停。
当我徘徊到下一个元素时,它会等待一点 我希望两个过渡同时产生手风琴效果。

我错过了什么?

Fiddle

CSS

ul {
    border:2px solid #aaf;
    overflow:hidden;
}
li {
    max-height:0px;
    -webkit-transition: max-height 1s;
    -moz-transition: max-height 1s;
    transition: max-height 1s;
}
ul:hover li {
    max-height:500px;
}

HTML

<ul class="menu">Alpha
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
</ul>
<ul class="menu">Beta
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
</ul>
<ul class="menu">Gamma
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
</ul>

1 个答案:

答案 0 :(得分:15)

没有时间延迟,两者都在同一时间发生。

问题在于你正在对max-height进行更改,除此之外,还有很大的价值。

因此,当它增长时的转换非常快(因为像素/秒很高),但是很快。

缩小的过渡开始于中间,但在500px - 16px间隔(或任何你真正的高度)中是不可见的,然后快速发生,但(显然)延迟。

你可以:

a)过渡高度而不是最大高度

b)将最大高度设置得更接近您期望的更高的高度

可能性存在失去灵活性的问题。您的li不再具有根据其属性计算的高度,而是您修复的高度。然而,使用ems可以做得更好,例如身高:1.2em;左右。

关于max-height过渡发生的事情。让我们说悬停状态设置为max-height:100px;我的浏览器的高度为18.9像素。 (并且您不希望通过max-height修改。

现在,假设您将在1秒内达到max-height:0px。转换是根据这些值计算的(没有别的!)。这使得在0.5秒时,过渡的一半已经过去,并且最大高度为50px。高度自然仍然是18.9像素。

当0.7秒通过时,最大高度为30px,高度为18.9像素。

从高度到最大高度没有反馈可用于修改max-height的初始值和最终值。