オンマウス時にラインを左から右に表示、マウスアウト時にラインを右から左に非表示にするようなアニメーションを実装してみます。
サンプルコード
aタグにclassを付けて、そのclassに対して処理を実装してみます。
HTML
<a href="" class="left-to-right">オンマウスでアニメーション</a>
次にCSSです。
ラインは疑似要素で作成して、positionで配置します。
CSS
.left-to-right { display: inline-block; position: relative; } .left-to-right::after { content: ''; display: block; position: absolute; bottom: 0; left: 0; width: 100%; height: 2px; background-color: #000; /* アニメーション用の設定 */ transform: scaleX(0); transform-origin: right center; transition: transform 300ms; } .left-to-right:hover::after { transform: scaleX(1); transform-origin: left center; }
左から右にアニメーションするデモページ
ポイントは15~23行目の部分で、アニメーション自体はtransformのscale()で拡大率を0から1にすることで表示のアニメーションを実装しています。
その際、オンマウス時はtransform-originをleft、マウスアウト時はtransform-originをrightにすることで、アニメーションの基準位置を変更して一方方向に進むアニメーションにしています。
leftとrightを入れ替えることで、右から左へのアニメーションも実装できます。
CSS
.right-to-left { display: inline-block; position: relative; } .right-to-left::after { content: ''; display: block; position: absolute; bottom: 0; left: 0; width: 100%; height: 2px; background-color: #000; /* アニメーション用の設定 */ transform: scaleX(0); transform-origin: left center; transition: transform 300ms; } .right-to-left:hover::after { transform: scaleX(1); transform-origin: right center; }
同様に、上から下も可能です。
縦方向の場合はtransformのscaleY()を使用します。
CSS
.top-to-bottom { display: inline-block; position: relative; } .top-to-bottom::after { content: ''; display: block; position: absolute; bottom: -30px; left: 50%; width: 2px; height: 30px; background-color: #000; /* アニメーション用の設定 */ transform: scaleY(0); transform-origin: center bottom; transition: transform 300ms; } .top-to-bottom:hover::after { transform: scaleY(1); transform-origin: center top; }
コメントが承認されるまで時間がかかります。