マウスホバーで画像を分割させるアニメーションをCSSだけで作る方法
マウスオーバーすると画像が分割されて下層のレイヤーが現れる、という表現をCSSのみで作ってみました。手軽に作れる割にはインパクトが強くてお洒落なので、実用性の面でもオススメです。
目次
まずは完成品
今回紹介するのはこういうエフェクトです。マウスオーバーすると画像が4分割されて上部にスライドし、下のコンテンツが出てきます。
See the Pen Untitled by Leo_8192 (@Leo_8192) on CodePen.
画像の下に色々な情報を入れたりとか、結構面白い使い方が出来そう?
HTML
<div class="split_wrap"> <div></div><div></div><div></div><div></div> <p>斬ッ!!!</p> </div>
2行目にある気持ち悪い4つのdiv
タグがポイント。
CSS
.split_wrap{ display: flex; justify-content: center; align-items: center; overflow: hidden; position: relative; border: 8px solid #fff; min-width: 300px; min-height: 300px; background: #000; box-shadow: 0 4px 16px rgba(0,0,0,0.5); } .split_wrap div{ position: absolute; top: 0; width: 25%; height: 100%; background: url(画像URL) no-repeat; background-size: 300px; transition: 0.5s; } .split_wrap div:nth-child(1){ left: 0; transition-delay: 0s; background-position-x: 0; } .split_wrap div:nth-child(2){ left: 25%; transition-delay: 0.1s; background-position-x: calc(100%/3); } .split_wrap div:nth-child(3){ left: 50%; transition-delay: 0.2s; background-position-x: calc(100%/1.5); } .split_wrap div:nth-child(4){ left: 75%; transition-delay: 0.3s; background-position-x: 100%; } .split_wrap:hover div{ top: -100%; }
ちょいと長いコードですが、やってることは単純です。
- 親要素を
overflow:hidden;
にしておく - 親要素の25%の横幅を持った空の
div
を4つ並べる - その
div
全てに同じ背景画像を指定し、background-position
で位置を調整 - 親要素hover時に、子要素の
div
をtop:0;
にして上にスライドさせる transition-delay
で変化開始のタイミングをずらすのを忘れずに
これだけ。ある程度CSSを触っている人ならすぐに理解できると思います。
んじゃ、色々と応用パターンも作ってみましょう。
応用パターン
※一つ一つ解説するのは大変なんで、ソースが気になる人はCodePenに飛んで見てね。
上下スライド
See the Pen Split_image_1 by Leo_8192 (@Leo_8192) on CodePen.
:nth-child(odd)
とか使えば楽に作れます。
2枚左右スライド
See the Pen Split_image_3 by Leo_8192 (@Leo_8192) on CodePen.
空div
を2枚に減らして、左右にスライドするVerです。
十字切りスライド
See the Pen Split_image_2 by Leo_8192 (@Leo_8192) on CodePen.
ただのゴリ押し。そしてちょっとダサい。
奥行き表現
See the Pen Split_image_3 by Leo_8192 (@Leo_8192) on CodePen.
perspective
を使いたかっただけのやつ。割と気に入ってる。
こんな感じで色々なパターンが作れるんで、興味がある人は色々試してみてください!