CSS 5秒后自动隐藏元素

Posted

技术标签:

【中文标题】CSS 5秒后自动隐藏元素【英文标题】:CSS Auto hide elements after 5 seconds 【发布时间】:2014-03-26 11:07:59 【问题描述】:

是否可以在页面加载 5 秒后隐藏元素? 我知道有a jQuery solution。

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

有什么创新的想法吗?还是我要求超出 css 过渡/动画的限制?

【问题讨论】:

有可能,但我不建议这样做。为此使用 jQuery 或纯 JS。 这里有一个例子:jsbin.com/xofaq/1/edit?html,css,output我知道已经有答案了,但我也在这样做,孩子们把我带走了一段时间:) 感谢@balexandre,为您的评论+1。 【参考方案1】:

是的!

但是您不能以您可能立即想到的方式进行操作,因为您无法围绕您原本依赖的属性设置动画或创建过渡(例如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>

【讨论】:

不错!刚要推荐关键帧! +1! 为什么不对不透明度进行动画处理? opacity:1 到 0 它有效,但我有一个问题,在你的回答中,你只包括了@keyframe和@-webkit-keyframes,我想知道没有-moz和-o是否可以。只是另一个问题。我发现它只需等待 5 秒钟,然后立即隐藏元素而没有动画。我认为如果您在答案中也包含淡出过渡部分,那就太好了。 @Radian - 不透明度不会改变元素仍会占用空间的事实......只是不可见(jsfiddle.net/467bb) - 您可以看到灰色边框的 div 在 5 秒后不会在内容上折叠 太棒了!谢谢楼主!【参考方案2】:

根据@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 秒为 opacity 属性设置动画。 如果要更改长度,请务必进行数学运算,在这种情况下,5 秒的 90% 留给我们 0.5 秒的时间来为不透明度设置动画。

【讨论】:

我喜欢这个解决方案。有没有办法将它组合起来,让它淡出然后从 DOM 中移除? 如果你想从 DOM 中删除它,你需要使用一些 javascript。如果您的意思是从文档流中明显删除它,那么您可以使用上面提到设置 height: 0width: 0 的技术 - 但是它带有警告,因为当将高度从 0 更改为 100% 等时,它可能会导致跳跃效果,等等,同时还可以使用键盘使项目保持焦点。【参考方案3】:

当然可以,只需使用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.

【讨论】:

感谢您的回答,但我只是不想使用 javascript。如果我想使用 javascript 或 jQuery,我可以使用问题中包含的 jQuery 解决方案。还是谢谢。 请记住jQuery is not even remotely a synonym to Javascript。你要求一个不使用 jQuery 内置转换的解决方案,而我用纯 CSS 转换和一行通用 Javascript 给你一个答案。你从来没有问过没有JS的解决方案,所以答案是完整的。 @NielsKeurentjes 就像有人说没有 java 然后你给他们一个 GWT 解决方案。或者有人说没有 css,而你给出了一个 sass 解决方案。问题上的标签是 css,而不是 javascript 或 jquery。 Jquery 是 javascript 的同义词,因为它是一个围绕它的框架。 @snowe2010 不完全是。 SASS 意味着安装编译器。 GWT 意味着包括一个额外的库。 jQuery 意味着安装和加载一个额外的库。因此,我认为问题是如何仅使用普通浏览器中可用的方法来实现预期结果,这有点归结为 CSS 和纯 Javascript。这个答案中提供了这两种解决方案中最直接、最简单的解决方案。接受的答案很好,但imo不如这个干净。意见不同,答案本身并不错误。 @NielsKeurentjes 是的,只是他明确表示他知道有一个 jquery 解决方案并且他想要一个 css 解决方案。如果他知道有一个 jquery 解决方案,那么显然有一个 javascript 解决方案,因为 jquery 只是一个使 javascript 更容易的库。【参考方案4】:

为什么不试试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

【讨论】:

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

以上是关于CSS 5秒后自动隐藏元素的主要内容,如果未能解决你的问题,请参考以下文章

javascript 5秒后自动隐藏菜单demo

如何一一自动隐藏多个警报。先进先出?

animate.css动画初始状态隐藏

css Firefox自动隐藏AddonButton Dropmarker

如何在 React 中 2 秒内隐藏元素

《手把手教你》系列技巧篇(四十九)-java+ selenium自动化测试-隐藏元素定位与操作(详解教程)