Эффект наведения фона текста CSS странно ведет себя при наведении курсора мыши

Я реализовал эффект наведения на элемент h1 (см. Код и перо ниже), но эффект странно ведет себя при отключении мыши и как бы мерцает, прежде чем вернуться в исходное состояние.

Есть идеи, как заставить его вернуться к исходному цвету так же плавно, как он исчезает при наведении?

Заранее спасибо.

https://codepen.io/lobodemon/pen/YOXKNJ

h1 {
  transition: 0.5s;
}

h1:hover {
  background: linear-gradient(-45deg, #EE7752, #E73C7E, #23A6D5, #23D5AB);
  background-size: 400% 400%;
  color:transparent;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-animation: Gradient 15s ease infinite;
  -moz-animation: Gradient 15s ease infinite;
  animation: Gradient 15s ease infinite;
}

@-webkit-keyframes Gradient {
    0%, 100% {
        background-position: 0 50%
    }
    50% {
        background-position: 100% 50%
    }
}

@-moz-keyframes Gradient {
    0%, 100% {
        background-position: 0 50%
    }
    50% {
        background-position: 100% 50%
    }
}

@keyframes Gradient {
    0%, 100% {
        background-position: 0 50%
    }
    50% {
        background-position: 100% 50%
    }
}
<h1>The Title</h1>
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
5
0
107
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Когда вы работаете с переходом, вам необходимо установить начальное состояние свойств элемента, которые вы собираетесь изменить.

h1 {
  background: black;
  -webkit-background-clip: text;
  background-clip: text;
}

Я также нашел интересный пример с таким же эффектом, как и ваш. https://codepen.io/anthony-liddle/pen/uFoxA

Я не уверен, как это отвечает на вопрос и почему он получил 2 положительных голоса?

Temani Afif 22.08.2018 16:07

Спасибо за ответ - хотя в приведенном вами примере кажется, что фон просто перемещается при наведении курсора, а не добавляется / удаляется. Также установка начальных значений на h1, похоже, не имела никакого эффекта :(

Adam Lobo 22.08.2018 16:35
Ответ принят как подходящий

Проблема в том, что вы пытаетесь объединить анимацию с переходом, но это не сработает так, как вы ожидаете. Добавляя переход, вы не сделаете анимацию плавной. Другими словами, в анимацию нельзя добавить переход.

Поскольку вы сделали продолжительность анимации 15s при наведении, я не думаю, что в этом случае требуется бесконечность, потому что никто не будет зависать дольше, чем 15s, поэтому вы можете изменить это на переход, и он будет плавным.

Я добавил черный цвет к градиенту, чтобы получить наше начальное состояние, затем с переходом мы можем сделать половину начальной анимации, и в конце у вас будет продолжительность 7s, которой почему-то достаточно для эффекта наведения:

h1 {
  transition: 7s;
  background: 
    linear-gradient(-45deg, #EE7752, #E73C7E, #23A6D5, #23D5AB,#000);
  background-size: 400% 400%;
  color:transparent;
  -webkit-background-clip: text;
  background-clip: text;
  background-position: 0 0;
}

h1:hover {
  background-position: 100% 50%;
  
}
<h1>The Title</h1>

Другие вопросы по теме