2017-02-01 2 views
1

Дизайн, с которым я работаю, включает в себя кнопку наведения, которая заполняет кнопку цветом. Над этим текст, который в начальном состоянии имеет тот же цвет, что и заполнение. По мере продолжения заливки цвет текста изменяется на контрастный цвет, но плавно. Вот еще из видео дизайнер дал мне, что иллюстрирует проблему:Есть ли способ плавно анимировать цвет текста при наведении?

enter image description here

Вы можете увидеть на букву «а», что это два разных цвета. Поэтому я не могу изменить цвет текста по буквам.

Есть ли какой-либо метод (JS/JQuery/что-то/CSS) для достижения этого? Я не думаю, но, может быть, есть какой-то способ оживить резкий градиент по тексту? Я не знаю.

+0

Вы не можете анимировать CSS градиенты ... – TricksfortheWeb

+0

AFAIK, вы не можете ударить текста письма, кроме первого для некоторых вещей. – dandavis

+0

Только что нашел это: https://css-tricks.com/how-to-do-knockout-text/. Поэтому я мог бы попробовать что-то в этом направлении. –

ответ

8

Я на самом деле сделал что-то подобное для другого вопроса некоторое время назад.

Этого можно достичь с помощью mix-blend-mode. Я также замедлил время до 5s, чтобы вы могли четко видеть, как это работает. Измените это на 0.25s или независимо от ваших потребностей при использовании.

a { 
 
    position: relative; 
 
    text-decoration: none; 
 
    display: inline-block; 
 
    padding: 15px 30px; 
 
    border: 3px solid #f16251; 
 
    background: white; 
 
    color: black; 
 
    font-size: 30px; 
 
    font-family: arial; 
 
    mix-blend-mode: normal; 
 
    overflow:hidden; 
 
    z-index: 1; 
 
} 
 

 
a:before { 
 
    content: ''; 
 
    position: absolute; 
 
    top: 0; bottom: 0; right: 0; 
 
    width: 100%; height: 100%; 
 
    background: white; 
 
    mix-blend-mode: difference; 
 
    transform-origin:0 0 ; 
 
    transform:translateX(100%); 
 
    transition: transform 5s; 
 
    z-index: 3; 
 
} 
 
a:hover:before { 
 
    transform: translateX(0); 
 
} 
 

 
a:after{ 
 
    content: ''; 
 
    display:block; 
 
    top: 0; 
 
    left:0; 
 
    bottom:0; 
 
    right:0; 
 
    position: absolute; 
 
    z-index: 100; 
 
    background: #f16251; 
 
    mix-blend-mode: screen; 
 
}
<a href="#" class="btn">WoOoOoOoT</a>

+0

это действительно гладкий. отлично сработано! – Snowmonkey

+0

@Snowmonkey большое спасибо, это была настоящая боль, чтобы понять. Тем более, что другой OP попросил, чтобы это было сделано без дополнительной разметки html. –

+0

Ницца! Но похоже, что это может быть в IE: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode проверит это, хотя :-) –