[CSS] 画像を左端から右端に幅を広げてアニメーション表示させたい
画像のシンプルなアニメーション表現として、端からシュッとスライドさせる方法があります。
本記事では、このようなアニメーションをCSSだけで行う方法を解説します。
サンプルコード
html
<div class="left_to_right">
<img src="xxx.jpg" alt="">
</div>
CSS
.left_to_right img {
max-width: 100%;
animation-name: anime_left_to_right;
animation-fill-mode: forwards;
animation-duration: 1s;
animation-iteration-count: 1;
animation-timing-function: ease;
animation-delay: 0s;
animation-direction: normal;
}
@keyframes anime_left_to_right {
0% {
clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%);
}
100% {
clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
}
}
要素を指定した形にくり抜くクリッピングを行うことができる「clip-path」プロパティを使用します。
プロパティの値をanimationプロパティで変動させることで、幅が徐々に広がっていく動きを実現しています。
アニメーションの開始段階(0%)時点では、幅なしでクリッピングするよう設定し、
終了段階(100%)で横幅いっぱいになるよう設定します。
右端から左端に幅を広げるアニメーション
0% {
clip-path: polygon(100% 0%, 100% 0%, 100% 100%, 100% 100%);
}
アニメーションの開始段階(0%)でのクリップ範囲を変えることで、アニメーションの向きを変えることができます。
上端から下端に高さを広げるアニメーション
0% {
clip-path: polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%);
}
下端から上端に高さを広げるアニメーション
0% {
clip-path: polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%);
}
マウスオーバーしたときに幅を広げるアニメーション
「transition」プロパティを使って、通常時、マウスオーバー時それぞれに「clip-path」プロパティを設定することで、マウスオーバー時にアニメーションさせることができます。
html
<div class="left_to_right_hover">
<img src="xxx.jpg" alt="">
</div>
CSS
.left_to_right_hover {
background-color: #3388dd;
}
.left_to_right_hover img {
display: block;
max-width: 100%;
transition: clip-path 0.5s;
clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%);
}
.left_to_right_hover:hover img {
clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
}
ご質問など受け付けています
記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。
ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。