Transition CSS sur un masqué initialement elemement

Je voudrais faire une transition css sur un élément qui a display: none ensemble. Considérons le code suivant:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>CSS Transition From Hidden</title>

        <style type="text/css">
            div {
                -webkit-transition-property: all;
                -webkit-transition-duration: 2s;
            }       

            div.hidden {
                display: none;
                opacity: 0;
            }    

            div.from {
                opacity: 0;
            }
        </style>     

        <script type="text/javascript">
            function loaded() {
                var e = document.getElementById("foo");
                e.className = "from";
                window.webkitRequestAnimationFrame(function(t) {
                    e.className = null;
                });
            }
        </script>
    </head>
    <body onload="loaded()">
        <div id="foo" class="hidden">
            My test div
        </div>
    </body>
</html>

Je voudrais aller de class="div.hidden" à class="", c'est à dire à partir de display: none; opacity: 0; à display: block; opacity: 1; Cependant, en chrome (au moins) un objet qui a display: none ne pas les animer. L'élément va à la fin de l'état immédiatement.

Mon travail autour de ce problème consiste à définir l'élément à display: block; opacity: 0; et ensuite faire la transition dans l'image suivante (à l'aide de requestAnimationFrame(). Il est un peu maladroite, et je ne trouve aucune explication pour ce comportement dans le spec. Je sais que je pourrais utiliser le visibility-attribut, mais je ne veux pas l'utiliser parce que je ne veux pas à la disposition de l'élément masqué.

Donc, les questions sont: Est-ce le bon comportement ou un bug? Si c'est le bon comportement, est-il une meilleure façon d'écrire le code? Notez que je ne suis pas de demander s'il y a des bibliothèques qui peuvent le faire, je veux savoir si il ya une meilleure façon de le faire directement sur le DOM.

OriginalL'auteur Tobias Ritzau | 2012-11-19