Est-il possible d'animer des pseudo-classes CSS?
Dis que j'ai:
#foo:after {
content: '';
width: 200px;
height: 200px;
background: red;
display: block;
-webkit-transition: all 1s ease-in-out;
-moz-transition: all 1s ease-in-out;
-o-transition: all 1s ease-in-out;
}
#foo:hover:after {
width: 250px;
height: 250px;
}
Est-ce seulement possible? J'ai testé et jusqu'à présent, je n'arrive pas à trouver de solution. J'essaie de réduire la quantité de support JavaScript dont j'ai besoin en utilisant Modernizr.
J'ai déjà une méthode JavaScript, veuillez donc pas d'alternatives JavaScript.
Démo : http://jsfiddle.net/MxTvw/
Votre violon fonctionne pour moi dans Firefox. Et pour autant que je sache, et si cet article est à jour c'est le seul navigateur capable d'animer des pseudo-éléments.
[~ # ~] modifier [~ # ~] : depuis 2016, le lien vers l'article est rompu et le bogue WebKit pertinent était fixe il y a 4 ans . Lisez la suite pour voir d'autres réponses, celle-ci est obsolète.
Google Chrome a ajouté le correctif de bogue webkit à la version 27.0.1453.110 m
Ce bogue WebKit a été corrigé: http://trac.webkit.org/changeset/138632
IT IS POSSIBLE pour animer la pseudo :before
et :after
, voici quelques exemples d'animation des éléments pseudo :before
et :after
.
Voici une modification de votre exemple ci-dessus avec quelques modifications, qui le rendent plus fluide et plus animé sans le délai simulé de mouseleave
/mouseout
au survol:
http://jsfiddle.net/MxTvw/234/
Essayez d'ajouter le sélecteur principal #foo
avec le groupe :hover
pseudo-classe dans votre deuxième :hover
règle de pseudo-classe. Ajoutez également la propriété transition
, et pas seulement les propriétés préfixées spécifiques au fournisseur pour transition
:
#foo:after{
display: block;
content: '';
width: 200px;
height: 200px;
background: red;
-webkit-transition: all .4s ease-in-out;
-moz-transition: all .4s ease-in-out;
-o-transition: all .4s ease-in-out;
transition: all .4s ease-in-out;
}
#foo,
#foo:hover:after,
#foo:hover:before{
width: 250px;
height: 250px;
}
Notez qu'à l'avenir, tout pseudo-élément comme :before
et :after
doit utiliser la syntaxe à deux points ::before
et ::after
. Cet exemple simule un fondu entrant et sortant à l'aide d'une superposition background-color
et un background-image
En vol stationnaire:
http://jsfiddle.net/MxTvw/233/
Cet exemple simule une animation de rotation en survol:
Bien sûr, pour aller de l'avant avec les normes CSS3, nous pourrions utiliser ::before
et ::after
.
Cela fonctionne dans les derniers Firefox, Chrome, Safari, Opera 18+, IE10, IE11 (IE9 et inférieur ne le font pas prendre en charge les transitions css3 ou animer.)
Cela ne semble pas fonctionner maintenant, cependant selon les spécifications W vous pouvez appliquer des transitions aux pseudo-éléments. Peut-être dans le futur…