У меня есть элементы с разными background-colors. При нажатии на ссылку я хочу выделить элемент другим цветом (желтым), а затем вернуться к исходному цвету элемента. Я знаю, что для элемента currentColor есть color, но для background-color нет ничего подобного.
Как я могу плавно перейти от цвета выделения обратно к исходному цвету элемента background-color? Прямо сейчас цвет подсветки меняется на прозрачный, а затем резко возвращается к исходному цвету, когда анимация заканчивается.
: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;
}
}<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>Но, о! радости работы с нулевыми внешними библиотеками!






Только не добавляйте to к анимации. Это работает, потому что если конечное (или начальное) состояние не определено, браузер будет использовать существующие стили элемента (RE: Допустимые списки ключевых кадров на MDN)
div {
margin: 200px 0;
}
:target td {
animation: highlight 1s;
}
@keyframes highlight {
from {
background-color: yellow;
}
}<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>если вы просто удалите to из ключевых кадров, он примет назначенный цвет фона.
чтобы понять это, прочитайте этот раздел mdn doc https://developer.mozilla.org/en-US/docs/Web/CSS/@keyframes#Valid_keyframe_lists
div {
margin: 200px 0;
}
:target td {
animation: highlight 2s;
}
@keyframes highlight {
from {
background-color: yellow;
}
}<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>Другой вариант — использовать background-color: initial на 50% анимации — см. демо ниже:
div {
margin: 200px 0;
}
:target td {
animation: highlight 2s;
}
@keyframes highlight {
0% {
background-color: yellow;
}
50% {
background-color: initial;
}
}<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>О, мне нравится эта идея. Однако похоже, что это не работает в IE 11.
Если бы когда-нибудь было время, когда «просто используйте jQuery» было бы правильным… :)