J'ai des éléments avec différentes background-color s. Lorsqu'un lien est cliqué, je souhaite mettre en évidence l'élément avec une couleur différente (jaune), puis revenir à la couleur d'origine de l'élément. Je sais qu'il y a currentColor pour la couleur d'un élément, mais il n'y a rien de similaire pour background-color .
Comment puis-je en douceur passer d'une couleur de surbrillance à la couleur d'arrière-plan d'origine de l'élément? À l'heure actuelle, il passe de la couleur de surbrillance à transparent, puis revient brusquement à la couleur d'origine lorsque l'animation se termine.
<ul>
<li>
<a href="#link1">Link #1</a>
</li>
<li>
<a href="#link2">Link #2</a>
</li>
<li>
<a href="#link3">Link #3</a>
</li>
</ul>
<table>
<tr id="link1">
<td>This is Link #1</td><td>// Fine.</td>
</tr>
<tr id="link2">
<td bgcolor="orange">This is Link #2</td><td>// Ugly.</td>
</tr>
<tr id="link3">
<td bgcolor="red">This is Link #3</td><td>// Ugly.</td>
</tr>
</table>
:target td {
animation: highlight 1s;
}
@keyframes highlight {
from {
background-color: yellow;
}
to {
/* How do I set this back to the element's original background-color? */
background-color: transparent;
}
}
3 Réponses :
N'incluez simplement pas de à pour l'animation. Cela fonctionne car si un état de fin (ou de début) n'est pas défini, le navigateur utilisera les styles existants de l'élément (RE: Listes d'images clés valides sur MDN )
<ul>
<li>
<a href="#link1">Link #1</a>
</li>
<li>
<a href="#link2">Link #2</a>
</li>
<li>
<a href="#link3">Link #3</a>
</li>
</ul>
<table>
<tr id="link1">
<td>This is Link #1</td><td>// Fine.</td>
</tr>
<tr id="link2">
<td bgcolor="orange">This is Link #2</td><td>// Ugly.</td>
</tr>
<tr id="link3">
<td bgcolor="red">This is Link #3</td><td>// Ugly.</td>
</tr>
</table>
div {
margin: 200px 0;
}
:target td {
animation: highlight 1s;
}
@keyframes highlight {
from {
background-color: yellow;
}
}
si vous supprimez simplement à des images clés, la couleur d'arrière-plan attribuée sera utilisée.
pour le comprendre, lisez cette section de mdn doc https://developer.mozilla.org/en-US / docs / Web / CSS / @ keyframes # Valid_keyframe_lists
<ul>
<li>
<a href="#link1">Link #1</a>
</li>
<li>
<a href="#link2">Link #2</a>
</li>
<li>
<a href="#link3">Link #3</a>
</li>
</ul>
<table>
<tr id="link1">
<td>This is Link #1</td><td>// Fine.</td>
</tr>
<tr id="link2">
<td bgcolor="orange">This is Link #2</td><td>// Ugly.</td>
</tr>
<tr id="link3">
<td bgcolor="red">This is Link #3</td><td>// Ugly.</td>
</tr>
</table>
div {
margin: 200px 0;
}
:target td {
animation: highlight 2s;
}
@keyframes highlight {
from {
background-color: yellow;
}
}
Une autre option consiste à utiliser background-color: initial sur 50% de l'animation - voir la démo ci-dessous:
<ul>
<li>
<a href="#link1">Link #1</a>
</li>
<li>
<a href="#link2">Link #2</a>
</li>
<li>
<a href="#link3">Link #3</a>
</li>
</ul>
<table>
<tr id="link1">
<td>This is Link #1</td><td>// Fine.</td>
</tr>
<tr id="link2">
<td bgcolor="orange">This is Link #2</td><td>// Ugly.</td>
</tr>
<tr id="link3">
<td bgcolor="red">This is Link #3</td><td>// Ugly.</td>
</tr>
</table>
div {
margin: 200px 0;
}
:target td {
animation: highlight 2s;
}
@keyframes highlight {
0% {
background-color: yellow;
}
50% {
background-color: initial;
}
}
Ooh, j'aime cette idée. On dirait que cela ne fonctionne pas dans IE 11.
S'il y avait un moment où "juste utiliser jQuery" était valide… :)
Mais, oh! les joies de travailler avec zéro bibliothèque externe!