Подборка эффектов при наведении на текст пригодиться для украшения сайта, а так же чтобы выделить нужные элементы, например, подчеркивание текста, заголовков, выделение цветом и многое другое.
При наведении на текст меняется цвет CSS
Эффект изменения цвета при наведении необходим, когда нужно выделить определенный фрагмент текста или абзац. Этот эффект так же подойдет и для ссылки.
Пример
HTML
<p class="change-text">Lorem Ipsum</p>
p.change-text{
color: #f66d52; /* Цвет текста */
font-size: 2em; /* Размер текста */
font-weight: bold;
padding: 20px 0px;
text-transform: uppercase;
line-height: 1;
-webkit-transition: all 0.5s ease;
transition: all 0.5s ease;
}
p.change-text:hover{
color: #5265f6; /* Меняем цвет текста */
}
Зачеркнутый текст CSS
Эффект при наведении с зачеркнутым текстом подойдет для того, чтобы выделить фрагмент текста или обратить внимание пользователя на него. Цвет текста
и линии одинаковый.
Пример
HTML
<p class="line-through">Lorem Ipsum</p>
CSS
p.line-through{
color: #f66d52; /* Цвет текста */
font-weight: 400;
text-transform: uppercase;
font-size: 1em;
text-decoration:none;
}
p.line-through:hover{
text-decoration:line-through; /* Добавляем зачеркивание */
}
Зачеркнутая ссылка или текст при наведении другим цветом CSS
Эффект зачеркивания ссылки при наведении пригодится, когда ссылку нужно выделить в тексте, а также для меню на сайте. Такой эффект также можно применить и к тексту. Цвет зачёркивающей линии можно менять по своему усмотрению.
Пример
<!— Ссылка —>
<!— Текст —>
Lorem Ipsum
HTML
<!-- Ссылка -->
<div class="crossed"><a href="#" class="crossed-link" title="">Lorem Ipsum</a></div>
<!-- Текст -->
<div class="crossed"><p class="crossed-text">Lorem Ipsum</p></div>
CSS
/* Ссылка */
a.crossed-link {
color: #f66d52; /* Цвет сылки */
font-weight: 400;
text-transform: uppercase;
text-decoration: none;
font-size: 1em;
position: relative;
display: inline-block;
}
a.crossed-link:before {
content: '';
position: absolute;
width: 100%;
height: 1px; /* Высота зачеркивающей линии */
background: #666; /* Цвет зачеркивающей линии */
top: 45%;
animation: out 0s cubic-bezier(1, 0, 0.58, 0.97) 1 both;
}
div.crossed:hover a.crossed-link:before {
animation: in 0.2s cubic-bezier(1, 0, 0.58, 0.97) 1 both;
}
/* Текст */
p.crossed-text{
color: #ffa000; /* Цвет текста */
font-weight: 400;
text-transform: uppercase;
font-size: 1em;
position: relative;
display: inline-block;
}
p.crossed-text:before {
content: '';
position: absolute;
width: 100%;
height: 1px; /* Высота зачеркивающей линии */
background: #666; /* Цвет зачеркивающей линии */
top: 45%;
animation: out 0s cubic-bezier(1, 0, 0.58, 0.97) 1 both;
}
div.crossed:hover p.crossed-text:before {
animation: in 0.2s cubic-bezier(1, 0, 0.58, 0.97) 1 both;
}
/* Анимация */
@keyframes in {
0% {
width: 0;
left: 0;
right: auto;
}
100% {
left: 0;
right: auto;
width: 100%;
}
}
@keyframes out {
0% {
width: 100%;
left: auto;
right: 0;
}
100% {
width: 0;
left: auto;
right: 0;
}
}
@keyframes show {
0% {
opacity: 0;
transform: translateY(-10px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
Появление тени для текста при наведении CSS
Эффект появления тени для текста подойдет для того, чтобы выделить определенный фрагмент текста на сайте, можно добавить и смену цвета текста,каак показано в примере, чтобы элементы стали более разнообразными и интересными для пользователя.
Пример
HTML
<p class="shadow-text">Lorem Ipsum</p>
CSS
.shadow-text{
color: #f66d52; /* Цвет текста */
font-size: 2em; /* Размер текста */
font-weight: bold;
padding: 20px 0px;
text-transform: uppercase;
line-height: 1;
-webkit-transition: all 0.5s ease;
transition: all 0.5s ease;
}
.shadow-text:hover{
color: #ffa000; /* Меняем цвет текста */
-webkit-text-shadow: 2px 2px 2px #000;
-moz-text-shadow: 2px 2px 2px #000;
text-shadow: 2px 2px 2px #000;
}
Анимация с подчёркивающей и исчезающей линией у ссылки CSS
Этот эффект при наведении подойдет как для ссылки, так и для заголовка и текста, если это необходимо. С помощью такого эффекта можно выделить ключевые моменты и сделать сайт интереснее.
Пример
HTML
<a href="#" class="underline-one">Lorem Ipsum</a>
CSS
.underline-one {
color: #00bfff; /* Цвет обычной ссылки */
position: relative;
cursor: pointer;
text-decoration: none; /* Убираем подчеркивание */
}
.underline-one:after {
content: "";
display: block;
position: absolute;
right: 0;
bottom: -3px;
width: 0;
height: 2px; /* Высота линии */
background-color: black; /* Цвет подчеркивания при исчезании линии*/
transition: width 0.5s; /* Время эффекта */
}
.underline-one:hover:after {
content: "";
width: 100%;
display: block;
position: absolute;
left: 0;
bottom: -3px;
height: 2px; /* Высота линии */
background-color: red; /* Цвет подчеркивания при появлении линии*/
transition: width 0.5s; /* Время эффекта */
}
Анимация с подчёркивающей линией у ссылки CSS
Анимация с подчёркивающей линией у ссылки CSS подойдет как для ссылок, так и для заголовков и текста. Необходимо будет обернуть ссылку в дополнительный див, чтобы задать ему нужные свойства.
Пример
HTML
<div class="link-ease-in-out">
<a href="#" title="Lorem Ipsum">Lorem Ipsum</a>
</div>
CSS
.link-ease-in-out a {
display: inline-block;
color: #00bfff; /* Цвет обычной ссылки */
line-height: 1;
text-decoration: none; /* Убираем подчеркивание */
cursor: pointer;
}
.link-ease-in-out a:after {
background-color: #f66d52; /* Цвет линии при наведении на нее курсора мыши */
display: block;
content: "";
height: 2px; /* Высота линии */
width: 0%;
-webkit-transition: width .3s ease-in-out;
-moz--transition: width .3s ease-in-out;
transition: width .3s ease-in-out;
}
.link-ease-in-out a:hover:after,
.link-ease-in-out a:focus:after {
width: 100%;
}
Изменение фона и цвета ссылки CSS
Этот эффект при наведении одинаково подойдет как для ссылки, так и для того, чтобы выделить фрагмент текста. Его можно использовать, чтобы привлечь внимание посетителей и сделать свой сайт еще более интересным.
Пример
Lorem Ipsum
HTML
CSS
p {
color: #5a5a5a; /* Цвет текста */
background: #ffc; /* Цвет фона */
padding: 10px; /* Поля вокруг текста */
transition: 1s linear; /* Время изменения */
}
p:hover {
color: #fff; /* Цвет текста */
background: #f66d52; /* Цвет фона */
}
Увеличение текста при наведении CSS
Иногда нужно увеличить текст при наведении, этого можно добиться с помощью свойства transform с функцией scale(). Свойство transition отвечает за плавное увеличение текста, с помощью него устанавливаем время масштабирования. В зависимости от того, в каком положении находится текст, его масштабирование будет происходить по разному.
Пример
Lorem Ipsum
Lorem Ipsum
Lorem Ipsum
HTML
<p class="gain-left">Lorem Ipsum</p>
<p class="gain-center">Lorem Ipsum</p>
<p class="gain-right">Lorem Ipsum</p>
CSS
/* Текст слева */
.gain-left {
transition: 1s; /* Время эффекта */
text-align: left;
}
.gain-left:hover {
transform: scale(1.2); /* Увеличиваем масштаб */
}
/* Текст по центру */
.gain-center{
transition: 1s; /* Время эффекта */
text-align: center;
}
.gain-center:hover {
transform: scale(1.2); /* Увеличиваем масштаб */
}
/* Текст справа */
.gain-right {
transition: 1s; /* Время эффекта */
text-align: right;
}
.gain-right:hover {
transform: scale(1.2); /* Увеличиваем масштаб */
}
Как добавить линию к заголовку с помощью :before и :after
Часто бывает, что необходимо добавить линию к заголовку, либо сверху, либо снизу. Конечно можно ограничиться простым свойством border-bottom, его можно настроить используя генератор границ блока, но при этом нельзя задать ширину линии отдельно от заголовка, а так же придать ей движение. Но когда это необходимо, можно сделать линию с помощью с помощью :before и :after.
Пример
Lorem Ipsum
HTML
<h3 class="title-example">Lorem Ipsum</h3>
CSS
h3.title-example{
font-size: 1em; /* Размер шрифта */
color: #5a5a5a; /* Цвет заголовка */
text-align: center; /* Текст по центру */
}
/* CSS код для линии над заголовком */
h3.title-example:before {
content: '';
display: block;
height: 1px; /* Высота линии */
background: #f66d52; /* Цвет линии */
width: 150px; /* Ширина линии до наведения */
margin: 0 auto 10px; /* Отступ с боков по центру и снизу */
transition: 1s; /* Время, за которое линия возвращается после наведения */
}
h3.title-example:hover:before {
width: 250px; /* Ширина линии при наведении */
transition: ease-out 1s; /* Время, за которое линия расширяется при наведении */
}
/* CSS код для линии под заголовком */
h3.title-example:after {
content: '';
display: block;
height: 1px; /* Высота линии */
background: #f66d52; /* Цвет линии */
width: 150px; /* Ширина линии до наведения */
margin: 10px auto 0; /* Отступ с боков по центру и сверху */
transition: 1s; /* Время, за которое линия возвращается после наведения */
}
h3.title-example:hover:after {
width: 250px; /* Ширина линии при наведении */
transition: ease-out 1s; /* Время, за которое линия расширяется при наведении */
}
Время прочтения
6 мин
Просмотры 25K
Автор статьи, перевод которой мы сегодня публикуем, предлагает, пользуясь чистым CSS, создать механизм изменения цвета текста ссылки при наведении на неё мыши. Но это должна быть не обычная смена цвета. Новый цвет должен заполнять ссылку слева направо, заменяя старый.
Для того чтобы это сделать, можно прибегнуть к одному из четырёх методов, описанных в этом материале. Рассмотрим эти методы, обращая особое внимание на разные важные вещи вроде доступности контента, производительности решения и браузерной поддержки.
Метод №1: использование background-clip: text
Во время написания этого материала свойство background-clip: text носит статус экспериментального. Оно не поддерживается в Internet Explorer 11 и ниже.Этот метод предусматривает создание так называемого «knockout text» (текста, который выглядит так, будто он вырезан в некоей поверхности и из него просвечивает фон) с резким градиентом. HTML-разметка состоит из единственного элемента <a>
, описывающего гиперссылку.
<a href="#">Link Hover</a>
Начнём с создания стилей для ссылки. Использование overflow: hidden
приведёт к тому, что при изменении внешнего вида ссылки отсекается всё то, что выходит за пределы этого элемента.
a {
position: relative;
display: inline-block;
font-size: 2em;
font-weight: 800;
color: royalblue;
overflow: hidden;
}
Нам понадобится использовать резкий линейный градиент с указанием значения в 50% для начального и конечного цветов ссылки.
a {
/* То же, что и раньше */
background: linear-gradient(to right, midnightblue, midnightblue 50%, royalblue 50%);
}
Воспользуемся свойством background-clip
для обрезки градиента. Дадим ему значение text
для вывода текста. Мы ещё будем использовать свойства background-size
и background-position
. Делается это для вывода начального цвета.
a {
/* То же, что и раньше */
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-size: 200% 100%;
background-position: 100%;
}
И наконец — добавим к стилю CSS-свойство transition
и стилизуем псевдокласс гиперссылки :hover
. Для того чтобы при наведении на ссылку мыши новый цвет заполнял бы ссылку слева направо, воспользуемся свойством background-position
.
a {
/* То же, что и раньше */
transition: background-position 275ms ease;
}
a:hover {
background-position: 0 100%;
}
Вот — пример на CodePen.Хотя эта методика и позволяет достичь желаемого эффекта, Safari и Chrome подвергнут обрезке элементы оформления текста и тени. Это значит, что они показаны не будут. Применение текстовых стилей, таких, как подчёркивание текста с помощью CSS-свойства text-decoration
, работать не будет. Поэтому, если нужно, чтобы ссылки были бы подчёркнутыми, стоит рассмотреть другие способы настройки подчёркивания.
Метод №2: применение width/height
Этот метод основан на использовании атрибута data-*, содержащего тот же текст, что и тег <a>
. Здесь используется управление свойством width
(для заполнения ссылки цветом слева направо или справа налево) или свойством height
(для применения эффекта сверху вниз или снизу вверх). Например, в нашем случае применяется воздействие на свойство width
, которое, при наведении мыши на ссылку, меняется с 0 до 100%.Вот разметка:
<a href="#" data-content="Link Hover">Link Hover</a>
CSS-код похож на тот, что использован в предыдущем примере, за исключением настроек свойства фона. Здесь, кроме того, будет нормально работать свойство text-decoration
:
a {
position: relative;
display: inline-block;
font-size: 2em;
color: royalblue;
font-weight: 800;
text-decoration: underline;
overflow: hidden;
}
Именно тут нам и понадобится использовать текст из атрибута data-content
. Этот текст будет расположен поверх содержимого тега <a>
. Мы можем воспользоваться здесь интересным маленьким приёмом, который заключается в копировании текста из атрибута и в выводе его с помощью функции attr()
в свойство content
псевдоэлемента ссылки ::before
.
a::before {
position: absolute;
content: attr(data-content); /* Выводит значение атрибута */
top: 0;
left: 0;
color: midnightblue;
text-decoration: underline;
overflow: hidden;
transition: width 275ms ease;
}
Для того чтобы текст не перешёл бы на новую строку, к псевдоэлементу будет применён стиль white-space: nowrap
. Для изменения цвета ссылки зададим значение CSS-свойства color
псевдоэлемента ::before
и сделаем так, чтобы в начале значение свойства width
равнялось бы 0:
a::before {
/* То же, что и раньше */
width: 0;
white-space: nowrap;
}
Увеличим значение width
псевдоэлемента ::before
до 100% для применения эффекта при наведении на ссылку мыши:
a:hover::before {
width: 100%;
}
Вот пример применения этого метода.Хотя мы, воздействуя на свойства элемента width
и height
, достигаем того, что нам нужно, этот метод отличается невысокой производительностью. Для того чтобы получить плавную смену цветов на 60 кадрах в секунду — лучше пользоваться свойствами transform
или opacity
.Применение свойства text-decoration
позволяет использовать в анимированных ссылках различные стили подчёркивания текста. Вот пример, демонстрирующий это, созданный с помощью третьей методики, которую мы сейчас рассмотрим. Она основана на применении CSS-свойства clip-path.
Метод №3: применение clip-path
Здесь мы будем пользоваться CSS-свойством clip-path
и многоугольником, в данном случае — прямоугольником. Прямоугольник имеет четыре угла, длина двух из его сторон увеличивается при наведении мыши на ссылку. Фигура расширяется, одна из её сторон двигается слева направо.
Тут используется та же разметка, что и в предыдущем примере:
<a href="#" data-content="Link Hover">Link Hover</a>
Мы, снова, будем пользоваться псевдоэлементом ::before
. Но CSS-код здесь другой:
a::before {
position: absolute;
content: attr(data-content);
color: midnightblue;
text-decoration: underline;
clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
transition: clip-path 275ms ease;
}
В отличие от предыдущего метода, здесь свойство text-decoration: underline
должно быть задано для псевдоэлемента ::before
. Это нужно для того, чтобы изменение цвета коснулось бы не только текста ссылки, но и линии, подчёркивающей ссылку.Теперь присмотримся к CSS-коду свойства clip-path
:
clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
Позиции вершин многоугольника в свойстве clip-path
заданы в процентах, они определяют координаты в порядке, соответствующем их размещению на многоугольнике:
0 0
= верхний левый угол0 0
= верхний правый угол0 100%
= нижний правый угол0 100%
= нижний левый угол
Направление применения эффекта заполнения можно изменить, модифицировав координаты. Теперь, когда мы знаем о координатах, мы можем сделать так, чтобы фигура росла бы, двигаясь слева направо при наведении на ссылку мыши:
a:hover::before {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
}
Вот рабочий вариант этого примера.Эта методика анимирования цвета ссылок работает очень хорошо, но перед её применением стоит учесть поддержку свойства clip-path
различными браузерами. Создание CSS-переходов с использованием clip-path
— это лучше, чем использование методики height/width. Однако её применение приводит к тому, что браузер выполняет весьма ресурсозатратные операции Paint (рисование).
Метод №4: использование transform
В разметке, которая здесь применяется, используется методика маскировки с помощью элемента <span>
. Так как мы будем использовать в элементе <span>
содержимое, дублирующее содержимое ссылки, то мы, ради улучшения доступности контента, воспользуемся атрибутом aria-hidden="true"
. Это скроет повторяющийся текст от средств для чтения с экрана.
Такой текст не будет озвучен дважды:
<a href="#"><span data-content="Link Hover" aria-hidden="true"></span>Link Hover</a>
CSS-код для элемента <span>
содержит описание перехода, который начинается слева:
span {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
transform: translateX(-100%);
transition: transform 275ms ease;
}
Теперь нужно организовать перемещение элемента <span>
вправо, выглядящее так, как показано ниже.
Для того чтобы это сделать, воспользуемся псевдоэлементом ::before
элемента <span>
. И, как прежде, прибегнем к использованию атрибута data-content
. Зададим изменение позиции элемента, применяя трансформацию transform: translateX(100%)
, перемещая его по оси X
.
span::before {
display: inline-block;
content: attr(data-content);
color: midnightblue;
transform: translateX(100%);
transition: transform 275ms ease;
text-decoration: underline;
}
Так же, как и у элемента <span>
, позиция псевдоэлемента ::before
будет установлена с помощью конструкции transform: translateX(0)
:
a:hover span::before {
transform: translateX(0);
}
Вот этот пример на CodePen.Хотя этот метод отличается наилучшей кросс-браузерной поддержкой из рассмотренных, для его реализации нужно больше HTML и CSS-кода. Тем не менее, применение CSS-свойства transform
не вредит производительности, его использование не вызывает перерисовывания элементов, и, в результате, ведёт к формированию плавных CSS-переходов на 60 кадрах в секунду.
Итоги
Только что мы рассмотрели четыре разных метода, позволяющих достичь одного и того же эффекта средствами CSS. Хотя у каждого из них есть свои плюсы и минусы, можно заметить, что нет ничего невозможного в том, чтобы организовать анимацию цвета текста ссылок при наведении на них мыши. Это — небольшой приятный эффект, применение которого приводит к тому, что ссылки воспринимаются более интерактивными.
Уважаемые читатели! Анимируете ли вы ссылки в своих проектах?
В данной статье на примере показано, как сделать на произвольном элементе сайта смену цвета, если на него был наведен курсор мышки.
Делается данная «штука» при помощи стилей CSS, т.е. придется добавить несколько строчек текста в файл стилей шаблона, а так же проявить свои дизайнерские способности. Я подскажу что именно добавить.
Обновлено 17.01.2019
Давайте сразу для наглядности пример, чтобы поняли о чем речь. Проведите мышкой по пунктам меню:
Как только мышка оказывается наведена на любое поле в списке — происходит смена заднего фона строки, а так же цвет текста/ссылки в названии рубрики сайта.
Вот так выглядит код данного блока:
В моем примере видим что эффект срабатывает на обычной ссылке. Вместо нее может быть контейнер <div>
, <li>
и прочие подходящие теги.
Чтобы сказать браузеру, что эффект нужно выполнять на конкретных ссылках, я взял их в отдельный <div class="catside">тут ссылки<div>
. У вас это тоже может быть созданный вами контейнер, или уже готовый (например, виджет в сайдбаре).
Практика
Теперь необходимо задать действие по наведению мышки. Как уже говорилось выше — делаем все при помощи стилей CSS (файл шаблона может называться style.css, css.css, core.css или еще как-то).
.catside a:hover { background: #0078BF; color: #fff; }
Данной строкой мы указали браузеру менять цвет заднего фона при наведении мышки на синий (#0078BF) и сказали что цвет шрифта должен стать белым (#fff). Сама «штука», позволяющая понять браузеру, что это нужно делать по наведению мышки — псевдокласс hover (о нем можно почитать ЗДЕСЬ).
Чуть понятнее: мы указали что ссылка a
должна находиться внутри контейнера с классом .catside
. Далее мы добавили псевдокласс hover и оформили по правилам CSS.
Послесловие
В данной статье я показал как работает смена цвета элементов на самом обычном примере. Если хотите развиваться далее, то почитайте профильную литературу и справочники по CSS.
Использовать hover можно, практически, для всех элементов на сайте: блоки, текст, ссылки. Проявите немного фантазии и поймете как устроено у вас на сайте подобное. После этого сможете его украсить или сменить частично оформление.
Опять же о показанном примере: в нем не учитываются параметры оформления блока (отступы, размер шрифта, картинка и прочее). Это все можно узнать из моих предыдущих статей на блоге, либо воспользоваться консолью разработчика F12 в вашем браузере (как им пользоваться смотрите видео на моем канале YOUTUBE).
От автора: давайте создадим эффект на чистом CSS, который меняет цвет текстовой ссылки при наведении… но цвет будет меняться постепенно, а не сразу.
Для этого мы можем использовать четыре различных метода. Давайте рассмотрим их, помня о важных вещах, таких как доступность, производительность и поддержка браузерами.
Техника 1: Использование background-clip: text
На момент написания статьи background-clip: text — это экспериментальная функция, которая не поддерживается в Internet Explorer 11 и ниже.
Этот метод включает создание убирающегося текста с резким переходом градиента. Разметка состоит из одного HTML-элемента ссылки (<a>) для создания гиперссылки:
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнее
<a href=«#»>Link Hover</a> |
Мы можем начать добавлять стили к гиперссылке. Использование overflow: hidden обрезает во время перехода при наведении любой контент за пределами гиперссылки:
a { position: relative; display: inline-block; font-size: 2em; font-weight: 800; color: royalblue; overflow: hidden; } |
Нам нужно будет использовать линейный градиент с резким переходом на 50% от начального цвета ссылки к цвету при наведении:
a { /* Same as before */ background: linear-gradient(to right, midnightblue, midnightblue 50%, royalblue 50%); } |
Давайте используем background-clip, чтобы обрезать градиент и значение text для отображения текста. Мы также будем использовать свойства background-size и background-position для отображения исходного цвета:
a { /* Same as before */ background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-size: 200% 100%; background-position: 100%; } |
Наконец, давайте добавим для гиперссылки свойство CSS transition и псевдо-класс CSS :hover. Чтобы ссылка окрашивалась при наведении слева направо, используйте свойство background-position:
a { /* Same as before */ transition: background-position 275ms ease; } a:hover { background-position: 0 100%; } |
Несмотря на то, что этот метод обеспечивает эффект наведения, Safari и Chrome будут обрезать оформление текста и тени, то есть они не будут отображаться. Применение стилей текста, таких как подчеркивание, с помощью свойства CSS text-decor не будет работать. Возможно, вам придется использовать другие подходы при создании подчеркиваний.
Техника 2: Использование width/height
Это работает благодаря использованию атрибута данных, содержащего тот же текст, что и в теге <a>, и установке width (окрашивание текста слева направо или справа налево) или height (окрашивание текста сверху вниз или снизу вверх), от 0% до 100% при наведении.
Вот разметка:
<a href=«#» data—content=«Link Hover»>Link Hover</a> |
CSS похож на тот, что мы использовали в предыдущей технике, минус свойства CSS background. Здесь будет использоваться свойство text-decoration:
a { position: relative; display: inline-block; font-size: 2em; color: royalblue; font-weight: 800; text-decoration: underline; overflow: hidden; } |
Теперь нам нужно использовать контент из атрибута data-content. Он будет расположен над содержимым в теге <a>. Мы используем небольшую хитрость: копируем текст в атрибуте данных и отображаем его через функцию attr() в свойстве content псевдо-элемента ::before.
a::before { position: absolute; content: attr(data-content); /* Prints the value of the attribute */ top: 0; left: 0; color: midnightblue; text-decoration: underline; overflow: hidden; transition: width 275ms ease; } |
Чтобы текст не переносился на следующую строку, будет применяться white-space: nowrap. Чтобы изменить цвет заливки ссылки, задайте значение для свойства CSS color, используя псевдо-элемент ::before и при значении width, начинающемся с 0:
a::before { /* Same as before */ width: 0; white-space: nowrap; } |
Увеличьте ширину псевдо-элемента ::before до 100% , чтобы завершить эффект наведения:
a:hover::before { width: 100%; } |
Хотя в этом методе используется трюк, свойства width или height не дают производительный переход CSS. Лучше всего использовать для достижения плавного перехода либо свойство transform, либо opacity со скоростью 60 кадров в секунду.
Использование свойства CSS text-decoration может позволить отображать различные стили подчеркивания при переходе. Я создал иллюстрирующую это демонстрацию, используя следующую технику: свойство CSS clip-path.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнее
Техника 3: Использование clip-path
Для этой техники мы будем использовать свойство CSS clip-path с многоугольной фигурой. Многоугольник будет иметь четыре вершины, две из которых будут смещаться вправо при наведении:
Разметка такая же, как и в предыдущем методе. Мы снова будем использовать псевдо-элемент ::before, но CSS будет другим:
a::before { position: absolute; content: attr(data-content); color: midnightblue; text-decoration: underline; clip-path: polygon(0 0, 0 0, 0% 100%, 0 100%); transition: clip-path 275ms ease; } |
В отличие от предыдущих методов, text-decoration: underline должен быть объявлен для псевдо-элемента ::before с цветом заливки подчеркивания при наведении курсора. Теперь давайте рассмотрим CSS для техники clip-path:
clip-path: polygon(0 0, 0 0, 0% 100%, 0 100%); |
Вершины многоугольника свойства clip-path устанавливаются в процентах, чтобы определить координаты в следующем порядке:
0 0 = вверху слева
0 0 = вверху справа
100% 0 = внизу справа
0 100% = внизу слева
Направление эффекта заливки можно скорректировать, изменив координаты. Теперь, когда у нас есть представление о координатах, мы можем заставить многоугольник расширяться вправо при наведении:
a:hover::before { clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); } |
Этот метод работает довольно хорошо, но обратите внимание, что поддержка свойства clip-path зависит от браузера. Создание CSS-перехода с помощью clip-path — лучшая альтернатива, чем использование метода width/ height; однако, это действительно влияет на отрисовку браузером.
Техника 4: Использование преобразования
Разметка для этого метода использует метод маскировки с элементом span. Поскольку мы будем использовать дублированный контент в отдельном элементе, мы зададим для него aria-hidden=»true» для улучшения доступности — это скроет его от программ чтения с экрана, чтобы контент не читался дважды:
<a href=«#»><span data—content=«Link Hover» aria—hidden=«true»></span>Link Hover</a> |
CSS для элемента span содержит переход, который будет начинаться слева:
span { position: absolute; top: 0; left: 0; overflow: hidden; transform: translateX(-100%); transition: transform 275ms ease; } |
Далее нам нужно заставить span смещаться вправо вот так:
Для этого мы будем использовать функцию CSS translateX() и установим для нее значение 0:
a:hover span { transform: translateX(0); } |
Затем мы используем для span псевдо-элемент ::before, снова указав атрибут data-content, как мы делали ранее. Мы установим позицию, переместив ее на 100% вдоль оси x.
span::before { display: inline-block; content: attr(data-content); color: midnightblue; transform: translateX(100%); transition: transform 275ms ease; text-decoration: underline; } |
Как и для элемента span, для позиции псевдо-элемента ::before также будет установлено translateX(0):
a:hover span::before { transform: translateX(0); } |
Несмотря на то, что этот метод является наиболее совместимым с различными браузерами, для него требуется больше разметки и CSS. Тем не менее, использование свойства CSS transform очень полезно для производительности, поскольку не вызывает перерисовок и, следовательно, обеспечивает плавные переходы CSS со скоростью 60 кадров в секунду.
Мы это сделали!
Мы только что рассмотрели четыре различных метода для достижения одинакового эффекта. Хотя у каждого есть свои плюсы и минусы, вы можете видеть, что все они работают. Это аккуратный эффект, который делает ссылки более интерактивными.
Автор: Katherine Kato
Источник: //css-tricks.com
Редакция: Команда webformyself.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнее
Верстка. Быстрый старт
Практический курс по верстке адаптивного сайта с нуля!
Смотреть
Как изменить вид ссылки при наведении на нее курсора мыши?
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS |
4.0+ | 1.0+ | 4.0+ | 1.0+ | 1.0+ |
Задача
Изменить цвет текстовой ссылки, когда на неё наводится курсор мыши и вернуть цвет обратно при уведении курсора.
Решение
Псевдокласс :hover, который добавляется к селектору A, определяет состояние ссылки при наведённом на неё курсоре мыши. В стилях вначале указывается
селектор A, потом :hover (пример 1).
Пример 1. Изменение вида ссылки
HTML5CSS 2.1IECrOpSaFx
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Цвет ссылок</title>
<style>
a {
color: #008000; /* Цвет обычной ссылки */
text-decoration: none; /* Убираем подчеркивание у ссылок */
}
a:visited {
color: #800080; /* Цвет посещённой ссылки */
}
a:hover {
color: #800000; /* Цвет ссылки при наведении на нее курсора мыши */
text-decoration: underline; /* Добавляем подчеркивание */
}
</style>
</head>
<body>
<p><a href="rome.html">Cras ingens iterabimus aequor</a> —
завтра снова мы выйдем в огромное море.</p>
</body>
</html>
В данном примере ссылка становится подчёркнутой и меняет свой цвет, когда
на неё наводится указатель (рис. 1). Заметьте, что псевдокласс :hover в коде
идёт после :visited. Это имеет значение, иначе посещённые ссылки в данном случае
не будут изменять свой цвет.
Рис. 1. Вид ссылки при наведении на неё курсора мыши
Аналогично можно изменить и цвет фона под ссылкой при её наведении, добавив свойство background к селектору A:hover, как показано в примере 2.
Пример 2. Изменение цвета фона ссылки
HTML5CSS 2.1IECrOpSaFx
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Фон под ссылками</title>
<style>
a {
color: #000080; /* Цвет обычной ссылки */
padding: 2px; /* Поля вокруг текста */
}
a:visited {
color: #800080; /* Цвет посещенной ссылки */
}
a:hover {
text-decoration: none; /* Убираем подчеркивание */
color: #fff; /* Цвет ссылки при наведении на нее курсора мыши */
background: #e24486; /* Цвет фона */
}
</style>
</head>
<body>
<p><a href="rome.html">Audaces fortuna juvat</a> -
счастье покровительствует смелым.</p>
</body>
</html>
Результат данного примера показан на рис. 2. Чтобы текст плотно не прилегал к фону, к селектору A добавлено свойство padding.
Рис. 2. Изменение цвета фона ссылки