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

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

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

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

Q&A

解決済

1回答

25963閲覧

CSSで画像を複数枚、並べて表示したい

yokoyama_takuzo

総合スコア19

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

0グッド

0クリップ

投稿2018/12/11 03:55

編集2018/12/11 07:48

CSSで画像を複数枚、並べて表示したい

その際に、ブラウザの画面のサイズを変えても元の画像の縦横比をそのまま画面サイズに合わせて画像の大きさもそのまま自動的に変わっていく方法が知りたい

PCから見た場合は横並びに、スマートフォンから見た場合は画像を縦並びにしたい

今のところ縦並びにする際には、flex-direction: column;を使う予定です。

自分でいろいろと試してはいるのですがなかなか改善されません

画像を横並びにする場合は特に問題はないのですが、スマホ用に画像を縦並びにしてしまうと縦の画像サイズが変わってくれません

試しにheightをpxではなく100%などと変えてはみるのですがそうすると画像が表示されなくなってしまいます。

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

ブラウザの画面サイズによって、画像の縦のサイズが自動的に変わらない

該当のソースコード

html

1<div class="image"> 2 <div class="img-1"></div> 3 <div class="img-2"></div> 4 <div class="img-3"></div> 5 <div class="img-4"></div> 6</div>

css

1.image { 2 display: flex 3 flex-direction: column; 4 width: 100%; 5;} 6 7.img-1 { 8 width: 100%; 9 height: 620px; 10 background: url(https://placehold.jp/3d4070/ffffff/200x200.png) no-repeat top left; 11 background-size: 100%; 12} 13.img-2 { 14 width: 100%; 15 height: 620px; 16 background: url(https://placehold.jp/200x200.png ) no-repeat top left; 17 background-size: 100%; 18} 19.img-3 { 20 width: 100%; 21 height: 620px; 22 background: url(https://placehold.jp/3d4070/ffffff/200x200.png ) no-repeat top left; 23 background-size: 100%; 24} 25.img-4 { 26 width: 100%; 27 height: 620px; 28 background: url(https://placehold.jp/200x200.png ) no-repeat top left; 29 background-size: 100%; 30}

試したこと

CSS側でそれぞれの画像サイズをwidthとheightを使ってpx単位で決めてあげれば画像が表示されるが、それ以外だと画像が表示されない。
ただ、px単位で画像サイズを決めると、画面サイズに応じてサイズが変わってくれない。

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

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

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

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

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

kei344

2018/12/11 04:56

(質問文は編集できます)質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答1

0

ベストアンサー

素直にimgタグを使うのが早いと思います。
backgroundではなく、imgタグを使用すると何か問題がありますでしょうか?
backgroundを使わないといけない理由がありましたら追記して頂けると助かります。

サンプル(横幅を動かしてみてください。)
https://jsfiddle.net/fno8sebu/

html

1<div class="image"> 2<div class="img-1"><img src="https://placehold.jp/3d4070/ffffff/200x200.png" alt=""></div> 3<div class="img-2"><img src="https://placehold.jp/200x200.png" alt=""></div> 4<div class="img-3"><img src="https://placehold.jp/3d4070/ffffff/200x200.png" alt=""></div> 5<div class="img-4"><img src="https://placehold.jp/200x200.png" alt=""></div> 6</div>

css

1.image {display: flex;} 2img { 3 max-width: 100%; 4}

【追記】
以下のようにwidthとheightを指定し、
background-size: 100%;を指定してください。
画像サイズがバラバラでうまくいかない場合は、background-size: cover;などを使い、うまく見えるように調整するなど、いろいろ試してみてください。

backgroundを使ったサンプル
https://jsfiddle.net/rxte57hw/6/

css

1.img-1 { 2 width: 200px; 3 height: 200px; 4 background: url(https://placehold.jp/3d4070/ffffff/200x200.png) no-repeat top left; 5 background-size: 100%; 6}

【追記2】
少し強引ですが、
padding-topを画像高さ ÷ 画像横幅 × 100%とするやり方があります。

サンプル
https://jsfiddle.net/rxte57hw/11/

参考
https://www.nxworld.net/tips/css-background-aspect-ratio.html

css

1.image { 2 display: flex; 3 flex-direction: column; 4} 5 6.img-1 { 7 width: 100%; 8 background: url(https://placehold.jp/3d4070/ffffff/824x620.png) no-repeat center center; 9 background-size: cover; 10 padding-top: calc(620 / 824 * 100%); 11}

投稿2018/12/11 04:17

編集2018/12/11 08:20
kenreta

総合スコア144

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

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

yokoyama_takuzo

2018/12/11 04:42

回答ありがとうございます。 実は今作っている途中のサイトがもう既にCSSで画像を置いてしまっていて、ちょうどこれからレスポンシブ対応しようとした時に画像サイズの処理がうまくいかずに困っていたところでした。 一応、HTML側をimgで書き換えた方が早いものかとも思ったのですが、今回もしCSSでどうにか出来る方法があればこの際に勉強したいと考えていたところです。そういった方法はご存知でしょうか?
kenreta

2018/12/11 05:11

追記しました。画像サイズが分からないので、今回はシンプルな場合を想定しました。画像サイズがバラバラだけど、見栄え的な問題で同じサイズになるようにしたい場合は、それぞれのwidthとheightを揃えて、background-size:coverを指定すると良い感じに表示してくれます。色々試してみてくださいね。
yokoyama_takuzo

2018/12/11 07:26

回答ありがとうございました。そして何度もすみません、 実は今回最終的にレスポンシブで縦に並べたくて、その際にflex-direction: column;を使おうかと考えていたのですが、縦に並べてしまうとブラウザ画面の大きさによって画像のサイズが変わらないようなのです。 ちなみに画像サイズは824x620で、横並びだと問題なく画像サイズが変わりますが、、 今は一応 width:100%; height:620px; にしています。 この場合だと横幅のサイズは自動的に変わってくれるのですが、縦の幅が固定されてしまい、下部に真っ白な隙間が出来てしまいます。 この場合はもう諦めてhtmlを書き直した方が良いものでしょうか? もし改善方法がないという事でしたら潔くあきらめようと思います。
kenreta

2018/12/11 08:25 編集

確かに、縦に並べた場合、高さを固定してしまっているので、レスポンシブにした場合に隙間ができてしまいますね。 一応、追記2を書きましたが、今回は、 >もしCSSでどうにか出来る方法があればこの際に勉強したいと考えていたところです。 というのを汲んで実現方法を書きました。 単に実現するのであれば前述したとおり「素直にimgタグを使うのが早い」です。「勉強」ではなく「実現させること」が目的であれば、backgroundにこだわる意味はありません。こういう方法もあるんだなぐらいに留めてください。
yokoyama_takuzo

2018/12/11 09:36

とても親切に教えて下さり、本当にありがとうございました。 本当に感謝しています。 今日初めてTeratailを使ってみたのですが、最初の方がこんなに親切な方で本当に感謝しています。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問