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

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

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

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

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

453閲覧

position:absolute;でのレスポンシブ対応について

mee1020

総合スコア1

CSS3

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

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2023/12/13 03:59

編集2023/12/14 02:08

実現したいこと

イメージ説明

オープニングアニメーションの作成
・ロゴとテキストの画像を2枚配置
・レスポンシブ対応で画像が重ならないようにしたい。
・アニメーションの挙動について
→はじめはロゴのみ中心からふわっと出る その後画像の位置(左)へ移動
テキストはロゴが左に移動する時に左から右に向かってふわっと出現するようにする

前提

学習中のwebサイト制作でオープニングアニメーションを作成しています。
初めての質問のため、不備があったらすみません。

発生している問題・エラーメッセージ

画像の幅をwidthの設定だけだと画像が被ることはないが、
sp時に画像のサイズが小さくなり過ぎてしまうため、min-widthを設定。
min-widthを設定したことにより画像が重なってしまう。
absoluteの位置指定を%で行ったが、1100pxほどで画像同士が重なってしまう。
なるべく記述をすっきりさせたいのですが、メディアクエリで調節するしかないのでしょうか?
現状の重なっている画像を添付します
イメージ説明

該当のソースコード

html

1<div class="logo"> 2 <img class="logo1" src="images/logo.png" alt=""> 3 <img class="text" src="images/text.png" alt=""> 4</div>

css

1 2.logo { 3 width: 100%; 4 height: 100%; 5 position: relative; 6} 7/*ロゴ1がふわっと浮き出る*/ 8.logo1 { 9 width: 3%; 10 min-width: 30px; 11 height: auto; 12 position: absolute; 13 top: 50%; 14 left: 50%; 15 transform: translate(-50%,-50%); 16 animation: fadeUp 1.5s forwards,moveLeft 1.5s forwards 2s; 17 opacity: 0; 18 object-fit: contain; 19} 20 21@keyframes fadeUp { 22 from { 23 opacity: 0; 24 } 25 to { 26 opacity: 1; 27 } 28} 29@keyframes moveLeft { 30 0% { 31 } 32 100% { 33 left: 40%; 34 } 35} 36 37.text { 38 width: 15%; 39 min-width: 200px; 40 height: auto; 41 position: absolute; 42 top: 51%; 43 left: 45%; 44 transform: translate(-50%,-50%); 45 opacity: 0; /* 最初は非表示に設定 */ 46 animation: fadeInAndMove 2s forwards 2s; /* アニメーションの適用 */ 47 object-fit: contain; 48} 49@keyframes fadeInAndMove { 50 0% { 51 opacity: 0; 52 } 53 100% { 54 opacity: 1; 55 left: 50%; 56 } 57} 58}

調査したこと

画像の配置、サイズ調整について調査
absolute時の配置の単位を色々変えてみましたが、重なってしまうのは調整できませんでした。

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

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

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

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

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

yambejp

2023/12/13 04:03

position:absoluteはマストなのでしょうか?
mee1020

2023/12/13 05:18

cssの内容を修正しました。 animationプロパティで位置調整が必要なため、今回はabsoluteを使用しました。
Lhankor_Mhy

2023/12/13 05:22

個人的には translate で アニメーションさせればいいように思いますが、こだわりがあるということで了解いたしました。
Lhankor_Mhy

2023/12/13 05:30

元のコードには、 html, body { height: 100%; } のようなものが含まれていませんか?
mee1020

2023/12/13 06:04

absoluteしなくてもtranslateのみでアニメーション可能なんですね!一度調べてみます。 body { width: 100vw; height: 100vh; } と設定しております。
guest

回答2

0

ベストアンサー

中のロゴをラップしてしまえば良いだけのような気がしますが・・・

CSS

1<style> 2.logo { 3 width: 100%; 4 height: 100%; 5display:flex; 6} 7.wrap { 8display:flex; 9position: absolute; 10top:50%; 11left:50%; 12translate:-50% -50%; 13border:1px solid; 14align-items: center; 15} 16 17.logo1,.text { 18border:1px solid; 19} 20.logo1{ 21height:30px; 22} 23.text { 24height:40px; 25}</style> 26<div class="logo"> 27<div class="wrap"> 28<img class="logo1" src="images/logo.png" alt="logo1"> 29<img class="text" src="images/text.png" alt="text"> 30</div> 31</div>

