CSSで実装する文字に線をつけるホバーエフェクトまとめ
リンクのテキストにカーソルをマウスオーバーした際に、文字に線を引くホバーエフェクトのサンプルをまとめてみました。
フェードインで下線をつける
SAMPLE
<a href="#">SAMPLE</a>
a {
position: relative;
display: inline-block;
}
a::after {
position: absolute;
bottom: .3em;
left: 0;
content: '';
width: 100%;
height: 1px;
background-color: #333;
opacity: 0;
transition: .3s;
}
a:hover::after {
bottom: 0;
opacity: 1;
}
<a>タグでリンクにしたテキストには、デフォルトで下線がつきますが、そのままでは下線だけ個別に色を変えるなどデザインの変更ができないため、新たに擬似要素after
で下線を作ります。
作成した線は、position
で配置して、opacity
で透過して非表示にしておきます。ホバー時は、位置を上に指定し、透過の値を「1」にすることで下からフェードして表示されます。フェードの速度はtransition
で指定しています。
線は、height
で太さ、background-color
で色を変更できます。
SAMPLE
左から下線を引く
ホバーすると左から右へ下線が引かれるエフェクトです。
SAMPLE
<a href="#">SAMPLE</a>
a {
position: relative;
display: inline-block;
}
a::after {
position: absolute;
bottom: 0;
left: 0;
content: '';
width: 0;
height: 1px;
background-color: #333;
transition: .3s;
}
a:hover::after {
width: 100%;
}
擬似要素で作成した線の長さ(width)を、「0」から「100%」に変更することで、線を引くエフェクトを実装しています。
中央から左右へ下線を引く
中央から左右に半分ずつ線が伸びるエフェクトです。
SAMPLE
<a href="#">SAMPLE</a>
a {
position: relative;
display: inline-block;
}
a::after {
position: absolute;
bottom: 0;
left: 50%;
content: '';
width: 0;
height: 1px;
background-color: #333;
transition: .3s;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
}
a:hover::after {
width: 100%;
}
左から線を引く時と同様に、線の長さを「0」から「100%」に変更することで線を伸ばしています。今回は線の位置(left)を予め「50%」(テキストの中央)にしておき、ホバー時に通常の位置にずらすことで、線が中央から左右に伸びているようなエフェクトにしています。
上下に左右から線を引く
下だけでなく、上にも線を引くエフェクトです。
SAMPLE
<a href="#">SAMPLE</a>
a {
position: relative;
display: inline-block;
}
a::before,
a::after {
position: absolute;
content: '';
width: 0;
height: 1px;
background-color: #333;
transition: .3s;
}
a::before {
top: 0;
left: 0;
}
a::after {
bottom: 0;
right: 0;
}
a:hover::before,
a:hover::after {
width: 100%;
}
上の線はもう一つの擬似要素before
で作っています。before
は表示位置を「top、left」で指定することで上線を左から右へ、after
は表示位置を「bottom、right」で指定することで下線を右から左へ線を引いています。
上下に中央から線を引く
上下の線をそれぞれ中央から左右に伸ばすエフェクトです。
SAMPLE
<a href="#">SAMPLE</a>
a {
position: relative;
display: inline-block;
}
a::before,
a::after {
position: absolute;
left: 50%;
content: '';
width: 0;
height: 1px;
background-color: #333;
transition: .3s;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
}
a::before {
top: 0;
}
a::after {
bottom: 0;
}
a:hover::before,
a:hover::after {
width: 100%;
}
文字と線の色を変える
ホバー時に線を入れると同時に文字の色を変えるエフェクトです。
SAMPLE
<a href="#">SAMPLE</a>
a {
position: relative;
display: inline-block;
transition: .3s;
}
a:hover {
color: #13c3ac;
}
a::after {
position: absolute;
bottom: .3em;
left: 0;
content: '';
width: 100%;
height: 1px;
background-color: #333;
opacity: 0;
transition: .3s;
}
a:hover::after {
bottom: 0;
background-color: #13c3ac;
opacity: 1;
}
文字の色も同時にかえる場合は、擬似要素だけでなく<a>タグにもtransition
を設定します。
擬似要素を使って線を実装するテクニックは、線を引くエフェクト以外でも応用が効きそうです。