画像を横から徐々に表示するCSSアニメーション
[目次]
見本のアニメーション
こんな感じのアニメーション
CSSアニメーションのコードと解説
<figure class="wrap">
<img src="img/animation.jpg" alt="" >
</figure>
.wrap {
overflow: hidden;
position: relative;
}
.wrap::before {
animation: displayImg .5s linear forwards;
background: #f7f7f7;
content: '';
pointer-events: none;
position: absolute;
inset: 0;
z-index: 1;
}
@keyframes displayImg {
100% {
transform: translateX(100%);
}
}
HTMLとCSSはこちらです。
これでアニメーションは動きます。
このアニメーションの仕組みは、背景色と同じ色の長方形を画像の上から重ねています。その長方形を右に動かすことで、下にある写真を表示させています。
ただし、スクロールしてその場所に来た時にアニメーションさせたい場合はこの後の説明もお読みください
CSSの解説
animation: displayImg .5s linear forwards;
CSSのアニメーションを指定しています。
displayImg
はアニメーションの名前です。
このアニメーションを0.5秒でlinear
という動き方をさせるという記述です。
forwards
は、アニメーション終了後に最後の状態(100%)がそのまま適用されるという意味です。
つまり、一度動いた後は最後の状態のまま表示されるということですね。
background: #f7f7f7;
これはbody背景と同じ色を指定してください。
上から背景と同じ色の長方形を重ねているので、敢えて他の色にしたい場合は好きな色を指定してください
position: absolute; inset: 0;
insetはtop
・right
・bottom
・left
の一括指定です。
margin
の一括指定と同じ構文で指定できます。
4つ書くと上→右→下→左となり、3つ書くと上→左右→下というような指定の仕方です。
inset: 0;
は
top: 0;
right: 0;
bottom: 0;
left: 0;
と同じ意味を表します。
これで、親要素であるwrap(画像)と同じサイズの長方形を同じ位置に配置したことになり、それを動かす為にcssアニメーションを適用します。
transform: translateX(100%);
アニメーションでは、100%のタイミングでtranslateX
ですので、X軸方向に100%の位置まで動かすという指定をしています。
画像の左から100%の位置に移動します。
wrap
に入っているoverflow: hidden
が効いていて長方形は見えなくなるということですね。
スクロールでその場所に来た時にアニメーションする
スクロールでその場所に来たときにアニメーションさせる場合は、jQueryを使い、指定場所に来た時にclassをつける方法が一般的です。
jQueryのコードを紹介しておきます。
$(window).scroll(function () {
$('.wrap').each(function () {
var hit = $(this).offset().top;
var scroll = $(window).scrollTop();
var wHeight = $(window).height();
var customTop = 100;
if (hit + customTop < wHeight + scroll) {
$(this).addClass("active");
}
});
});
この書き方で、「wrap
というclassがついている要素」がスクロールで該当場所に来た時に、active
というclassが付与されます。
customTop=100なのでこの数値を変更するとタイミングをずらすことができます。
jQueryの読み込み→このコードを記述でactiveがつきますので、activeがついた状態の時にアニメーションをかければ、スクロールで該当箇所に来た時にアニメーションさせることができます。
.wrap {
overflow: hidden;
position: relative;
opacity: 0;
}
.wrap.active {
opacity: 1;
}
.wrap.active::before {
animation: displayImg .5s linear forwards;
background: #f7f7f7;
content: '';
inset: 0;
pointer-events: none;
position: absolute;
z-index: 1;
}
@keyframes displayImg {
100% {
transform: translateX(100%);
}
}
.wrap.active::before
とすることで、wrapにactiveがついた状態という指定をすることができます。
初期状態のwarpにopacity: 0;
をwrap+activeにopacity: 1;
追加しています。
最初にチラッと表示してしまうのを防ぐ為です。
いいなと思ったら
TAPしてね♡↓
Contact Form 7のラジオボタンカスタム 【CSS】内側のボーダーでくり抜いたような長方形の作り方
コメントは承認後に表示されます。