#css #css-transitions #css-animations #background-color
#css #css-переходы #css-анимации #background-color
Вопрос:
У меня есть элементы с разными background-color
именами. При нажатии на ссылку я хочу выделить элемент другим цветом (желтым), а затем вернуться к исходному цвету элемента. Я знаю, что есть 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>
Комментарии:
1. Если бы когда-нибудь было время, когда «просто используйте jQuery» было допустимым … 🙂
2. Но, о! радость работы с нулевыми внешними библиотеками!
Ответ №1:
Просто не включайте to
для анимации. Это работает, потому что, если конечное (или начальное) состояние не определено, браузер будет использовать существующие стили элемента (ПОВТОРНО: допустимые списки ключевых кадров в 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>
Ответ №2:
Другой вариант — использовать 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>
Комментарии:
1. О, мне нравится эта идея. Похоже, что это не работает в IE 11.
Ответ №3:
если вы просто удалите 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>