98 votes

Empêcher la transition CSS de se déclencher au chargement de la page

Je rencontre un problème avec le CSS transition qui est déclenchée au chargement de la page.

Le problème est que lorsque j'applique un color transition à un élément, (ex : transition: color .2s ) puis, lors du premier chargement de la page, mes éléments passent du noir à leur propre couleur.

Supposons que j'ai le code suivant :

CSS

p.green {
   color: green;
   transition: color .2s;
   -moz-transition: color .2s;
   -webkit-transition: color .2s;
   -o-transition: color .2s;
}

p.green:hover {
   color: yellow;
}

HTML

<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN'
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    <script src="js/main.js"></script>
    <link href="css/main.css" rel="stylesheet" />
</head>
<body>
    <p class="green">The Flashing Text</p>
</body>
</html>

Au chargement de la page, mon p.green s'effacera de black a green .

Je ne veux pas appliquer la transition de couleur à l'image. :hover pseudo classe car cela ne permettrait pas d'appliquer la transition onMouseLeave .

C'est vraiment ennuyeux d'avoir le texte qui clignote sur la page web. Jusqu'à présent, j'ai évité d'utiliser les transitions, sauf si j'en ai vraiment besoin, et même dans ce cas, je les utilise avec précaution. Ce serait génial s'il y avait une solution vraiment évidente à ce problème que je ne vois pas !

Cela se produit sur Google Chrome. Je n'ai pas testé dans d'autres navigateurs.

jsfiddle.net/ShyZp/2 (merci @Shmiddty)

5voto

DR01D Points 700

La meilleure façon de résoudre ce problème est d'utiliser l'espace unique, vide. <script> trouvé dans les réponses de cette page. Cependant, j'ai trouvé deux autres façons de résoudre ce problème.

  1. Placez le CSS de l'élément ou des éléments incriminés à l'intérieur d'un champ <style> dans l'en-tête de votre fichier HTML. Le bogue ne se produit que lorsque le CSS est appelé à partir d'une feuille de style externe.
  2. Placez le ou les éléments incriminés dans un fichier flexbox conteneur. Cela corrige également le bogue.

3voto

Gal Talmor Points 69

Ce sujet a également été abordé ici : http://css-tricks.com/transitions-only-after-page-load/

3voto

aria T Points 79

Vous pouvez simplement ajouter une balise vide script à votre fichier html.

Comme ça :

<script type="text/javascript"></script>

mais il doit comporter au moins un caractère. Soit un espace, soit une nouvelle ligne ( \n ) ou commentaire (//) ou autre

<script type="text/javascript"> </script>

<script type="text/javascript">
</script>

<script type="text/javascript">//</script>

Ou simplement lier un fichier js à votre fichier html.

<script type="text/javascript" src="js/script.js"></script>

Vous pouvez placer la balise script où vous voulez. Dans le tête o corps étiquette.

Ce problème ne se produit qu'au cours du développement, car la situation finale d'un site Web comportera certainement un fichier js.

-2voto

Banath Points 256

Avez-vous essayé d'utiliser différentes propriétés de transition ? Par exemple :

-moz-transition: color .2s; /* Firefox 4 */
-webkit-transition: color .2s; /* Safari and Chrome */
-o-transition: color .2s; /* Opera */

Cela a bien fonctionné pour moi dans Chrome.

EDIT : Vous avez déjà répondu à la question sur les navigateurs. Tu devrais essayer d'utiliser -webkit-transform

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X