波のようなアンダーライン

この記事は約 7 分で読めます。

テキストリンクのホバー時に
アンダーラインをうにょうにょと
波のようにアニメーションさせる
CSSのテクニックと
画像を使わずに
アンダーラインを波線にする
テクニックのご紹介です。

テキストリンクのホバー時に波線

波線のアニメーションは
SVGで描いています。
オリジナルを
少々カスタマイズしたものが以下です。

Flapjacks on a sunny warm afternoon.
.a_wavy {
background: linear-gradient(to bottom, #ff9800 0%, #ff9800 100%);
background-position: 0 100%;
background-repeat: repeat-x;
background-size: 3px 3px;
color: #0033cc;
text-decoration: none;
}
.a_wavy:hover {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg id='squiggle-link' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:ev='http://www.w3.org/2001/xml-events' viewBox='0 0 20 4'%3E%3Cstyle type='text/css'%3E.squiggle{animation:shift .3s linear infinite;}@keyframes shift {from {transform:translateX(0);}to {transform:translateX(-20px);}}%3C/style%3E%3Cpath fill='none' stroke='%23ff9800' stroke-width='2' class='squiggle' d='M0,3.5 c 5,0,5,-3,10,-3 s 5,3,10,3 c 5,0,5,-3,10,-3 s 5,3,10,3'/%3E%3C/svg%3E");
background-position: 0 100%;
background-size: auto 6px;
background-repeat: repeat-x;
color: #c6001c;
font-weight: bold;
text-decoration: none;
}

HTMLはこんな感じになります。

on a <a href="#" class="a_wavy">sunny warm</a> afternoon.

オリジナルのリンクは以下。

画像を使わずにアンダーラインを波線

こちらはSVGなどを使わずに
波線を描いています。

オリジナルはLessなので
CSSに変換し、
カスタマイズしたものが
以下になります。

An error, a warning and
an info walk into a bar.
.error {
position: relative;
font-weight: bold;
}
.error::before {
content: '';
position: absolute;
top: 90%;
width: 100%;
height: 0.25em;
background: linear-gradient(135deg, transparent, transparent 45%, #dc3912, transparent 55%, transparent 100%), linear-gradient(45deg, transparent, transparent 45%, #dc3912, transparent 55%, transparent 100%);
background-size: 0.5em 0.5em;
background-repeat: repeat-x, repeat-x;
}
.warning {
position: relative;
font-weight: bold;
}
.warning::before {
content: '';
position: absolute;
top: 90%;
width: 100%;
height: 0.25em;
background: linear-gradient(135deg, transparent, transparent 45%, #ff9900, transparent 55%, transparent 100%), linear-gradient(45deg, transparent, transparent 45%, #ff9900, transparent 55%, transparent 100%);
background-size: 0.5em 0.5em;
background-repeat: repeat-x, repeat-x;
}
.info {
position: relative;
font-weight: bold;
}
.info::before {
content: '';
position: absolute;
top: 90%;
width: 100%;
height: 0.25em;
background: linear-gradient(135deg, transparent, transparent 45%, #008000, transparent 55%, transparent 100%), linear-gradient(45deg, transparent, transparent 45%, #008000, transparent 55%, transparent 100%);
background-size: 0.5em 0.5em;
background-repeat: repeat-x, repeat-x;
}

HTMLはこんな感じに書きます。

An <span class="error">error</span>,
a <span class="warning">warning</span> and
an <span class="info">info</span> walk into a bar.


複数行に対応していません。
改行すると線が消えてしまうので、
用途は短い文に限られます。

 

オリジナルのリンクは以下。

 

貴重なお時間を割き、
最後まで
ご高覧いただきまして
有難うございました

 

波のようなアンダーライン