2014-02-24 164 views
26

页面加载后5秒是否可以隐藏元素?我知道有a jQuery solutionCSS 5秒后自动隐藏元素

我想做同样的事情,但希望能得到与CSS转换相同的结果。

任何创新的想法?还是我问超出css过渡/动画的限制?

+0

这是可能的,但我不会推荐这样做。使用jQuery或纯JS的。 –

+1

这里是一个例子:http://jsbin.com/xofaq/1/edit?html,css,output 我知道这里已经有了答案,但我也是这么做的,孩子们把我带走了一段时间:) – balexandre

+0

感谢@ balexandre,+1的评论。 – Alfred

回答

49

是的!

但你不能做到这一点你可能马上会想到的办法,因为你不能动画或创建周围的特性的过渡否则你依靠(如display,或改变尺寸和设置overflow:hidden)在为了正确隐藏元素并防止它占据可见空间。

因此,请为有问题的元素创建动画,并在5秒钟后简单地切换visibility:hidden;,同时将高度和宽度设置为零,以防止元素仍占用DOM流中的空间。

FIDDLE

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; 
    } 
} 

HTML

<div id='hideMe'>Wait for it...</div> 
+0

不错!正准备推荐关键帧! +1! – Albzi

+0

你为什么不使不透明度变成动画?'opacity:1' to 0 – Radian

+0

它的工作原理,但我有一个问题,在你的回答中,你只包括@keyframe和@ -webkit-keyframes,我想知道没有-moz和-o是否可以。还有一个问题。我发现它只需等待5秒钟,并立即隐藏该元素而无需动画。如果您在回答中包含淡出转场部分,我认为这会很好。 – Alfred

4

当然你也可以,只要使用setTimeout改变类或某事触发过渡。

HTML:

<p id="aap">OHAI!</p> 

CSS:

p { 
    opacity:1; 
    transition:opacity 500ms; 
} 
p.waa { 
    opacity:0; 
} 

JS对负载或DOMContentReady运行:

setTimeout(function(){ 
    document.getElementById('aap').className = 'waa'; 
}, 5000); 

Example fiddle here

+0

感谢您的回答,但我只是不想使用JavaScript。如果我希望使用JavaScript或jQuery,我可能会使用我在我的问题中包含的jQuery解决方案。不管怎么说,还是要谢谢你。 – Alfred

+3

请记住,[jQuery甚至不是远程Javascript的同义词](http://meta.stackexchange.com/a/19492/219504)。你问过一个不使用jQuery内建转换的解决方案,我给你一个纯CSS转换和一行通用Javascript的答案。你从来没有要求没有JS的解决方案,答案就这样完成了。 –

+0

投票只是为了让人们意识到,jQuery!= JS – msaad

0

为什么不试试fadeOut

$(document).ready(function() { 
 
    $('#plsme').fadeOut(5000); // 5 seconds x 1000 milisec = 5000 milisec 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div id='plsme'>Loading... Please Wait</div>

淡出(使用Javascript纯):

How to make fadeOut effect with pure JavaScript

+1

问题是关于使用CSS,而不是JavaScript! – Mushfiq

1

从@ 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;} 
 
}
<div> 
 
<div id='container'> 
 
    <div id='hideMe'>Wait for it...</div> 
 
</div> 
 
</div>

使剩余的0.5秒到动画的不透明度属性。 只要确保在改变长度的情况下进行数学运算,在这种情况下,5秒钟的90%会让我们在0.5秒内为不透明度设置动画。

+0

我喜欢这个解决方案。有没有一种方法可以将它结合起来,然后淡出并从DOM中移除它? –