我有一个CSS动画的div幻灯片后,一组时间。我想要的是一些div来填充滑动的动画div的空间,然后它会将这些元素推到页面下方。
当我第一次尝试这个div时,即使它不可见,它仍然会占用空间。如果我将div更改为display:none
,则div根本不会滑入。
我如何让一个div不占用空间,直到它被计时进来(使用CSS计时)。
我使用Animate.css的动画。
代码如下:
<div id="main-div" class="animated fadeInDownBig"><!-- Content --></div>
<div id="div1"><!-- Content --></div>
<div id="div2"><!-- Content --></div>
<div id="div3"><!-- Content --></div>
如代码所示,我希望主div被隐藏,而其他div首先显示。然后我有以下延迟集:
#main-div{
-moz-animation-delay: 3.5s;
-webkit-animation-delay: 3.5s;
-o-animation-delay: 3.5s;
animation-delay: 3.5s;
}
正是在这一点上,我希望主div推下其他div,因为它进来。
我该怎么做?
注意:我曾考虑过使用jQuery来实现这一点,但我更喜欢严格使用CSS,因为它更流畅,时间控制得更好。
编辑
我已经尝试了Duopixel的建议,但要么我误解了,没有正确地这样做,要么它不起作用。下面是代码:
HTML
<div id="main-div" class="animated fadeInDownBig"><!-- Content --></div>
CSS
#main-image{
height: 0;
overflow: hidden;
-moz-animation-delay: 3.5s;
-webkit-animation-delay: 3.5s;
-o-animation-delay: 3.5s;
animation-delay: 3.5s;
}
#main-image.fadeInDownBig{
height: 375px;
}
9条答案
按热度按时间z8dt9xmd1#
CSS(或jQuery)不能在
display: none;
和display: block;
之间进行动画。更糟糕的是:它不能在height: 0
和height: auto
之间进行动画。所以你需要硬编码高度(如果你不能硬编码的值,那么你需要使用JavaScript,但这是一个完全不同的问题);你提到你正在使用Animate.css,我不熟悉,所以这是一个香草CSS。
你可以在这里看到一个demo:http://jsfiddle.net/duopixel/qD5XX/
sdnqo3pr2#
现在已经有很多答案了,但以下是我的解决方案:
我使用
opacity: 0
和visibility: hidden
。为了确保在动画之前设置visibility
,我们必须设置正确的延迟。我使用http://lesshat.com来简化演示,如果不使用这个,只需添加浏览器前缀。
(e.g.
-webkit-transition-duration: 0, 200ms;
)因此,只要您将类
hidden
添加到元素中,它就会淡出。vatpfxk53#
我遇到了同样的问题,因为只要
display: x;
处于动画中,它就不会动画。我最终创建了自定义关键帧,首先更改
display
值,然后更改其他值。可能给予更好的解决方案。或者,不使用
display: none;
,而使用position: absolute; visibility: hidden;
。d4so4syb4#
您可以使用
max-height
实现纯CSS您可能还必须将
padding
、margin
和border
设置为0,或者仅设置为padding-top
、padding-bottom
、margin-top
和margin-bottom
。我在这里更新了Duopixel的演示:http://jsfiddle.net/qD5XX/231/
tgabmvqs5#
下面的代码将让您在以下情况下为元素设置动画
1.显示-无
1.显示-块
CSS
JavaScript
7hiiyaii6#
当设置高度动画(从0到auto)时,使用
transform: scaleY(0);
是另一种有用的隐藏元素的方法,而不是display: none;
:rpppsulh7#
我如何让一个div不占用空间,直到它被计时进来(使用CSS计时)。
这是我对同一问题的解决方案。
此外,我在加载另一个幻灯片的最后一帧上有一个
onclick
,并且在最后一帧可见之前不能单击。基本上我的解决方案是使用
scale(0.001)
保持div
1像素高,在需要时缩放它。如果您不喜欢缩放效果,可以在缩放幻灯片后将opacity
恢复为1。为了字节的缘故,其他关键帧将被删除。请忽略奇怪的编码,它是由php脚本从数组中拾取值并str_替换模板:我懒得在100多个div的幻灯片中为每个专有前缀重新输入所有内容。
i7uq4tfw8#
我也有同样的问题,解决了把所有的东西都放在一个div里,加上position:relative和added position:absolute,top:0,left:0到每个子div。在你的情况下,它会像:
xesrikrc9#
2023年,使用CSS和Inline JS (Vanilla,没有jQuery等...)
可以使用CSS过渡,而不是使用以下命令编写动画关键帧序列:
通用技术:
<div>
上使用2个类display: block;
突变后直接开始转换:setTimeout()
,1ms
延迟***或***requestAnimationFrame()
display: none;
:setTimeout()
与transition-duration
* 通过getComputedStyle()
*HTML Outline with Inline JS
说明
通过使用
setTimeout()
和1ms
延迟或requestAnimationFrame()
添加.show
,块首先被添加到DOM,并且能够在过渡开始时使用0不透明度(等等)进行绘制,允许过渡在步骤2中发生,由.show
触发。requestAnimationFrame()
在setTimeout()
的Chrome和Edge中同样有效,但在Firefox中则不然;setTimeout()
带有1ms
延迟 *,感觉像黑客 ,在所有3个中工作,并镜像display: none;
。我只使用当前的浏览器(2023)进行了测试,但预计 *
setTimeout()
hack 应该适用于许多旧的浏览器,因为您更改为旧的JS语法而不是const
和箭头(=>
)函数。