4 способа анимировать цвет текстовой ссылки при наведении

4 способа анимировать цвет текстовой ссылки при наведении

От автора: давайте создадим эффект на чистом CSS, который меняет цвет текстовой ссылки при наведении… но цвет будет меняться постепенно, а не сразу.

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

4 способа анимировать цвет текстовой ссылки при наведении

Техника 1: Использование background-clip: text

На момент написания статьи background-clip: text — это экспериментальная функция, которая не поддерживается в Internet Explorer 11 и ниже.

Этот метод включает создание убирающегося текста с резким переходом градиента. Разметка состоит из одного HTML-элемента ссылки (<a>) для создания гиперссылки:

Мы можем начать добавлять стили к гиперссылке. Использование overflow: hidden обрезает во время перехода при наведении любой контент за пределами гиперссылки:

Нам нужно будет использовать линейный градиент с резким переходом на 50% от начального цвета ссылки к цвету при наведении:

Давайте используем background-clip, чтобы обрезать градиент и значение text для отображения текста. Мы также будем использовать свойства background-size и background-position для отображения исходного цвета:

Наконец, давайте добавим для гиперссылки свойство CSS transition и псевдо-класс CSS :hover. Чтобы ссылка окрашивалась при наведении слева направо, используйте свойство background-position:

Несмотря на то, что этот метод обеспечивает эффект наведения, Safari и Chrome будут обрезать оформление текста и тени, то есть они не будут отображаться. Применение стилей текста, таких как подчеркивание, с помощью свойства CSS text-decor не будет работать. Возможно, вам придется использовать другие подходы при создании подчеркиваний.

Техника 2: Использование width/height

Это работает благодаря использованию атрибута данных, содержащего тот же текст, что и в теге <a>, и установке width (окрашивание текста слева направо или справа налево) или height (окрашивание текста сверху вниз или снизу вверх), от 0% до 100% при наведении.

Вот разметка:

CSS похож на тот, что мы использовали в предыдущей технике, минус свойства CSS background. Здесь будет использоваться свойство text-decoration:

Теперь нам нужно использовать контент из атрибута data-content. Он будет расположен над содержимым в теге <a>. Мы используем небольшую хитрость: копируем текст в атрибуте данных и отображаем его через функцию attr() в свойстве content псевдо-элемента ::before.

Чтобы текст не переносился на следующую строку, будет применяться white-space: nowrap. Чтобы изменить цвет заливки ссылки, задайте значение для свойства CSS color, используя псевдо-элемент ::before и при значении width, начинающемся с 0:

Увеличьте ширину псевдо-элемента ::before до 100% , чтобы завершить эффект наведения:

Хотя в этом методе используется трюк, свойства width или height не дают производительный переход CSS. Лучше всего использовать для достижения плавного перехода либо свойство transform, либо opacity со скоростью 60 кадров в секунду.

Использование свойства CSS text-decoration может позволить отображать различные стили подчеркивания при переходе. Я создал иллюстрирующую это демонстрацию, используя следующую технику: свойство CSS clip-path.

Техника 3: Использование clip-path

Для этой техники мы будем использовать свойство CSS clip-path с многоугольной фигурой. Многоугольник будет иметь четыре вершины, две из которых будут смещаться вправо при наведении:

4 способа анимировать цвет текстовой ссылки при наведении

Разметка такая же, как и в предыдущем методе. Мы снова будем использовать псевдо-элемент ::before, но CSS будет другим:

В отличие от предыдущих методов, text-decoration: underline должен быть объявлен для псевдо-элемента ::before с цветом заливки подчеркивания при наведении курсора. Теперь давайте рассмотрим CSS для техники clip-path:

Вершины многоугольника свойства clip-path устанавливаются в процентах, чтобы определить координаты в следующем порядке:

0 0 = вверху слева

0 0 = вверху справа

100% 0 = внизу справа

0 100% = внизу слева

Направление эффекта заливки можно скорректировать, изменив координаты. Теперь, когда у нас есть представление о координатах, мы можем заставить многоугольник расширяться вправо при наведении:

Этот метод работает довольно хорошо, но обратите внимание, что поддержка свойства clip-path зависит от браузера. Создание CSS-перехода с помощью clip-path — лучшая альтернатива, чем использование метода width/ height; однако, это действительно влияет на отрисовку браузером.

Техника 4: Использование преобразования

Разметка для этого метода использует метод маскировки с элементом span. Поскольку мы будем использовать дублированный контент в отдельном элементе, мы зададим для него aria-hidden=»true» для улучшения доступности — это скроет его от программ чтения с экрана, чтобы контент не читался дважды:

CSS для элемента span содержит переход, который будет начинаться слева:

Далее нам нужно заставить span смещаться вправо вот так:

4 способа анимировать цвет текстовой ссылки при наведении

Для этого мы будем использовать функцию CSS translateX() и установим для нее значение 0:

Затем мы используем для span псевдо-элемент ::before, снова указав атрибут data-content, как мы делали ранее. Мы установим позицию, переместив ее на 100% вдоль оси x.

Как и для элемента span, для позиции псевдо-элемента ::before также будет установлено translateX(0):

Несмотря на то, что этот метод является наиболее совместимым с различными браузерами, для него требуется больше разметки и CSS. Тем не менее, использование свойства CSS transform очень полезно для производительности, поскольку не вызывает перерисовок и, следовательно, обеспечивает плавные переходы CSS со скоростью 60 кадров в секунду.

Мы это сделали!

Мы только что рассмотрели четыре различных метода для достижения одинакового эффекта. Хотя у каждого есть свои плюсы и минусы, вы можете видеть, что все они работают. Это аккуратный эффект, который делает ссылки более интерактивными.

Автор: Katherine Kato

Источник: //css-tricks.com

Редакция: Команда webformyself.

Метки:

Похожие статьи:

Комментарии Вконтакте: