CSS自动隐藏5秒后的元素

Alf*_*red 42 css animation transition

是否可以在页面加载后5秒隐藏元素?我知道有一个jQuery解决方案.

我想做同样的事情,但希望通过CSS过渡获得相同的结果.

任何创新的想法?或者我是否超出了css过渡/动画的限制?

SW4*_*SW4 75

是!

但你不能以你可能立刻想到的方式去做,因为你无法动画或围绕你原本依赖的属性创建一个过渡(例如display,或改变尺寸和设置overflow:hidden)以正确隐藏元素和防止它占用可见空间.

因此,为相关元素创建动画,并visibility:hidden;在5秒后切换,同时还将高度和宽度设置为零,以防止元素仍然占用DOM流中的空间.

小提琴

CSS

html, body {
    height:100%;
    width:100%;
    margin:0;
    padding:0;
}
#hideMe {
    -moz-animation: cssAnimation 0s ease-in 5s forwards;
    /* Firefox */
    -webkit-animation: cssAnimation 0s ease-in 5s forwards;
    /* Safari and Chrome */
    -o-animation: cssAnimation 0s ease-in 5s forwards;
    /* Opera */
    animation: cssAnimation 0s ease-in 5s forwards;
    -webkit-animation-fill-mode: forwards;
    animation-fill-mode: forwards;
}
@keyframes cssAnimation {
    to {
        width:0;
        height:0;
        overflow:hidden;
    }
}
@-webkit-keyframes cssAnimation {
    to {
        width:0;
        height:0;
        visibility:hidden;
    }
}
Run Code Online (Sandbox Code Playgroud)

HTML

<div id='hideMe'>Wait for it...</div>
Run Code Online (Sandbox Code Playgroud)

  • @Radian - 不透明度不会改变元素仍会占用空间的事实......只是不可见(http://jsfiddle.net/467bb/) - 你可以看到灰色边框div在5s之后没有崩溃内容 (4认同)

小智 8

根据@ SW4的答案,您还可以在末尾添加一些动画。

body > div{
    border:1px solid grey;
}
html, body, #container {
    height:100%;
    width:100%;
    margin:0;
    padding:0;
}
#container {
    overflow:hidden;
    position:relative;
}
#hideMe {
    -webkit-animation: cssAnimation 5s forwards; 
    animation: cssAnimation 5s forwards;
}
@keyframes cssAnimation {
    0%   {opacity: 1;}
    90%  {opacity: 1;}
    100% {opacity: 0;}
}
@-webkit-keyframes cssAnimation {
    0%   {opacity: 1;}
    90%  {opacity: 1;}
    100% {opacity: 0;}
}
Run Code Online (Sandbox Code Playgroud)
<div>
<div id='container'>
    <div id='hideMe'>Wait for it...</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)

剩下的0.5秒使不透明度属性动起来。如果要更改长度,只需确保进行数学计算,在这种情况下,5秒的90%会使我们剩下0.5秒来设置不透明度的动画。

  • 我喜欢这个解决方案。有没有一种方法可以合并它,使其淡出然后从DOM中删除? (2认同)
  • 如果您想将其从 DOM 中删除,您需要使用一些 JavaScript。如果您的意思是从文档流中明显删除它,那么您可以使用上面提到的设置“高度:0”和“宽度:0”的技术 - 但是它有一些警告,因为当将高度从 0 更改为 100 时,它可能会导致跳跃效果% 等,同时还可以使用键盘使项目处于可聚焦状态。 (2认同)

Nie*_*jes 6

当然你可以,只是setTimeout用来改变一个类或什么来触发过渡.

HTML:

<p id="aap">OHAI!</p>
Run Code Online (Sandbox Code Playgroud)

CSS:

p {
    opacity:1;
    transition:opacity 500ms;
}
p.waa {
    opacity:0;
}
Run Code Online (Sandbox Code Playgroud)

JS在加载或DOMContentReady上运行:

setTimeout(function(){
    document.getElementById('aap').className = 'waa';
}, 5000);
Run Code Online (Sandbox Code Playgroud)

这里举例说明.

  • @NielsKeurentjes就像有人说没有java然后你给他们一个GWT解决方案.或者有人说没有css,你给了sass解决方案.问题上的标签是css,而不是javascript或jquery.Jquery与javascript是同义词,因为它是一个围绕它的框架. (8认同)
  • 请记住[jQuery甚至不是Javascript的同义词](http://meta.stackexchange.com/a/19492/219504).你问过一个不使用jQuery内置转换的解决方案,我给你一个纯CSS转换和一行通用Javascript的答案.你从来没有要求没有JS的解决方案,因此答案就完成了. (3认同)
  • @NielsKeurentjes是的,除了他明确表示他知道有一个jquery解决方案,他想要一个css解决方案.如果他知道有一个jquery解决方案,那么显然有一个javascript解决方案,因为jquery只是一个使javascript更容易的库. (3认同)
  • 谢谢你的回答,但我只想不使用javascript.如果我想使用javascript或jQuery,我可能会使用我的问题中包含的jQuery解决方案.不管怎么说,还是要谢谢你. (2认同)