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

Анимация подчеркивания ссылок на CSS

Дефолтное подчеркивание ссылок

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

<a href="#">Стандартная ссылка</a>

Анимация появления текста на CSS.

Убрать подчеркивание ссылки

Прежде чем сделать подчеркивание ссылок более креативным, нужно вообще убрать подчеркивание у ссылок. Добавим всего одно свойство text-decoration со значением none, которое по умолчанию имеет значение underline.

// CSS
a {
    text-decoration: none;
}


Анимация появления текста на CSS.

Подчеркивание ссылок при наведении

Теперь сделаем простое подчеркивание ссылок при наведении мышью. Когда мы наводим мышь, ссылка мгновенно подчеркивается, но как только убираем, подчеркивание пропадает. Большинство ссылок в интернете, реализованы с помощью обычного hover-эффекта. Это тоже скучно, давайте сделаем процесс подчеркивания ссылок еще интереснее - с элементами анимации.

a:hover {
    text-decoration: underline;
}

Анимация подчеркивания ссылок

Пусть наши ссылки будут подчеркиваться с левой и правой стороны, а также из центра. Создадим HTML-разметку для трех ссылок с разными классами и поместим их в родительский контейнер links.

// HTML
<div class="links">
    <p class="left">
        <a href="#">Подчеркивание слева</a>
    </p>
    <p class="center">
        <a href="#">Подчеркивание по центру</a>
    </p>
    <p class="right">
        <a href="#">Подчеркивание справа</a>
    </p>
</div>


Анимация появления текста на CSS.

Общие CSS стили

@import url("https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@700&display=swap");
body {
    font-family: "Roboto Condensed", sans-serif;
    font-weight: 300;
    font-size: 24px;
}
.links {
    margin: auto; /* автоматическое задание отступов */
    width: 80%; /* ограничение по ширине родителя */
}
a {
    text-decoration: none; /* ссылка без подчеркивания */
    position: relative; /* относительное позиционирование */
    color: darkred; /* цвет ссылок */
}


Анимация появления текста на CSS.

Далее напишем CSS стили для каждого класса отдельно. Фишка состоит в том, что мы будем анимировать не сами ссылки, а их псевдоэлементы before. Для классов left и right, мы нарисуем линии (нижнее подчеркивание) с нулевой шириной. При наведении на ссылку, линия примет ширину 100%, возникнет эффект плавного подчеркивания ссылки. Фокус с подчеркиванием ссылок заключается в изменении значения ширины линии с 0% до 100% .

Подчеркивание ссылки слева

.left a::before {
    content: ""; /* отображает псевдоэлемент */
    bottom: 0; /* позиция линии снизу */
    right: 0; /* позиция линии справа */
    position: absolute; /* абсолютное позиционирование */
    width: 0%; /* ширина линии */
    height: 4px; /* толщина линии */
    background-color: darkred; /* цвет линии */
    transition: 0.6s; /* плавный переход */
}
.left a:hover:before {
    width: 100%; /* новая ширина линии */
    left: 0; /* исчезновение линии слева */
}

Подчеркивание ссылки справа

.right a::before {
    content: "";
    bottom: 0;
    right: 0;
    position: absolute;
    width: 0%;
    height: 4px;
    background-color: darkred;
    transition: 0.6s;
}
.right a:hover:before {
    width: 100%;
}

Подчеркивание ссылки по центру

Рисование линии подчеркивания из центра принципиально отличается от предыдущих двух вариантов. Сразу укажем ширину линии нижнего подчеркивания 100%. Свойство transform со значением scale уменьшит ширину элемента до 0, а при наведении увеличит ширину элемента до его изначального размера - значения ширины 100% по горизонтальной оси.

.center a::before {
    content: "";
    bottom: 0;
    left: 0;
    position: absolute;
    width: 100%;
    height: 4px;
    background-color: darkred;
    transition: 0.6s;
    transform: scaleX(0);
}
.center a:hover:before {
    transform: scaleX(1);
}

Посмотрите пример на CodePen