前提・実現したいこと
スクロールしていくと、要素が次々と現れる、「ScrollReveal」というJSライブラリを使いつつ、
レイアウト崩れを防ぎたいです。
発生している問題・エラーメッセージ
そのアニメーションを誤って併用していることによってこの問題が起きているようです。
↓これを適用させようとすると、
JS
1ScrollReveal().reveal('.animation3', { 2 duration: 2000, 3 origin: 'right', 4 distance: '50px', 5 viewFactor: 0.5, 6 }); 7
背景固定にしているファーストビューの部分や、ほかレイアウトが崩れます。
画像のような状態になってしまいます。
該当のソースコード
↓いっぱい書いてありますが、単純に、要素にあわせて、出てくるスピードを変えたかったので、
このようにしています。
JS
1ScrollReveal().reveal('.animation1', { 2 duration: 1500, 3 origin: 'top', 4 distance: '50px', 5 viewFactor: 0.3, 6 }); 7 8 ScrollReveal().reveal('.animation2', { 9 duration: 1000, 10 origin: 'bottom', 11 distance: '50px', 12 viewFactor: 0.2, 13 }); 14 15ScrollReveal().reveal('.animation3', { ←恐らく問題の記載部分 16 duration: 2000, 17 origin: 'right', 18 distance: '100px', 19 viewFactor: 0.5, 20 }); 21 22 ScrollReveal().reveal('.animation4', { 23 duration: 2000, 24 origin: 'left', 25 distance: '100px', 26 viewFactor: 0.5, 27 }); 28 29 ScrollReveal().reveal('.animation5', { 30 duration: 3500, 31 origin: 'left', 32 distance: '80px', 33 viewFactor: 0.1, 34 }); 35 36 ScrollReveal().reveal('.animation6', { 37 duration: 3500, 38 viewFactor: 0.5, 39 }); 40 41 ScrollReveal().reveal('.animation7', { 42 duration: 3500, 43 origin: 'bottom', 44 distance: '80px', 45 viewFactor: 0.1, 46 }); 47 48 ScrollReveal().reveal('.animation8', { 49 duration: 4000, 50 origin: 'left', 51 distance: '150px', 52 viewFactor: 0.5, 53 opacity: 1, 54 }); 55 56 ScrollReveal().reveal('.animation9', { 57 duration: 1500, 58 origin: 'top', 59 distance: '50px', 60 viewFactor: 0.8, 61 scale: 3, 62 }); 63 64 ScrollReveal().reveal('.animation10', { 65 duration: 1500, 66 viewFactor: 0.2, 67 });
HTML側のクラス名に書き、制御するタイプのライブラリです。
HTML
1<main> 2 <section class="threecommitment"> 3 <div class="threecommitment-content"> 4 5 <div class="box price"> 6 <div class="subject price-content animation1"> 7 <h3>01.PRICE</h3> 8 <h4>高品質な家具をお手頃価格で</h4> 9 <p>テキスト</p> 10 </div> 11 <figure class="animation7"><img src="img/commit01.png" alt="PRICEイメージ画像"></figure> 12 </div> 13 14 <div class="box specialty"> 15 <div class="subject specialty-content animation1"> 16 <h3>02.SPECIALTY</h3> 17 <h4>専門店としての知識と技術</h4> 18 <p>テキスト</p> 19 </div> 20 21 <figure class="animation7"><img src="img/commit02.png" alt="SPECIALTYイメージ画像"></figure> 22 </div> 23 24 <div class="box design"> 25 <div class="subject design-content animation1"> 26 <h3>03.DESIGN</h3> 27 <h4>洗練されたデザイン</h4> 28 <p>テキスト</p> 29 </div> 30 <figure class="animation7"><img src="img/commit03.png" alt="DESIGNイメージ画像"></figure> 31 </div> 32 </div> 33 </section> 34 35 36 <section class="anniversary"> 37 <figure class="animation8"><img src="img/est1990_1.png" alt="メモリアルプレート"></figure> 38 39 <div class="anniversary-content"> 40 <div class="anniversary-content-writing"> 41 <p class="est animation1">EST.<br>1990</p> 42 43 <p class="thankyou animation3">Thank you very much!</p> ←ここで右から出るアニメーションを使っています。 44 45 <div class="text animation7"> 46 <p テキスト</p> 47 </div> 48 </div> 49 </div> 50 </section> 51 </main> 52
CSS
1/*---3COMMITMENTファーストビュー---*/ 2.introduction { 3 background-image: url(../img/back_commitment.jpg); 4 background-size: cover; 5 background-repeat: no-repeat; 6 background-attachment: fixed; 7} 8 ↑これがIOSだとうまくうごかないとのことだったので 9 10@media (max-width: 667px) { 11 .introduction { 12 background-image: none; 13 } 14} 15 ↑スマホバージョンでは、これを解除して、 16 17.introduction-content { 18 width: 50%; 19} 20 21@media (max-width: 667px) { 22 .introduction-content { 23 background: rgba(0, 0, 0, 0.555); 24 padding: 5%; 25 width: 90%; 26 margin: 5% auto; 27 } 28 ↑これはスクロール部分の、透明黒背景の部分です 29 .introduction-content:before { 30 content: ""; 31 display: block; 32 position: fixed; 33 top: 0; 34 left: 0; 35 z-index: -1; 36 width: 100%; 37 height: 100vh; 38 background: url(../img/back_commitment2.jpg) center no-repeat; 39 background-size: cover; 40 -webkit-transform: translate3d(0, 0, 0); 41 transform: translate3d(0, 0, 0); 42 } 43} 44 ↑スマホバージョンの背景画像固定の部分です 45 46.introduction-content .title { 47 padding: 30% 0; 48} 49 50.introduction-writing { 51 padding: 0 10%; 52 height: 100vh; 53 position: -webkit-sticky; 54 position: sticky; 55 top: 0; 56 left: 0; 57} 58 59@media (max-width: 667px) { 60 .introduction-writing { 61 position: static; 62 } 63} 64 ↑一応 position: sticky;もスマホバージョンでは解除しました。 65 66 67 ↓右から出てくるアニメーションを適用させている要素の、CSSです。 68.anniversary-content-writing { 69 width: 90%; 70 padding-bottom: 20%; 71 margin-left: 38%; 72} 73 74@media (max-width: 667px) { 75 .anniversary-content-writing { 76 width: 100%; 77 margin-left: 0%; 78 padding: 0%; 79 } 80} 81 82.anniversary-content .text { 83 width: 55%; 84} 85 86@media (max-width: 667px) { 87 .anniversary-content .text { 88 padding: 10%; 89 } 90} 91 92.anniversary-content .thankyou { 93 font-size: 32px; 94 font-family: "playfair-display", serif; 95 font-style: normal; 96 font-weight: 900; 97 line-height: 1em; 98 font-style: italic; 99 padding: 5% 10%; 100} 101 102@media (max-width: 667px) { 103 .anniversary-content .thankyou { 104 font-size: 24px; 105 padding: 5%; 106 } 107} 108
試したこと
・同様に、JSにscale: 1
を設定したときも同じことが起こりました。
・paddingやmarginを消してみたのですが、そうすると、アニメーション終了時のレイアウトが崩れ、余白もなくなりませんでした。
・「スクロール中にクラスを付与してposition:fixed;を指定しても描画はCPUが行うのでスクロールが終わるまで反映されない」という記事を拝見し、transform: translate3d(0, 0, 0);
を、position:fixed;を設定した要素にいれてみまちたがどうやら見当違いのようでした。
・distanceを、 '10px',にしてみたところ解消されましたが、右からふわっと出てくるアニメーションのよさが消えてしまいました。
JS
1ScrollReveal().reveal('.animation3', { 2 duration: 2000, 3 origin: 'right', 4 distance: '10px', 5 viewFactor: 0.5, 6 });
・これが最後の手でした。いっそ、隠してしまおうと思い、下記を入れてみました。⇒だめでした。
CSS
1body{ 2 overflow-x: hidden; 3}
お聞きしたいことまとめ
- なぜ、右から出てきたり、拡大してから元の大きさに戻る「scale」などを使うと、こうしてレイアウトが一気に崩れてしまうのでしょうか。
- どうして、overflow-x: hidden;が効かないのでしょうか。
長くなってしまい、大変恐縮ですが、どうぞ宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。