单击时反转CSS3动画

时间:2013-10-28 18:25:35

标签: javascript jquery html css css3

根据一本书,下面的例子应该是淡入和淡出菜单,但是菜单会立即消失。我认为问题是display: none过早生效,但我不确定,因为它在动画中说display: block

我可以做些什么来让灰色div淡出而不是消失?仅使用CSS用于动画的解决方案将是优选的。

CSS

a {
    color: white;
    text-align: center;
}

.bar {
    height: 20px;
    background: red;
}

.div {
    background: silver;
    padding: 10px;
}

@-webkit-keyframes fade {
  0% {
    opacity: 0;
    display: block;
  }

  100% {
    opacity: 1;
    display: block;
  }
}

@keyframes fade {
  0% {
    opacity: 0;
    display: block;
  }

  100% {
    opacity: 1;
    display: block;
  }
}

.hidden {
    display: none;
    -webkit-animation: fade 2s reverse;
    animation: fade 2s reverse;
}

.shown {
    display: block;
    -webkit-animation: fade 2s;
    animation: fade 2s;
}

HTML

<div class="bar">
    <a href="#" class="click">Click Me</a>
    <div class="div shown">
        <p>Hello</p>
    </div>
</div>

的jQuery

$(function() {
    $div = $(".div");

    var menu = function () {
        if ( $div.hasClass("shown")) {
            $div.removeClass("shown");
            $div.addClass("hidden");
        } else {
            $div.removeClass("hidden");
            $div.addClass("shown");
        }

    }

    menu();

    $(".click").bind("click", menu);

});

小提琴:http://jsfiddle.net/hFdbt/1/

2 个答案:

答案 0 :(得分:2)

正如我在评论中所说,你可能还会使用jquery。

的jQuery

$(".click").on("click", function() {
    $(".div").fadeToggle("slow");
});

HTML

<div class="bar">
    <a href="#" class="click">Click Me</a>
    <div class="div shown">
        <p>Hello</p>
    </div>
</div>

的CSS

a {
    color: white;
    text-align: center;
}

.bar {
    height: 20px;
    background: red;
}

.div {
    background: silver;
    padding: 10px;
    display: none;
}

新小提琴:http://jsfiddle.net/QvpS3/

答案 1 :(得分:0)

由于你无法在显示元素上进行转换(将其视为布尔值或枚举,除了&#34; true&#34;和&#34; false&#34;之外什么也没有,因为没有真的.5),你必须使用其他一些方法来隐藏元素。

在此fiddlehttp://jsfiddle.net/3n1gm4/Q5TBN/)中,我使用max-height属性和overflow: hidden以及transition来设置延迟。

.hidden {
    -webkit-animation: fade 2s reverse;
    animation: fade 2s reverse;

    -webkit-transition: 0s all 2s; /* delay this the duration of the animation */
    transition-delay: 0s all 2s;
    max-height: 0;
    padding: 0;

    overflow: hidden;

}

.shown {
    -webkit-animation: fade 2s;
    animation: fade 2s;
    max-height: 5000px; /* some number way bigger than it will ever be to avoid clipping */
}

信用:Transitions on the display: property