使用 CSS 过渡隐藏/显示带有 add/removeClass 的元素

Posted

技术标签:

【中文标题】使用 CSS 过渡隐藏/显示带有 add/removeClass 的元素【英文标题】:hide/show element with add/removeClass with CSS transition 【发布时间】:2015-05-23 15:09:04 【问题描述】:

我想用 CSS 过渡隐藏/显示带有 addClass 和 removeClass 函数动画的元素。 我尝试过这种方式,但是当我添加类时“活动”显示未显示。

.hidden 
  display: none;
  -webkit-transition: display .5s ease;
  -moz-transition: display .5s ease;
  -o-transition: display .5s ease;


.active 
  transition: display .5s ease;
  -webkit-transition: display .5s ease;
  -moz-transition: display .5s ease;
  -o-transition: display .5s ease;


#test 
  width: 100px;
  height: 40px;
  background: red;

-

$('#btn').on('click', function()
   $('#test').toggleClass('active');
);

-

<div id="test" class="hidden">Hallo!</div>
<input type="button" id="btn" value="show/hide">

jsfiddle

我该怎么做?谢谢

【问题讨论】:

您可以为不透明度设置动画,但不能为显示设置动画。您应该首先对不透明度进行动画处理,然后在动画结束时更改显示属性。 这可能也有帮助:***.com/questions/7302824 【参考方案1】:

我认为最好用 jquery 解决它,而不是 css 转换。如果你只是想显示和隐藏一个元素,你可以使用 jquery fadeIn 和 fadeOut 而无需任何 css 规则。

$('#btn').on('click', function()
   $('#test').fadeToggle("slow");
);

Here is the updated fiddle.

有关淡入淡出的更多信息,refer to this link。

【讨论】:

【参考方案2】:

您需要在 .active 类中添加一些 css 代码,将其放入 css 部分,这是更新后的fiddle:

display : block;

【讨论】:

您的解决方案,隐藏和显示 div 没有任何过渡。【参考方案3】:

您必须从 div 中删除现有的类 hidden,因为 hidden 没有 display none 会阻止它显示。 在 Button 的 onclick 里面的 JQuery 中添加这个。

 $('#test').removeClass('hidden');

【讨论】:

如果我删除隐藏类我没有过渡【参考方案4】:

这是使用 CSS 的另一种方式:

你想要的并不完美,但更接近:

.hidden 
    display:none;
     opacity:0;



.active 
    display: block;
    opacity:1;
  -webkit-animation-name: fadeIn;
-webkit-animation-duration: .5s;
animation-name: fadeIn;
animation-duration: .5s;


#test 
    width: 100px;
    height: 40px;
    background: red;


@-webkit-keyframes fadeIn 
0%  opacity: 0; 
20%  opacity: 0; 
40%  opacity: 0.3; 
60%  opacity: 0.5; 
80%  opacity: 0.9; 
100%  opacity: 1; 


@keyframes fadeIn 
0%  opacity: 0; 
20%  opacity: 0; 
40%  opacity: 0.3; 
60%  opacity: 0.5; 
80%  opacity: 0.9; 
100%  opacity: 1; 

查看Fiddle.

希望它会有所帮助。

【讨论】:

【参考方案5】:

试试这个:

$('#btn').on('click',function()
var class= $('#test').attr('class').trim();
if(class === "hidden")

 $('#test').removeClass('hidden');
 $('#test').addClass('active');

else

 $('#test').removeClass('active');
 $('#test').addClass('hidden');

);

【讨论】:

【参考方案6】:

不用这么长的css也能达到同样的效果

你所要做的就是添加一个jquery

$('#btn').on('click', function () 
    $("#test").fadeToggle("slow", "linear")
);

检查这个fiddle

【讨论】:

【参考方案7】:

这个帖子有点晚了,但这可能很有用。您无法转换显示,但您可以转换 z-index。因此,在 CSS 中,将要显示的元素设置为不透明度 0,并将 z-index 设置为 -1,这样无论显示值如何,它都不会显示。当你想显示元素时,添加一个过渡到不透明度 1 和 z-index > 0 的类:

例如:

#myElement 
    z-index: -1;
    opacity:0;
    transition: all 2s;

#myElement.showme
    z-index: 99;
    opacity:0;
    transition: all 2s;

显示/隐藏它使用javascript添加或删除类showme(下面的jQuery):

$('#myElement').addClass('showme');  // fade myElement in
...
$('#myElement').removeClass('showme'); // fade out myElement 

【讨论】:

#myElement.showme 你的意思是opacity:1,不是吗?

以上是关于使用 CSS 过渡隐藏/显示带有 add/removeClass 的元素的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI - addClass removeClass - CSS 值被卡住

寻求一种优雅的、纯 CSS 的方法来隐藏/显示自动高度内容(带过渡)

CSS3 过渡不适用于显示属性 [重复]

如果元素开始隐藏,css 过渡不起作用

CSS 过渡无法正常工作

图像边界半径在 css 过渡期间不起作用