6 креативных идей CSS hover эффекта для ссылок

0 1

Мы говорим про :hover. Однако бывают случаи (не всегда), когда лучше добавить также :focus, так как не всегда для взаимодействия используется мышь. Иногда это может быть тачскрин или нажатие клавиш.

Эффект скользящей подсветки ссылки при наведении мыши

Содержание статьи:

Такой эффект использует box shadow для инлайн ссылки и меняет цвет ее текста. Сначала добавить padding со всех сторон ссылки. Затем – отрицательный margin с тем же значением, чтобы padding не прерывал текст. Мы используем box-shadow вместо свойства background из-за transition.

CSS a { box-shadow: inset 0 0 0 0 #54b3d6; color: #54b3d6; margin: 0 -.25rem; padding: 0 .25rem; transition: color .3s ease-in-out, box-shadow .3s ease-in-out; } a:hover { box-shadow: inset 100px 0 0 0 #54b3d6; color: white; }

1234567891011 a {  box-shadow: inset 0 0 0 0 #54b3d6;  color: #54b3d6;  margin: 0 -.25rem;  padding: 0 .25rem;  transition: color .3s ease-in-out, box-shadow .3s ease-in-out;}a:hover {  box-shadow: inset 100px 0 0 0 #54b3d6;  color: white;}

6 креативных идей CSS hover эффекта для ссылок

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

CodePen Embed Fallback

Эффект замены текста при наведении мыши на ссылку

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

С этим эффектом есть небольшая хитрость. Магия заключается в использовании data-атрибута. С его помощью задается текст, который будет въезжать в область видимости. Также он вызывается со свойством content у псевдо-элемента ::after на ссылке. Первым делом HTML:

<p>Hover <a href=”#” data-replace=”get a link”><span>get a link</span></a></p>

1 <p>Hover <a href=”#” data-replace=”get a link”><span>get a link</span></a></p>

Очень большая разметка, правда. Нужно обратить внимание на тег параграфа, внутри которого ссылка и span. Напишем базовые стили для ссылки. Чтобы спозиционировать псевдо-элементы абсолютно, нужно придать ссылке относительное позиционирование. Ссылка должна иметь display: inline-block, чтобы обладать свойствами блокового элемента. Также спрячьте все переполнения, которые могут возникнуть из-за псевдо-элементов.

CSS a { overflow: hidden; position: relative; display: inline-block; }

12345 a {  overflow: hidden;  position: relative;  display: inline-block;}

Псевдо-элементы ::before и ::after должны обладать абсолютным позиционированием, чтобы наложиться поверх реальной ссылки. Зададим для них нулевой сдвиг слева, чтобы точно знать, что они закрывают всю ширину ссылки.

CSS a::before, a::after { content: ”; position: absolute; width: 100%; left: 0; }

1234567 a::before,a::after { content: ”;  position: absolute;  width: 100%;  left: 0;}

Псевдо-элемент ::after получает контент из дата-атрибута ссылки из HTML:

CSS a::after { content: attr(data-replace); }

123 a::after {  content: attr(data-replace);}

Теперь можно выполнить transform: translate3d() для ::after вправо на 200%. При :hover возвращаем псевдо-элемент обратно. Теперь можно добавить нулевой сдвиг для top. Это будет важно чуть позже, когда мы будем использовать ::before для подчеркивания текста.

CSS a::after { content: attr(data-replace); top: 0; transform-origin: 100% 50%; transform: translate3d(200%, 0, 0); } a:hover::after, a:focus::after { transform: translate3d(0, 0, 0); }

1234567891011 a::after {  content: attr(data-replace);  top: 0;  transform-origin: 100% 50%;  transform: translate3d(200%, 0, 0);} a:hover::after,a:focus::after {  transform: translate3d(0, 0, 0);}

Добавим transform: scale() для ::before, чтобы по умолчанию он был скрыт, а при :hover появлялся. Сделаем его маленьким, 2px в высоту, и прижмем к нижнему краю, чтобы это было похоже на подчеркивание текста, которые выезжает вместе с ::after.

CSS a::before { background-color: #54b3d6; height: 2px; bottom: 0; transform-origin: 100% 50%; transform: scaleX(0); } a:hover::before, a:focus::before { transform-origin: 0% 50%; transform: scaleX(1); }

12345678910111213 a::before {  background-color: #54b3d6;  height: 2px;  bottom: 0;  transform-origin: 100% 50%;  transform: scaleX(0);} a:hover::before,a:focus::before {  transform-origin: 0% 50%;  transform: scaleX(1);}

Остальные настройки по желанию! Мы добавили переход на эффект transform, пару цветов и т.д. Здесь уже все зависит от вас.

CodePen Embed Fallback

Весь CSS:

CSS a { overflow: hidden; position: relative; display: inline-block; } a::before, a::after { content: ”; position: absolute; width: 100%; left: 0; } a::before { background-color: #54b3d6; height: 2px; bottom: 0; transform-origin: 100% 50%; transform: scaleX(0); transition: transform .3s cubic-bezier(0.76, 0, 0.24, 1); } a::after { content: attr(data-replace); height: 100%; top: 0; transform-origin: 100% 50%; transform: translate3d(200%, 0, 0); transition: transform .3s cubic-bezier(0.76, 0, 0.24, 1); color: #54b3d6; } a:hover::before { transform-origin: 0% 50%; transform: scaleX(1); } a:hover::after { transform: translate3d(0, 0, 0); } a span { display: inline-block; transition: transform .3s cubic-bezier(0.76, 0, 0.24, 1); } a:hover span { transform: translate3d(-200%, 0, 0); }

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 a {  overflow: hidden;  position: relative;  display: inline-block;} a::before,a::after { content: ”;  position: absolute;  width: 100%;  left: 0;}a::before {  background-color: #54b3d6;  height: 2px;  bottom: 0;  transform-origin: 100% 50%;  transform: scaleX(0);  transition: transform .3s cubic-bezier(0.76, 0, 0.24, 1);}a::after {  content: attr(data-replace);  height: 100%;  top: 0;  transform-origin: 100% 50%;  transform: translate3d(200%, 0, 0);  transition: transform .3s cubic-bezier(0.76, 0, 0.24, 1);  color: #54b3d6;} a:hover::before {  transform-origin: 0% 50%;  transform: scaleX(1);}a:hover::after {  transform: translate3d(0, 0, 0);} a span {  display: inline-block;  transition: transform .3s cubic-bezier(0.76, 0, 0.24, 1);} a:hover span {  transform: translate3d(-200%, 0, 0);}

Эффект с увеличением бэкграунда при наведении мыши на ссылку

Довольно популярный эффект. Я видел его на паре сайтов. Идея заключается в том, чтобы использовать ::before ссылки в качестве толстого подчеркивания, которое расположено прямо за ссылкой. При наведении мыши псевдо элемент расширяется на всю ссылку.

ОК, немного базовых стилей для ссылки. Нам не нужен text-decoration, вместо него будет выступать ::before. Добавим ссылке относительное позиционирование, чтобы абсолютно спозиционировать ::before.

CSS a { text-decoration: none; position: relative; }

1234 a {  text-decoration: none;  position: relative;}

Сделаем ::before 8px в высоту, чтобы он был похож на толстое подчеркивание. Также добавим абсолютное позиционирование, чтобы контролировать положение. Слева будет 0, а снизу совсем небольшой отступ, чтобы элемент подсвечивал ссылку. Можно добавить z-index: -1, чтобы элемент точно был позади ссылки.

CSS a::before { content: ”; background-color: hsla(196, 61%, 58%, .75); position: absolute; left: 0; bottom: 3px; width: 100%; height: 8px; z-index: -1; }

12345678910 a::before {  content: ”;  background-color: hsla(196, 61%, 58%, .75);  position: absolute;  left: 0;  bottom: 3px;  width: 100%;  height: 8px;  z-index: -1;}

Добавим эффект увеличения ::before при наведении мыши на ссылку. Для этого нужно всего лишь увеличить высоту с 3px до 100%. Обратите внимание, я также сбрасываю нижний сдвиг до 0, чтобы бэкграунд занимал больше места по мере растягивания.

CSS a:hover::before { bottom: 0; height: 100%; }

1234 a:hover::before {  bottom: 0;  height: 100%;}

Добавим легкий переход:

CSS a::before { content: ”; background-color: hsla(196, 61%, 58%, .75); position: absolute; left: 0; bottom: 3px; width: 100%; height: 8px; z-index: -1; transition: all .3s ease-in-out; }

1234567891011 a::before {  content: ”;  background-color: hsla(196, 61%, 58%, .75);  position: absolute;  left: 0;  bottom: 3px;  width: 100%;  height: 8px;  z-index: -1;  transition: all .3s ease-in-out;}

CodePen Embed Fallback

Полный CSS:

CSS a { text-decoration: none; color: #18272F; font-weight: 700; position: relative; } a::before { content: ”; background-color: hsla(196, 61%, 58%, .75); position: absolute; left: 0; bottom: 3px; width: 100%; height: 8px; z-index: -1; transition: all .3s ease-in-out; } a:hover::before { bottom: 0; height: 100%; }

1234567891011121314151617181920212223 a {  text-decoration: none;  color: #18272F;  font-weight: 700;  position: relative;} a::before {  content: ”;  background-color: hsla(196, 61%, 58%, .75);  position: absolute;  left: 0;  bottom: 3px;  width: 100%;  height: 8px;  z-index: -1;  transition: all .3s ease-in-out;} a:hover::before {  bottom: 0;  height: 100%;}

Эффект замены цвета справа налево при наведении мыши на ссылку

Мне нравится использовать этот эффект в меню навигации. Сначала это просто одноцветная ссылка без подчеркивания. Но при наведении мыши справа въезжает новый цвет, а слева скользит подчеркивание.

Как это работает? Мы задали ссылке бэкграунд в виде линейного градиента с четкой границей между двумя цветами посередине.

CSS a { background-image: linear-gradient( to right, #54b3d6, #54b3d6 50%, #000 50% ); }

12345678 a {  background-image: linear-gradient(    to right,    #54b3d6,    #54b3d6 50%,    #000 50%  );}

Добавим бэкграунду двойную ширину ссылки или 200% и расположим его слева. Таким образом, только один цвет из градиента отображается в кадре.

6 креативных идей CSS hover эффекта для ссылок

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

CSS a { background-image: linear-gradient( to right, #54b3d6, #54b3d6 50%, #000 50% ); background-size: 200% 100%; background-position: -100%; }

12345678910 a {  background-image: linear-gradient(    to right,    #54b3d6,    #54b3d6 50%,    #000 50%  );  background-size: 200% 100%;  background-position: -100%;}

Магия начинается с нестандартными свойствами -webkit-. Первое свойство делает текст прозрачным. Второе обрезает бэкграунд градиент таким образом, чтобы он был виден только в тексте. Таким образом текст принимает цвет бэкграунда.

CSS a { background-image: linear-gradient( to right, #54b3d6, #54b3d6 50%, #000 50% ); background-size: 200% 100%; background-position: -100%; -webkit-background-clip: text; -webkit-text-fill-color: transparent; }

123456789101112 a {  background-image: linear-gradient(    to right,    #54b3d6,    #54b3d6 50%,    #000 50%  );  background-size: 200% 100%;  background-position: -100%;  -webkit-background-clip: text;  -webkit-text-fill-color: transparent;}

Все еще читаете? Давайте добавим фальшивое подчеркивание ссылки с помощью ::before. Установим для него тот же цвет что и скрытой части градиента. Расположим элемент под нашей ссылкой, чтобы создать эффект подчеркивания.

CSS a:before { content: ”; background: #54b3d6; display: block; position: absolute; bottom: -3px; left: 0; width: 0; height: 3px; }

12345678910 a:before {  content: ”;  background: #54b3d6;  display: block;  position: absolute;  bottom: -3px;  left: 0;  width: 0;  height: 3px;}

При наведении мыши мы двигаем ::before слева направо:

CSS a:hover { background-position: 0; }

123 a:hover { background-position: 0;}

Теперь немного сложно. При наведении мыши мы задаем ширину ::before на 100% от ширины ссылки. Если применить это напрямую к ссылке, то мы бы растянули саму ссылку на всю ширину, из-за чего она начала бы двигаться по экрану. Вот так!

CSS a:hover::before { width: 100%; }

123 a:hover::before {  width: 100%;}

Сгладим эффект с помощью перехода:

CSS a { background-image: linear-gradient( to right, #54b3d6, #54b3d6 50%, #000 50% ); background-size: 200% 100%; background-position: -100%; -webkit-background-clip: text; -webkit-text-fill-color: transparent; transition: all 0.3s ease-in-out; }

12345678910111213 a {  background-image: linear-gradient(    to right,    #54b3d6,    #54b3d6 50%,    #000 50%  );  background-size: 200% 100%;  background-position: -100%;  -webkit-background-clip: text;  -webkit-text-fill-color: transparent;  transition: all 0.3s ease-in-out;}

CodePen Embed Fallback

Весь CSS:

CSS a { background-image: linear-gradient( to right, #54b3d6, #54b3d6 50%, #000 50% ); background-size: 200% 100%; background-position: -100%; display: inline-block; padding: 5px 0; position: relative; -webkit-background-clip: text; -webkit-text-fill-color: transparent; transition: all 0.3s ease-in-out; } a:before { content: ”; background: #54b3d6; display: block; position: absolute; bottom: -3px; left: 0; width: 0; height: 3px; transition: all 0.3s ease-in-out; } a:hover { background-position: 0; } a:hover::before { width:100%; }

123456789101112131415161718192021222324252627282930313233343536 a {  background-image: linear-gradient(    to right,    #54b3d6,    #54b3d6 50%,    #000 50%  );  background-size: 200% 100%;  background-position: -100%;  display: inline-block;  padding: 5px 0;  position: relative;  -webkit-background-clip: text;  -webkit-text-fill-color: transparent;  transition: all 0.3s ease-in-out;} a:before {  content: ”;  background: #54b3d6;  display: block;  position: absolute;  bottom: -3px;  left: 0;  width: 0;  height: 3px;  transition: all 0.3s ease-in-out;} a:hover { background-position: 0;} a:hover::before {  width:100%;}

Эффект с радужным подчеркиванием ссылки при наведении мыши

Мы не можем просто сделать -decoration-color: rainbow. Но мы можем сымитировать эффект с помощью бэкграунда и линейного градиента. Первым делом удалим у ссылки text-decoration:

CSS a { text-decoration: none; }

123 a {  text-decoration: none;}

Теперь градиенты. Сцепляем 2 линейных градиента внутри одного свойства background. Первый градиент – начальный цвет до наведения мыши. Второй – наша радуга.

CSS a { background: linear-gradient( to right, rgba(100, 200, 200, 1), rgba(100, 200, 200, 1) ), linear-gradient( to right, rgba(255, 0, 0, 1), rgba(255, 0, 180, 1), rgba(0, 100, 200, 1) ); }

1234567891011121314 a {  background:    linear-gradient(      to right,      rgba(100, 200, 200, 1),      rgba(100, 200, 200, 1)    ),    linear-gradient(      to right,      rgba(255, 0, 0, 1),      rgba(255, 0, 180, 1),      rgba(0, 100, 200, 1)  );}

Уменьшим размер бэкграунда до 3px, чтобы он походил на подчеркивание. Можно менять размер обоих градиентов через свойство background-size. Зададим первому градиента полную ширину и высоту 3px. Ширина второго 0.

CSS a { background: linear-gradient( to right, rgba(100, 200, 200, 1), rgba(100, 200, 200, 1) ), linear-gradient( to right, rgba(255, 0, 0, 1), rgba(255, 0, 180, 1), rgba(0, 100, 200, 1) ); background-size: 100% 3px, 0 3px; }

123456789101112131415 a {  background:    linear-gradient(      to right,      rgba(100, 200, 200, 1),      rgba(100, 200, 200, 1)    ),    linear-gradient(      to right,      rgba(255, 0, 0, 1),      rgba(255, 0, 180, 1),      rgba(0, 100, 200, 1)  );  background-size: 100% 3px, 0 3px;}

Расположим бэкграунд градиенты таким образом, чтобы первый был полностью виден, а второй полностью скрыт. Для этого используем свойство background-position. Также уберем повторение бэкграунда.

CSS a { background: linear-gradient( to right, rgba(100, 200, 200, 1), rgba(100, 200, 200, 1) ), linear-gradient( to right, rgba(255, 0, 0, 1), rgba(255, 0, 180, 1), rgba(0, 100, 200, 1) ); background-size: 100% 3px, 0 3px; background-position: 100% 100%, 0 100%; background-repeat: no-repeat; }

1234567891011121314151617 a {  background:    linear-gradient(      to right,      rgba(100, 200, 200, 1),      rgba(100, 200, 200, 1)    ),    linear-gradient(      to right,      rgba(255, 0, 0, 1),      rgba(255, 0, 180, 1),      rgba(0, 100, 200, 1)  );  background-size: 100% 3px, 0 3px;  background-position: 100% 100%, 0 100%;  background-repeat: no-repeat;}

Обновим background-size при наведении и поменяем значения градиентов.

CSS a:hover { background-size: 0 3px, 100% 3px; }

123 a:hover {  background-size: 0 3px, 100% 3px;}

Добавим небольшой переход при наведении мыши:

CSS a { background: linear-gradient( to right, rgba(100, 200, 200, 1), rgba(100, 200, 200, 1) ), linear-gradient( to right, rgba(255, 0, 0, 1), rgba(255, 0, 180, 1), rgba(0, 100, 200, 1) ); background-size: 100% 3px, 0 3px; background-position: 100% 100%, 0 100%; background-repeat: no-repeat; transition: background-size 400ms; }

123456789101112131415161718 a {  background:    linear-gradient(      to right,      rgba(100, 200, 200, 1),      rgba(100, 200, 200, 1)    ),    linear-gradient(      to right,      rgba(255, 0, 0, 1),      rgba(255, 0, 180, 1),      rgba(0, 100, 200, 1)  );  background-size: 100% 3px, 0 3px;  background-position: 100% 100%, 0 100%;  background-repeat: no-repeat;  transition: background-size 400ms;}

Вуаля!

CodePen Embed Fallback

Эффект проходящего подчеркивания при наведении мыши на ссылку

Geoff Graham недавно рассказал про этот эффект когда анализировал hover эффект Adam Argyle. В его демо бэкграунд появляется слева за ссылкой и уходит вправо, если мышь убрать. В моей версии бэкграунд урезается до подчеркивания.

CSS a { position: relative; } a::before { content: ”; position: absolute; width: 100%; height: 4px; border-radius: 4px; background-color: #18272F; bottom: 0; left: 0; transform-origin: right; transform: scaleX(0); transition: transform .3s ease-in-out; } a:hover::before { transform-origin: left; transform: scaleX(1); }

12345678910111213141516171819202122 a {  position: relative;} a::before {    content: ”;    position: absolute;    width: 100%;    height: 4px;    border-radius: 4px;    background-color: #18272F;    bottom: 0;    left: 0;    transform-origin: right;    transform: scaleX(0);    transition: transform .3s ease-in-out;  } a:hover::before {  transform-origin: left;  transform: scaleX(1);}

CodePen Embed Fallback

Это не единственный способ! Есть еще один от Justin Wong с использованием бэкграунда:

CodePen Embed Fallback

У Geoff тоже есть подборка CSS эффектов при наведении мыши на ссылку от элегантных до самых абсурдных. Зацените!

Удачи

Когда речь заходит о CSS эффектах наведения мыши на ссылки, можно много чего придумать. Вы можете поиграться с описанными эффектами и создать что-то свое. Надеюсь, вам понравилась статья. Продолжайте экспериментировать!

Автор: Harshil Patel

Источник: webformyself.com

Оставьте ответ