Вы можете использовать псевдоселектор в сочетании с анимацией свойства transform
. transform-origin
важен, потому что он определяет форму, откуда анимация приходит и возвращается. По умолчанию center
, поэтому я переопределяю его на left
.
.menu a {
position: relative;
text-decoration: none;
font-size: 1.5rem;
}
.menu a::after {
position: absolute;
content: "";
width: 100%;
height: 3px;
top: 100%;
left: 0;
background: #ff7000;
transition: transform 0.5s;
transform: scaleX(0);
transform-origin: left;
}
.menu a:hover::after {
transform: scaleX(1);
}
<a href="#">Plain link</a>
<nav class="menu">
<a href="#">Underline on hover or focus</a>
</nav>