CSS如何使元素淡入然后淡出?

Posted

技术标签:

【中文标题】CSS如何使元素淡入然后淡出?【英文标题】:CSS how to make an element fade in and then fade out? 【发布时间】:2015-07-19 11:31:43 【问题描述】:

我可以通过使用以下 css 将其类更改为 .elementToFadeInAndOut 来使不透明度为零的元素淡入:

.elementToFadeInAndOut 
    opacity: 1;
    transition: opacity 2s linear;

有没有一种方法可以通过编辑同一类的 css 使元素在淡入后淡出?

【问题讨论】:

使用此链接中定义的 css 来切换所需元素的淡入和淡出类:css-tricks.com/snippets/css/… 【参考方案1】:

如果您需要单个淡入/淡出而无需明确的用户操作(如鼠标悬停/鼠标移出),您可以使用 CSS3 animation: http://codepen.io/anon/pen/bdEpwW

.elementToFadeInAndOut 

    animation: fadeinout 4s linear 1 forwards;




@keyframes fadeinout 
  0%  opacity: 0; 
  50%  opacity: 1; 
  100%  opacity: 0; 

通过设置animation-fill-mode: forwards,动画将保留其最后一个关键帧

通过设置animation-iteration-count: 1,动画将只运行一次(如果您需要多次重复效果,请更改此值)

【讨论】:

真的需要-webkit- 吗? 不是 2020 年,而是 2015 年【参考方案2】:

这样做的一种方法是将元素的颜色设置为黑色,然后像这样淡入背景颜色:

<style> 
p 
animation-name: example;
animation-duration: 2s;


@keyframes example 
from color:black;
to color:white;

</style>
<p>I am FADING!</p>

我希望这是你需要的!

【讨论】:

这不会淡出 我已经删除了我的反对票,但我不知道我是否会将原始帖子称为错误;通过从 display(不能动画或过渡)更改为 color(可以动画/过渡)[并且同样重要的是,添加了持续时间],你已经从根本上改变了答案。【参考方案3】:

我发现这个链接很有用:css-tricks fade-in fade-out css。

以下是 csstricks 帖子的摘要:

CSS 类:

.m-fadeOut 
  visibility: hidden;
  opacity: 0;
  transition: visibility 0s linear 300ms, opacity 300ms;

.m-fadeIn 
  visibility: visible;
  opacity: 1;
  transition: visibility 0s linear 0s, opacity 300ms;

在反应中:

toggle()
    if(true condition)
        this.setState(toggleClass: "m-fadeIn");
    else
        this.setState(toggleClass: "m-fadeOut");
    


render()
    return (<div className=this.state.toggleClass>Element to be toggled</div>)

【讨论】:

可见性的不同延迟偏移值是这里的关键。谢谢 这应该是最佳答案,因为这使得元素在淡出后实际上隐藏了。【参考方案4】:

使用 css @keyframes

.elementToFadeInAndOut 
    opacity: 1;
    animation: fade 2s linear;



@keyframes fade 
  0%,100%  opacity: 0 
  50%  opacity: 1 

这是一个演示

.elementToFadeInAndOut 
    width:200px;
    height: 200px;
    background: red;
    -webkit-animation: fadeinout 4s linear forwards;
    animation: fadeinout 4s linear forwards;


@-webkit-keyframes fadeinout 
  0%,100%  opacity: 0; 
  50%  opacity: 1; 


@keyframes fadeinout 
  0%,100%  opacity: 0; 
  50%  opacity: 1; 
&lt;div class=elementToFadeInAndOut&gt;&lt;/div&gt;

阅读:Using CSS animations

你可以这样清理代码:

.elementToFadeInAndOut 
    width:200px;
    height: 200px;
    background: red;
    -webkit-animation: fadeinout 4s linear forwards;
    animation: fadeinout 4s linear forwards;
    opacity: 0;


@-webkit-keyframes fadeinout 
  50%  opacity: 1; 


@keyframes fadeinout 
  50%  opacity: 1; 
&lt;div class=elementToFadeInAndOut&gt;&lt;/div&gt;

【讨论】:

添加 forwards 使元素在淡入淡出完成其循环后保持隐藏。太棒了。 请帮忙解决这个问题? ***.com/questions/61203327/…【参考方案5】:

试试这个:

@keyframes animationName 
  0%    opacity:0; 
  50%   opacity:1; 
  100%  opacity:0; 

@-o-keyframes animationName
  0%    opacity:0; 
  50%   opacity:1; 
  100%  opacity:0; 

@-moz-keyframes animationName
  0%    opacity:0; 
  50%   opacity:1; 
  100%  opacity:0; 

@-webkit-keyframes animationName
  0%    opacity:0; 
  50%   opacity:1; 
  100%  opacity:0; 
   
.elementToFadeInAndOut 
   -webkit-animation: animationName 5s infinite;
   -moz-animation: animationName 5s infinite;
   -o-animation: animationName 5s infinite;
    animation: animationName 5s infinite;

【讨论】:

以上是关于CSS如何使元素淡入然后淡出?的主要内容,如果未能解决你的问题,请参考以下文章

如何使标签快速淡入或淡出

CSS 最简洁hover事件的淡入淡出写法,且不占文档流位置!

淡入淡出/ css 类过渡发生乱序

CSS 过渡 - 仅在悬停时淡入淡出元素

css3 动画硬闪烁(帧之间没有淡入淡出)

如何使用 CSS 淡入新的 HTML 元素 [重复]