目次
ホバーアニメーションとは
ホバーアニメーションとは、ホバー(マウスオーバー)時に下線や背景などを動かすアニメーションのことを言います。
ホバーは基本的にPCサイトで使用される動作です。スマートフォンやタブレットで閲覧した際は、指でタップした瞬間がホバー状態となります。リンクボタンの場合、アニメーションが全て実行される前にページ推移してしまいますので、注意が必要です。
今回はシンプルですが、リンクなどに使用されるホバーアニメーションの作り方をご紹介します。
左から下線が引かれるアニメーション
最初にご紹介するのは、ホバー時にテキストの左下から右方向に伸びるアニメーションのご紹介です。
HTML
<!-- 左から下線が引かれるアニメーション -->
<nav>
<ul>
<li><a href="#" class="btn">Home</a></li>
<li><a href="#" class="btn">About</a></li>
<li><a href="#" class="btn">Service</a></li>
<li><a href="#" class="btn">Contact</a></li>
</ul>
</nav>
CSS
/* 全ての余白を削除 */
* {
margin: 0;
padding: 0;
}
/* 画面の中央に表示 */
nav {
/* Flexを指定 */
display: flex;
/* 垂直(縦)方向の中央 */
align-items: center;
/* 水平(横)方向の中央 */
justify-content: center;
/* divの高さを画面いっぱいに変更 */
height: 100vh;
}
/* リンクのリスト化 */
ul{
/* 横並びするためにflexを設定 */
display: flex;
/* li間の余白を設定 */
gap: 20px;
/* 先頭の記号を削除 */
list-style: none;
}
/* aタグの基本設定 */
a{
/* 全体をクリックさせるためにblock化 */
display: block;
/* beforeとafterをabsoluteで位置設定するための親要素としてrelativeを設定 */
position: relative;
/* 文字色 */
color: #333;
/* 中央に設置 */
text-align: center;
/* リンクの下線を削除 */
text-decoration: none;
}
/* 左から下線が引かれるアニメーション */
.btn::after{
/* beforeとafterを使用する時は必ず入力 */
content: "";
/* リンクに指定した横幅いっぱいになる様、block化 */
display: block;
/* 位置設定 */
position: absolute;
/* 左 */
left: 0;
/* 下 */
bottom: 0;
/* 下線の横幅 */
width: 100%;
/* 下線の高さ */
height: 2px;
/* 下線の色(背景) */
background-color: #333;
/* 横方向の伸縮設定。初期値は0 */
transform: scaleX(0);
/* 伸縮の初期設置場所。左下 */
transform-origin: left bottom;
/* .5秒でアニメーション */
transition: all .5s;
}
/* マウスオーバー時の下線 */
.btn:hover::after{
/* 横方向の伸縮設定。1にして元の100%に戻す */
transform: scaleX(1);
}
実装
See the Pen hover-animation1 by DREAM NET WORKS (@dnw) on CodePen.
中央から左右に広がるアニメーション
次は、リンクの中央から左右に背景が広がるアニメーションのご紹介です。
HTML
<!-- 中央から左右に広がるアニメーション -->
<nav>
<ul>
<li><a href="#" class="btn">Home</a></li>
<li><a href="#" class="btn">About</a></li>
<li><a href="#" class="btn">Service</a></li>
<li><a href="#" class="btn">Contact</a></li>
</ul>
</nav>
CSS
/* 全ての余白を削除 */
* {
margin: 0;
padding: 0;
}
/* 画面の中央に表示 */
nav {
/* Flexを指定 */
display: flex;
/* 垂直(縦)方向の中央 */
align-items: center;
/* 水平(横)方向の中央 */
justify-content: center;
/* divの高さを画面いっぱいに変更 */
height: 100vh;
}
/* リンクのリスト化 */
ul{
/* 横並びさせるためにflexを設定 */
display: flex;
/* li間の余白を設定 */
gap: 20px;
/* 先頭の記号を削除 */
list-style: none;
}
/* aタグの基本設定 */
a{
/* 全体をクリックさせるためにblock化 */
display: block;
/* beforeとafterをabsoluteで位置設定するための親要素としてrelativeを設定 */
position: relative;
/* 文字色 */
color: #333;
/* 中央に設置 */
text-align: center;
/* リンクの下線を削除 */
text-decoration: none;
}
/* 中央から左右に広がるアニメーション */
.btn{
/* .5秒でアニメーション */
transition: all .5s;
}
/* リンクのマウスオーバー時 */
.btn:hover{
/* 文字色を白に変更 */
color: #FFF;
}
/* アニメーションする背景の設定 */
.btn::after{
/* beforeとafterを使用する時は必ず入力 */
content: "";
/* リンクに指定した横幅いっぱいになる様、block化 */
display: block;
/* 位置設定 */
position: absolute;
/* 上 */
/* 高さを100%にするのでtop(上)でもbottom(下)でもOK */
top: 0;
/* beforeとafterは設定した要素より表示順が高くなるので1段階下げる */
z-index: -1;
/* 横幅 */
width: 100%;
/* 高さ */
height: 100%;
/* 背景色 */
background-color: #333;
/* 横方向の伸縮設定。初期値は0 */
transform: scaleX(0);
/* 横方向の伸縮設定。初期値は0 */
transform-origin: center bottom;
/* .5秒でアニメーション */
transition: all .5s;
}
.btn:hover::after{
transform: scaleX(1);
}
擬似要素(::before / ::after)を使用しているため、z-index(重なり順)を下げないとテキストが隠れてしまうので注意が必要です。
実装
See the Pen hover-animation2 by DREAM NET WORKS (@dnw) on CodePen.
左右から背景が閉じるアニメーション
最後は、先ほどとは逆に、左右から中央に向けて背景が閉じるアニメーションのご紹介です。
HTML
<!-- 左右から背景が閉じるアニメーション -->
<nav>
<ul>
<li><a href="#" class="btn">Home</a></li>
<li><a href="#" class="btn">About</a></li>
<li><a href="#" class="btn">Service</a></li>
<li><a href="#" class="btn">Contact</a></li>
</ul>
</nav>
CSS
/* 全ての余白を削除 */
* {
margin: 0;
padding: 0;
}
/* 画面の中央に表示 */
nav {
/* Flexを指定 */
display: flex;
/* 垂直(縦)方向の中央 */
align-items: center;
/* 水平(横)方向の中央 */
justify-content: center;
/* divの高さを画面いっぱいに変更 */
height: 100vh;
}
/* リンクのリスト化 */
ul{
/* 横並びさせるためにflexを設定 */
display: flex;
/* li間の余白を設定 */
gap: 20px;
/* 先頭の記号を削除 */
list-style: none;
}
/* aタグの基本設定 */
a{
/* 全体をクリックさせるためにblock化 */
display: block;
/* beforeとafterをabsoluteで位置設定するための親要素としてrelativeを設定 */
position: relative;
/* 文字色 */
color: #333;
/* 中央に設置 */
text-align: center;
/* リンクの下線を削除 */
text-decoration: none;
}
.btn{
/* .5秒でアニメーション */
transition: all .5s;
}
.btn:hover{
color: #FFF;
}
.btn::before{
/* beforeとafterを使用する時は必ず入力 */
content: "";
/* リンクに指定した横幅いっぱいになる様、block化 */
display: block;
/* 位置設定 */
position: absolute;
left: 0;
bottom: 0;
z-index: -1;
width: 50%;
height: 100%;
background-color: #333;
transform: scaleX(0);
transform-origin: left bottom;
/* .5秒でアニメーション */
transition: all .5s;
}
.btn:hover::before{
transform: scaleX(1);
}
.btn::after{
content: "";
display: block;
position: absolute;
right: 0;
bottom: 0;
z-index: -1;
width: 50%;
height: 100%;
background-color: #333;
transform: scaleX(0);
transform-origin: right bottom;
transition: all .5s;
}
.btn:hover::after{
transform: scaleX(1);
}
実装
See the Pen hover-animation3 by DREAM NET WORKS (@dnw) on CodePen.
