web-dev-qa-db-fra.com

Changer le texte avec une animation CSS3?

Sur mon site Web, je veux un en-tête qui apparaît et disparaît progressivement, puis avec un texte différent, puis en-dehors, puis redevenant normal (en boucle). Voici comment je voudrais que cela fonctionne:

h1 {
    font-size: 600%;
    animation-name: head;
    animation-duration: 4s;
    animation-iteration-count: infinite;
}
@keyframes head {
0% {font-size:600%; opacity:1;}
25% {font-size:570%; opacity:0;}
50% {font-size:600%; opacity:1;}
65% {font-size:570%; opacity:0;}
80% {font-size:600%; opacity:1; innerHtml="Changed Text"}
90% {font-size:570%; opacity:0;}
100% {font-size:600%;opacity:1; innerHtml="Original Text"}
}

Cependant, je n'ai trouvé aucun moyen de modifier le texte dans une animation CSS3. Est-ce possible?

7
user7548189

Vous pouvez le faire de deux manières. L'une consiste à faire gérer le contenu par un pseudo-élément. Cela signifie que le contenu affiché serait appliqué dans CSS. comme ça:

CSS

h1:before{
    content: 'Original Text';
    font-size: 600%;
    animation-name: head;
    animation-duration: 4s;
    animation-iteration-count: infinite;
}

@keyframes head {
    0% {font-size:600%; opacity:1;}
    25% {font-size:570%; opacity:0;}
    50% {font-size:600%; opacity:1;}
    65% {font-size:570%; opacity:0;}
    80% {font-size:600%; opacity:1; content: "Changed Text"}
    90% {font-size:570%; opacity:0;}
    100% {font-size:600%;opacity:1; content: "Original Text"}
}

Une autre façon de procéder consiste à avoir deux éléments dans le code HTML et à les basculer entre eux. Vous aurez besoin de deux animations pour travailler ensemble ou vous pourrez peut-être simplement décaler une animation, comme ceci:

HTML

<header>
    <h1 class="headtext" id="text1">Original Text</h1>
    <h1 class="headtext" id="text2">Changed Text</h1>
</header>

CSS

.headtext{
    font-size: 600%;
    animation-name: head;
    animation-duration: 4s;
    animation-iteration-count: infinite;
}

#text2{
    animation-delay: 2s;
}

@keyframes head {
    0% {font-size:600%; opacity:1;}
    50% {font-size:0; opacity:0;}
    100% {font-size:600%;opacity:1;}
}

J'ai réduit le font-size à 0 pour laisser la place à l'autre texte. Cet effet peut être différent de celui souhaité.

7
Donnie D'Amato

Il y a une heure, j'étais coincé avec la même question mais ma décision est la suivante. Je viens de coller une partie de mon propre code. Regardez ça les gars!

body {
	margin: 0;
	font-family: sans-serif;
}

#wrapper {
	background-color: #051E3E;
	height: 100vh;
	color: white;
	display: flex;
	justify-content: center;
	align-items: center;
}

#hi {
	animation: Pulse 5s;
}

@keyframes Pulse {
	0% {
	color: #051E3E;
	}
	10% {
		color: #051E3E;
	}
	30% {
		color: white;
	}
	50% {
		color: #051E3E;
	}
	60% {
		color: #051E3E;
	}
	80% {
		color: white;
	}
	100% {
		color: #051E3E;
	}
}

#hi:after {
	content: "";
	animation: spin 5s linear;
}

@keyframes spin {
  0% { content:"Hi"; }
  100% { content:"How do you like it?"; }
}
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
	
	<div id="wrapper">
		<p id="hi"></p>
	</div>
	
</body>
</html>

2
ross rykov