【HTML/CSS】画像フェードインアニメーション
概要
以下のアニメーションをCSSで実装します
①3枚の画像が順番に切り替わり表示する
HTML
<div id="home">
<ul class="fade"> <!-- スライドイメージ -->
<li><img src="images/mainvisual1.jpg" alt=""></li>
<li><img src="images/mainvisual2.jpg" alt=""></li>
<li><img src="images/mainvisual3.jpg" alt=""></li>
</ul>
</div><!-- /home -->
Sass
/*------------------------------------------- #home
-------------------------------------------*/ #home {
height : 720px; /* ホームセクションの高さを設定 */
position : relative; /* 相対位置を設定 */
/* 画像フェードインアニメーション */
.fade {
li {
width : 75%; /* 画像の幅を設定 */
position: absolute; /* 絶対位置を設定 */
top : 0; /* 上端に配置 */
right : 0; /* 右端に配置 */
opacity : 0; /* 最初は不透明度を0に設定 */
animation: fade 15s infinite; /* fadeアニメーションを15秒ごとに無限に繰り返し実行 */
/* 画像ごとにアニメーション遅延を設定 */
&:nth-child(1) {
animation-delay : 0s; /* 1番目の画像の遅延時間を0秒に設定 */
}
&:nth-child(2) {
animation-delay : 5s; /* 2番目の画像の遅延時間を5秒に設定 */
}
&:nth-child(3) {
animation-delay : 10s; /* 3番目の画像の遅延時間を10秒に設定 */
}
/* 画像のサイズを調整 */
img {
width : 100%;
height : 720px;
object-fit : cover; /* 画像を領域に合わせて調整 */
}
/* 画像に影を追加 */
&::after {
content : ""; /* 疑似要素を生成 */
position : absolute; /* 絶対位置を設定 */
top : 0; /* 上端に配置 */
bottom : 0; /* 下端に配置 */
left : 0; /* 左端に配置 */
right : 0; /* 右端に配置 */
box-shadow : inset 0px 0px 20px 20px #fff ; /* 影を追加 */
}
}
}
/* 画像フェードインアニメーションのキーフレーム */
@keyframes fade {
0% { opacity: 0;} /* 非表示の状態からスタート */
5% { opacity: 1;} /* 15%になるまでの間に少しづつ画像を表示(フェードイン)させる */
30% { opacity: 1;} /* そこから30%の時点までは画像を表示させたままの状態を維持し */
45% { opacity: 0;} /* 45%の時点に向けて画像を非表示(フェードアウト)する */
100% { opacity: 0;} /* そこから100%まで非表示の状態を維持する */
}
}
解説
li {
width : 75%; /* 画像の幅を設定 */
position: absolute; /* 絶対位置を設定 */
top : 0; /* 上端に配置 */
right : 0; /* 右端に配置 */
opacity : 0; /* 最初は不透明度を0に設定 */
animation: fade 15s infinite; /* fadeアニメーションを15秒ごとに無限に繰り返し実行 */
横幅を指定し絶対位置を指定します※相対指定は親要素に設定済み
topとrightを0にすることで右寄せにします
opacity0で完全透明にし、後程CSSアニメーションで表示させます
"animation"
アニメーションを要素に適用するためのプロパティ
"fade"
アニメーション名の定義※JavaScriptでのアニメーション関数に似ている
"15s"
アニメーション期間(duration)を指定※アニメーションを一巡するのに15秒
"infinite"
アニメーションの繰り返し回数※無限に繰り返す
以上によって「fade」というアニメーションが1周15秒かけて実行され、
無限に繰り返されます。
遅延設定
/* 画像ごとにアニメーション遅延を設定 */
&:nth-child(1) {
animation-delay : 0s; /* 1番目の画像の遅延時間を0秒に設定 */
}
&:nth-child(2) {
animation-delay : 5s; /* 2番目の画像の遅延時間を5秒に設定 */
}
&:nth-child(3) {
animation-delay : 10s; /* 3番目の画像の遅延時間を10秒に設定 */
}
3枚の画像をそれぞれnth-childで指定し
アニメーションを開始するか"animation-delay"を設定。
1枚目が0秒なので即反映
2枚目が5秒後に反映
3枚目が10秒後に反映
画像の内側の影設定
/* 画像に影を追加 */
&::after {
content : ""; /* 疑似要素を生成 */
position : absolute; /* 絶対位置を設定 */
top : 0; /* 上端に配置 */
bottom : 0; /* 下端に配置 */
left : 0; /* 左端に配置 */
right : 0; /* 右端に配置 */
box-shadow : inset 0px 0px 20px 20px #fff ; /* 影を追加 */
}
::after疑似要素が親要素であるliに対して配置する設定です。
この四方を全て0にすることで疑似要素を親要素に対して完全に覆う事が出来ます。
覆うのはbox-shadow
要素の内側に20pxのぼかしを持つ白い色の影を追加
画像フェードインアニメーションのキーフレーム
/* 画像フェードインアニメーションのキーフレーム */
@keyframes fade {
0% { opacity: 0;} /* 非表示の状態からスタート */
5% { opacity: 1;} /* 5%になるまでの間は非表示のまま */
30% { opacity: 1;} /* 30%になるまでの間に画像を徐々に表示(フェードイン) */
45% { opacity: 0;} /* 45%の時点まで画像を表示したまま */
100% { opacity: 0;} /* 最終的に非表示の状態へ */
”fade”という名前のアニメーションを定義していて、内容は要素の透明度(opacity)を時間の経過とともに変化させています。
%はアニメーションの進行状況のことで
0%が開始時点 → 100%が終了時点
0%では完全透明の状態(opacity 0)
5%~徐々に表示し30%で完全表示
45%まで表示させ続けて
45%から100%にかけて徐々に完全透明にする
この記事が気に入ったらサポートをしてみませんか?