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

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

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

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

HTML5

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

Q&A

解決済

1回答

377閲覧

可変する要素の真ん中に配置したい

n2018

総合スコア19

CSS3

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

HTML5

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

0グッド

0クリップ

投稿2022/09/30 10:27

編集2022/10/03 10:00

pictureとsourceを使い、デバイスサイズにあわせて画像が切り替わるTOPを作りました。
そのTOP画像の中央に、切り替わりに対応した画像(h1)を入れようとしているのですがうまくいきません。
positionで制御しようとしましたが切り替わるごとに画像が下の方にいってしまい不自然になってしまいます。
これは画像を切り替えごとに大きさを作り替えないといけないものでしょうか?

お手数をおかけしますがわかる方ご協力いただけると助かります。

切り替わりイメージは以下になります。画像の中央にリアルタイムで配置される画像を作りたいのです。
※TOP画像の上にぴったり重なるように別画像をいれたいのでそれもイメージに反映されています。

イメージ説明

イメージ説明

イメージ説明

イメージ説明

<div id="header_p" class="header_image"> <figure class="bg_haikei"> <p class="fade right"><タイトル</p> <picture> <source media="(min-width:1000px)" sizes="100vw" srcset="https://placehold.jp/1920x1080.png 1920w, https://placehold.jp/3840x2160.png 3840w"> <source media="(min-width:428px)" sizes="100vw" srcset="https://placehold.jp/2048x2732.png 2048w"> <img sizes="(max-width:427px) 100wv" srcset="https://placehold.jp/720x1280.png 720w, https://placehold.jp/1080x1920.png 1080w, https://placehold.jp/1284x2778.png 1284w" alt=""> </picture> </figure> <picture class="fade header_yama"> <source media="(min-width:1000px)" sizes="100vw" srcset="https://placehold.jp/8271x847.png 1920w"> <source media="(min-width:428px)" sizes="100vw" srcset="https://placehold.jp/8274x1094.png 1920w"> <img sizes="(max-width:427px) 100wv" srcset="https://placehold.jp/4504x1095.png 1080w" alt=""> </picture> <h1 class="logo_box"> <img src="https://placehold.jp/1061x240.png" alt="" class="fade begi_logo"> </h1> </div>
body{ font-size:16px; } section{ display: block; margin: 0 auto; } p { line-height:1.7rem; } img { display: block; } .header_image { width:100vw; position:relative; height:100vh; } .bg_haikei { height:100vh; z-index:0; } .header_yama { width:100vw; z-index:2; position: absolute; top:0; left:0; } p,h2 { z-index:4; color:#6D5C51; } .right { text-align:right; position: absolute; top:26px; right:20px; font-size:1.2rem; font-weight:bold; letter-spacing: 0.15rem; } img.begi_logo { position:absolute; display: block; top:40%; width:min(80vw,1133px); margin:0 auto; z-index:6; } main.bg_kiso { width:80vw; margin:0 auto; } .kikkake,.syoukai_n { display:block; width:86vw; margin:0 auto; } section.color_bg1 { background-color:#BFD5A0; padding-top:148px; padding-bottom:257px; margin-left:calc(50% - 50vw); margin-right:calc(50% - 50vw); } .k_midashi { font-size:2.5rem; letter-spacing: 0.15rem; margin-bottom:24px; } .left2 { margin-bottom:88px; } .openbtn>p{ font-size:0.8rem; letter-spacing: 0.1rem; } .syoukai { padding-top:120px; padding-bottom:180px; background:#F5F5F5; } section.color_bg2 { background-color:#F5F5F5; margin-left:calc(50% - 50vw); margin-right:calc(50% - 50vw); } figure.zure1 img{ width:100vw; } figure.zure2 img{ width:53.6vw; margin-left:6.4vw; margin-top:-56px; margin-bottom:56px; } figure.zure3 img{ width:85.9vw; margin-left:14.1vw; }

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

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

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

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

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

hatena19

2022/09/30 11:00

それぞれの画像のサイズが分からないので、HTML内の各画像のURLを下記のページのダミー画像のURLに置き換えてもらえますか。 https://placehold.jp/
n2018

2022/10/03 05:19

失礼いたしました。別の質問と同様入れ替えさせていただきました。
guest

回答1

0

ベストアンサー

最終的にどのようなレイアウトにしたいのか不明なので、
とりあえず、コードをみて気になった点と、レスポンシブ対応にする場合の一般論を回答しておきます。


width:100vw;という設定が散見されますが、100vwは垂直スクロールバーの幅も含まれた幅になります。
垂直スクロールバーが現れた場合、その分画面からはみ出すので水平スクロールバーも出てしまいます。
ここは、width:100%; にしておいた方がいいでしょう。これだと垂直スクロールバーの有無にかかわらず画面幅と同じになり、水平スクロールバーはでません。


img要素に幅(width)が設定されていません。設定されていないとオリジナルのサイズで表示されるので、今回のように画面より大きなサイズの画像だと画面からはみ出てしまいます。
親要素(今回はpicture, h1.logo_box)に希望のサイズを設定してimg要素はwidth:100%;として親要素の幅に合わせるようにするといいでしょう。


全体的なレイアウトをposition: absolute;で位置決めしてますが、position: absolute;を設定した要素は浮いた状態になるので、他の要素からないものとして扱われるので、全体のレイアウトに使うには不適切です。特にレスポンシブ対応にしようとする複雑になりがちです。

現在では、レスポンシブ対応レイアウトは、FlexBoxレイアウトまたはGridレイアウトを使うのが主流です。これで全体的なレイアウトを決めて、position: absolute;は、ある要素を背景画像の中央に配置するとか、特定の位置に重ねて配置するというようなときにピンポイントで使うといいでしょう。


以上の点を考慮して、設定を見直してみてください。


レイアウト画像が提示されましたので、それに合わせてアドバイスするなら、下記になります。

背景画像はCSSのbackground-imagedで設定した方が楽でしょう。
画面幅で画像サイズを変更したいならメディアクエリを使えば可能です。
中央に配置したい要素(画像)は FlexBoxレイアウトで縦横中央に配置すればいいでしょう。

上記をもとに一つのサンプルを作成してみました。

html

1<div class="header"> 2 <div class="fade header_yama"> 3 </div> 4 <div class="header-image"> 5 <h1 class="logo_box"> 6 <img src="https://placehold.jp/1061x240.png" alt="" class="fade begi_logo"> 7 </h1> 8</div>

css

1body { 2 margin: 0; 3} 4.header { 5 width: 100%; 6 height: 100vh; 7} 8.header-image { 9 width: 100%; 10 height: 80vh; 11 background: center / cover no-repeat url(https://picsum.photos/1920/1080); 12 display: flex; 13 justify-content: center; 14 align-items: center; 15} 16.header_yama { 17 width: 100%; 18 height: 20vh; 19 background: center / cover no-repeat url(https://picsum.photos/1500/500); 20} 21h2 { 22 color: #6d5c51; 23} 24.logo_box { 25 width: 80vw; 26} 27.logo_box > img { 28 width: 100%; 29}

CodePenサンプル

投稿2022/09/30 13:30

編集2022/10/03 07:20
hatena19

総合スコア33715

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

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

n2018

2022/10/03 05:58

ご回答ありがとうございます。どのようなレイアウトかわからないとのことだったのでイメージ画像を質問内に追加しています。 それを踏まえてもう一度調べていただくことはできませすでしょうか? 教えていただいた内容で修正してみましたが相変わらず中央にはなりませんでした。 flexやgridでできればしたいですが、調べたときに画像が重なる+重なった画像同士が固定でくっつき続けるにはpositonが適しているとあったのでrelativeで頑張っていたのでした。 もしgridなどでそれができるのならばぜひ教えていただきたいです。 以上、不勉強で恐縮ですがご確認よろしくお願いいたします。
hatena19

2022/10/03 07:13

背景画像はCSSのbackground-imagedで設定した方が楽でしょう。 画面幅で画像サイズを変更したいならメディアクエリを使えば可能です。 中央に配置したい要素(画像)は FlexBoxレイアウトで縦横中央に配置すればいいでしょう。
n2018

2022/10/03 10:06

ご回答ありがとうございます。提示していただいたコードを試したところ、header_yamaの解釈が違ったためにうまくいきませんでした。解説画像を質問文に追加しています。 背景画像とheader_yamaはどちらも上の高さがtop:0;で重なり合っているため、提示していただいたコードではheader_yamaと背景画像の高さを合わせるとheader_yamaが消えて(隠れて)しまいます。 header_yamaの部分をheader-imageより下に配置してmargin-topをマイナスにすれば上で合わせることができましたが、下の要素(文章など)が上についてきてしまうので表示崩れが起きてしまいます。
hatena19

2022/10/03 11:36 編集

background の設定を header-image から、header に移動させたらどうですか。 回答のサンプルを修正しておきました。 background-image に背景画像を設定して、background-size: cover で、画面幅が変わっても、画面サイズに合わせて画像を切り取ってくれます。
n2018

2022/10/05 03:36

修正していただいた内容でもなぜか画像がくっつかずに分離してしまうのと、自己解決しましたのでダイジョブになりました。 ご協力ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問