質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

解決済

1回答

1592閲覧

cssのKeyframesとanimationのコードについて

suzuharu

総合スコア1

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

0グッド

0クリップ

投稿2022/06/18 08:44

cssのアニメーションの実装をしているのですが
初めてのことで苦戦しており、教えいただける方いらっしゃいますでしょうか。

やりたいこと:画像が切り替わるアニメーションをつけたいです。

・1枚目の画像が消え切る前に2枚目の画像を表示させたいのですが、現状1枚目が消え切ってから2枚目が出てくる形になっています。
どこで制御できるのかお教えいただきたいです。

・3枚の画像の切り替えだとして、3枚目が終わったら途切れることなく1枚目の表示に行きたいのですが、うまくいかず苦戦しています。
コンテンツによって切り替えたい画像の枚数が異なるためそれぞれの枚数ごとに記述しようと思っており、各記述箇所の意味を教えていただけますと幸いです。

様々なサイトで調べては見たものの、自分の記述に当てはめることが難しく、質問させていただきました。
解決いただける方、何卒よろしくお願いいたします。

html

1<div class="slide_3p_main> 2 <img class="img_test" src="images/img01_2.jpg" > 3 <img class="img_test" src="images/img01_3.jpg"> 4 <img class="img_test" src="images/img01_4.jpg"> 5 </div>

css

1.slide_3p_main{ 2position: relative; 3 width: 509px; 4 height: 693px; 5} 6.img_test { 7 position: absolute; 8 width: 100%; 9 opacity: 0; 10 animation: change-img-anim 10s infinite; 11} 12.img_test:nth-of-type(1) { 13 animation: change-img-anim-first 10s infinite; 14 animation-delay: 10s; 15} 16.img_test:nth-of-type(2) { 17 animation-delay: 20s; 18} 19.img_test:nth-of-type(3) { 20 animation-delay: 30s; 21} 22@keyframes change-img-anim { 23 0%{ opacity: 1;} 24 20%{ opacity: 1;} 25 30%{ opacity: 1;} 26 35%{ opacity: 0;} 27 100%{ opacity: 0;} 28}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

下記でどうでしょう。

css

1.slide_3p_main{ 2position: relative; 3 width: 509px; 4 height: 693px; 5} 6.img_test { 7 position: absolute; 8 width: 100%; 9 opacity: 0; 10 animation: change-img-anim 24s infinite; 11} 12.img_test:nth-of-type(1) { 13 animation-delay: 0s; 14} 15.img_test:nth-of-type(2) { 16 animation-delay: 8s; 17} 18.img_test:nth-of-type(3) { 19 animation-delay: 16s; 20} 21@keyframes change-img-anim { 22 0%{ opacity: 0;} 23 16.7%{ opacity: 1;} 24 33.3%{ opacity: 1;} 25 50%{ opacity: 0;} 26 100%{ opacity: 0;} 27}

Codepen サンプル
css animation: Image fade switching

@keyframesの設定については、私の場合は下記のような手順で計算します。

まずは手書きでアニメーションの図を書きます。
例えば、一つの画像の表示時間が12秒で、画像の切り替えの重なりを4秒とすると下記のような図になります。

イメージ説明

ここから、一つの画像が表示され消えてから、次に表示されるまでのサイクルは24秒とわかります。そこでanimation-durationは24sとします。

一つの画像のアニメーションは
0s→4s Fadein
4s→8s 表示
8s→12s Fadeout
12s→24s 非表示
となります。
これを%に変換して@keyframesの設定とします。

4÷24≒16.7%
8÷24≒33.3%
12÷24=50%

投稿2022/06/18 11:27

編集2022/06/18 12:18
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suzuharu

2022/06/19 03:05

hatena19様 ご回答いただきありがとうございます。 図で見ることで理解ができました。大変助かりました。 実際に当てはめてみたところ途切れることなく表示されるようになったのですが 2枚目から3枚目の切り替わりの時だけ他の切り替わりとは違うスピードで切り替わるようでして、原因などお分かりになりますでしょうか。 (2枚目から3枚の切り替わりの時は2枚目が消えかかる前に3枚目が出てきてしまいます) また「opacity: 1;」になるのは16.7%と33.3%の時ですがここの理屈が理解できておらず お助けいただくこと可能でしょうか。 お手数おかけしますが何卒よろしくお願いいたします。
hatena19

2022/06/19 03:31

> 2枚目から3枚目の切り替わりの時だけ他の切り替わりとは違うスピードで切り替わるようでして、 切り替わりのスピードはどれも4秒のはずなのでおなじはずです。 切り替え部分はフェイドアウト、フェイドインが重なってますが、画像の色の濃さが違うと違うように見えるかもしれません。薄い色だと早く消えるように感じるだろうし、現れるのは遅く感じると思います。これは人間の感覚の問題ですのでしかたないかと。 > また「opacity: 1;」になるのは16.7%と33.3%の時ですがここの理屈が理解できておらず 0%(0秒)→16.7%(4秒) 間がフェイドイン( opacity: 0 → 1 に変化) 16.7%%(4秒)→33.3%(8秒) 間が表示( opacity: 1 ) 33.3%%(8秒)→50%(12秒) 間がフェイドアウト( opacity: 1 → 0 に変化) 50%(12秒)→100%(24秒) 間は非表示( opacity: 0 ) ということです。
suzuharu

2022/06/19 12:28

hatena19様 ご回答いただきありがとうございます。 画像による錯覚のようなものなのですね、、、。 「opacity: 1;」についてもありがとうございます。 理解できました。 この度は丁寧にご説明いただきありがとうございました。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問