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!