とりあえずアニメーションもいれておきます
具体的にどういう挙動を希望しているかわからないので適当ですが
absoluteが不要なのはご理解いただけると思います

CSS

1<style> 2.logo { 3 width: 100%; 4 height: 100%; 5display:flex; 6} 7.wrap { 8display:flex; 9position: absolute; 10top:50%; 11left:50%; 12translate:-50% -50%; 13border:1px solid; 14align-items: center; 15} 16 17.logo1,.text { 18border:1px solid; 19} 20.logo1{ 21opacity:0; 22height:30px; 23animation: fadeUp 1.5s forwards,moveLeft 1.5s forwards 2s; 24transform:translateX(40px); 25} 26@keyframes fadeUp { 27 from { opacity: 0;} 28 to { opacity: 1;} 29} 30 31@keyframes moveLeft { 32 100% {transform:translateX(0px); } 33} 34.text { 35opacity: 0; 36height:40px; 37animation: fadeInAndMove 2s forwards 2s; 38transform:translateX(50px); 39} 40@keyframes fadeInAndMove { 41 100% { opacity: 1;transform:translateX(0px); } 42} 43</style> 44<div class="logo"> 45<div class="wrap"> 46<img class="logo1" src="images/logo.png" alt="logo1"> 47<img class="text" src="images/text.png" alt="text"> 48</div> 49</div>

投稿2023/12/13 06:59

編集2023/12/14 00:52
yambejp

総合スコア114856

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

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

mee1020

2023/12/13 15:25

回答ありがとうございます。 ラップしてみましたが、アニメーションがうまくいかなくなってしまうため、 もう少し調べてみます!
yambejp

2023/12/14 00:49

具体的な動作の説明がないのでなんとも言えないですね なんか適当に図示してもらえませんか?
mee1020

2023/12/14 02:44

2個目にいただいたCSSでアニメーションと配置の調整で、希望通りの挙動になりました! 丁寧にありがとうございました。
guest

0

まず、前提として、
30px / 3% = 1000px
200px / 15% = 1333.33px
なので、ビューポートを小さくしていった時には text の方からズレが始まります。

さて、min-width が影響しない状態ですと、
logo の右端:40% + 3% / 2 = 41.5%
text の左端:50% - 15% / 2 = 42.5%
ですので、常に1%の隙間があることになります。ですので重なることはありません。

次に、text に min-width が影響した状態は
logo の右端:40% + 3% / 2 = 41.5%
text の左端:50% - 200px / 2
です。
重なる場合というのは、logo の右端 > text の左端 ですから、重ならない条件は text の left を x とすると
x - 200px / 2 >= 41.5%
x >= 41.5% + 100px
です。

その次に、両者に min-width が影響した状態は
logo の右端:40% + 30px / 2
text の左端:(41.5% + 100px) - 200px / 2
です。
同様に重ならない条件は logo の left を y とすると
(41.5% + 100px) - 200px / 2 >= y + 30px / 2
y <= 41.5% - 15px
です。

以上の条件で拘束すれば重なることはないはずです。ご参考にしていただければ幸いです。

min() - CSS: カスケーディングスタイルシート | MDN
max() - CSS: カスケーディングスタイルシート | MDN

投稿2023/12/13 06:18

編集2023/12/13 08:29
Lhankor_Mhy

総合スコア36134

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

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

Lhankor_Mhy

2023/12/13 06:21

個人的には、少しレイアウトを変更するだけでこんな面倒な計算をやり直さなきゃいけないのはご勘弁願いたいので、このようなケースで絶対配置を採用することはないと思います。
mee1020

2023/12/13 15:29

回答と、大変な計算までしていただいてありがとうございます。 私には内容が難しく、すぐ理解できそうにないので、widthのmin,max関数を よくよく調べてみます。
Lhankor_Mhy

2023/12/14 00:30

width は関係ないと思います。ご不明の点があればコメントでお知らせください。
mee1020

2023/12/14 02:47

%とpxの考え方について難しくて、、、もう少し単位の勉強詳しくしてみます。 丁寧に対応していただいてありがとうございました!
Lhankor_Mhy

2023/12/14 03:34

絶対配置はややこしいですから仕方がないです。使わなくていいなら使わないのが一番です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問