本によると、以下の例はメニューをフェードインおよびフェードアウトするはずですが、代わりにメニューがすぐに消えます。どういうわけか早すぎるのが問題だと思いますが、アニメーション  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);
});