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)

133voto

spencer.sm Points 6262

Il existe un bug dans Chrome qui fait en sorte que les transitions CSS se déclenchent si la page comprend un fichier <form> élément.

Une solution simple consiste à ajouter une balise script contenant un espace unique au pied de page.

<script> </script>

Vous pouvez suivre le bug à l'adresse suivante https://crbug.com/332189 y https://crbug.com/167083 .

53voto

nienn Points 620

Les commentaires de @Shmiddty sur cette question m'ont fait réfléchir, j'ai donc joué avec le code et j'ai trouvé une solution.

Le problème se situe au niveau de la header déclarations. En inversant l'ordre des appels aux fichiers externes CSS et JS - c'est-à-dire en plaçant le CSS avant le JS - les transitions de couleur cessent de se déclencher au chargement de la page :

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link href="css/main.css" rel="stylesheet" />
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    <script src="js/main.js"></script>
</head>

Je pense que le chargement du JS a retardé le chargement du CSS jusqu'à ce que le DOM soit prêt. À ce moment-là (comme @Shmiddty l'a suggéré), la couleur par défaut du navigateur avait déjà été attribuée au texte, qui utilisait alors mon CSS. transition déclaration pour s'estomper dans sa couleur stylisée.

** Je ne suis toujours pas sûr que ce soit la manière la plus appropriée de le faire, mais ça marche. Si quelqu'un a une meilleure solution, n'hésitez pas à l'ajouter ou à la modifier.

16voto

Roman Pushkin Points 1492

Ajoutez à votre CSS :

.css-transitions-only-after-page-load * {
  -webkit-transition: none !important;
  -moz-transition: none !important;
  -ms-transition: none !important;
  -o-transition: none !important;
  transition: none !important;
}

Et ajoutez du code à votre fichier JavaScript global :

$(document).ready(function () {
    $(".css-transitions-only-after-page-load").each(function (index, element) {
        setTimeout(function () { $(element).removeClass("css-transitions-only-after-page-load") }, 10);
    });
});

Maintenant, vous pouvez marquer n'importe quel élément sur votre page avec css-transitions-only-after-page-load classe :

<div class="container css-transitions-only-after-page-load">
...
</div>

7voto

Lando Points 333

Nienn affiche la solution . Le problème se situe au niveau de l'en-tête du document et de la manière dont vous chargez vos feuilles de style. C'est similaire au "impossible de modifier les en-têtes, ils sont déjà envoyés" en PHP, sauf que HTML/CSS/webkit ne vous envoie pas d'erreur.

Je rencontrais exactement le même problème, j'ai lu le post de Nienn, et j'ai revu ma tête. Voici ce que je contenais auparavant.

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <html lang="en">
    <meta name="description" content="A website for me to do whatever I want with." >
    <title>My title</title>
    <link rel="stylesheet" type="text/css" href="http://stackoverflow.com/mD/media/foot.css">
    <link rel="stylesheet" href="mD/media/head.css" type="text/css">
</head>

Remarquez que je ne charge pas de JS, et aussi que je chargeais la page des feuilles de style après avoir spécifié le titre. Après avoir déplacé les références de la feuille de style vers le 'back', ça a marché comme sur des roulettes. Le résultat final ressemble à ceci :

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <html lang="en">
    <meta name="description" content="A website for me to do whatever I want with." >
    <link rel="stylesheet" type="text/css" href="http://stackoverflow.com/mD/media/foot.css">
    <link rel="stylesheet" href="mD/media/head.css" type="text/css">
    <title>My title</title>
</head>

Ce n'est pas seulement le javascript qui peut causer ce problème, mais aussi le titre du site. Je pense qu'une bonne règle de base est css > js > titre du site.

6voto

Manuszep Points 639

La réponse acceptée n'a pas fait l'affaire pour moi. Il y a un bug dans Google Chrome qui peut être évité simplement en ajouter un script dans la page . Même un script vide résout le problème.

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