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

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

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

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

CSS

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

Q&A

2回答

1477閲覧

display:table で横並びになった画像サイズを自動で揃える記述は可能?

Mimizk_50

総合スコア0

HTML

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

CSS

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

0グッド

1クリップ

投稿2020/10/11 13:35

前提・実現したいこと

ブログを書いています。
その際、下記のような** 写真の段組み** をよく作ります。
従来は table 機能でやっていましたが、今後は CSS に記述した設定を呼び出すかたちで実現したいと考えています。

イメージ説明

写真 A・B・C で段組みを構成します。
その際、画像にその場限りの width や padding の指定をしない ことが条件です。
画像に個別の条件付けをせずとも、自動的にこのレイアウトが成立する CSS を考えることが、この取り組みの重要な条件です。

この際私が難しさを感じている主因は、A・B・C の縦横比が異なる場合がしばしば起こる点にあります。
不揃いな画像でも自動的にこのレイアウトに収束する、CSS と HTML を書き出したい。

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

実際にたどり着いた状況がこちらです。

イメージ説明

該当のソースコード

HTML

1<div class="cover"> 2 <div class="box"> 3 <div class="cell_A"> 4 5 <a href="https://teratail-v2.storage.googleapis.com/uploads/contributed_images/9c83f35b2adeab985d814364018b5242.png"><img src="https://teratail-v2.storage.googleapis.com/uploads/contributed_images/9c83f35b2adeab985d814364018b5242.png" alt="画像A"> 6 7 </div> 8 <div class="cell_B"> 9 10 <a href="https://teratail-v2.storage.googleapis.com/uploads/contributed_images/104e6657f44ad40831196f0c4eccda11.png"><img src="https://teratail-v2.storage.googleapis.com/uploads/contributed_images/104e6657f44ad40831196f0c4eccda11.png" alt="画像B"> 11 12 </div> 13 </div> 14 <div class="box"> 15 <div class="cell_C"> 16 17 <a href="https://teratail-v2.storage.googleapis.com/uploads/contributed_images/7521431933a264b39afd5ad35199d1de.png"><img src="https://teratail-v2.storage.googleapis.com/uploads/contributed_images/7521431933a264b39afd5ad35199d1de.png" alt="画像C"> 18 19 </div> 20 </div> 21</div>

css

1div.cover { 2 width: 100%; 3 margin-top: 5em; 4} 5 6div.cover div.box { 7 display: table; 8 max-width: 540px; 9} 10 11div.cover div.box div.cell_A { 12 display: table-cell; 13 padding-right: 10px; 14 align: left; 15} 16 17div.cover div.box div.cell_B { 18 display: table-cell; 19 padding-left: 10px; 20 align: right; 21} 22 23div.cover div.box div.cell_C { 24 display: table-cell; 25 max-width: 540px; 26 padding-top: 20px; 27}

試したこと

display:table の標準仕様では、隣り合う table-cell は等幅になるそうですね。
まずはこれが不等幅になる記述を調べました。
それについては単純な横幅の指定でひとまず回避できるようになりましたが、縦幅も同時に調整できる記述については、全く道筋を立てられずにいます。

挿入される画像それ自体には、width 指定をしていません。
2000px くらいある無垢の画像が 540px の段組みに収まっている体裁は、あくまで、画像を収める div.cell の大きさ(小ささ)によって押しつぶされるようにして成り立っている、と理解しています。

補足情報

「CSS の記述で画像の大きさをコントロールする」動機があります。
私がブログを書くようになって15年以上経つのですが、これまでは HTML 編集の table 機能で “写真の段組み” を作ってきました。
そのように個別の width や padding を設定して構わないなら、希望するレイアウト自体はすぐに完成します。

しかしながら、先述の通り長い期間にわたって文章を書き続けていると、周囲の環境の変化が必ず起こり、文章の体裁を見直さなければならない時がきっと訪れます。
例えば、スマートフォンでの視聴は過去には全く存在しない要請ですし、パソコンにせよ、モニターサイズは常に大型化してきました。
10年前であれば2カラムのブログ本文表示欄は 700px 程度が関の山でしたが、現在は 900px くらいが標準ではないでしょうか。

貼付した画像に対して個別に width や style を設定して済ませた場合、たくさん投稿するほど、その修正は不可能に近づきます。
これまで「table 機能で書けるから」と不勉強のまま過ごしてきましたが、元栓をひねるように全ての画像サイズが管理できる ・・・そういう記述方法を確立しておく必要性を感じ、CSS について調べ始めました。
もしかするとかなり難しいことを考えているのかもしれませんが、素人にはその判断すらつきません。
機能が実現できるなら、display:table にこだわる必要はありません。
ぜひとも知恵をお貸しください。

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

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

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

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

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

Lhankor_Mhy

2020/10/12 04:39

HTMLは変更してよいのですか?
Mimizk_50

2020/10/12 05:27

こんにちは。 全く新しい書き方で構いません。 display:table を使っているのも、数ある知識の中から最適と思われる方法を選んだ ・・・のではなく、今まで table タグを使って書いていたのに似ているから自然と手が伸びただけと言えます。書き方だってデタラメな部分があるはずです。
guest

回答2

0

これは確かになかなかの難問ですね。。

ブログなどではなく一般的なWebサイトであれば画像のアスペクト比をルールで決めてしまうか、JavaScriptを用いた実装を検討する問題のように思えます。

回答にはなっていませんが、もしこのようなパーツが実現したとしても、2カラム部分に入れる画像それぞれの縦横比によっては要件は満たすもののかなり見づらい表示になってしまうような気もします。
(高さはそろっているが片方がものすごく大きく表示されてしまうなど)

投稿2020/10/19 16:44

tsuyo_244

総合スコア219

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

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

Mimizk_50

2020/10/20 05:24

こんにちは。 以前の回答者の方からも「難しい」という意見が聞かれ、だんだん無理筋な内容なのではないかと感じられてきたところです・・・。 なんとはなしに Facebook を眺めていた時、Facebook でさえ比率は整っていない・整っているように見えてその実すこしだけ画像どうしの間に隙間があるということに気づきました。 ド級に難しい内容なのかも・・・。 見にくくなってしまうかもしれないとのことですが、今までのところ、このようなことを手動で行ってきました。 ですので見た目に関しては、私の撮影した画像(主に2台のカメラとスマートフォン)を組み合わせている限りでは主観的に不満のないものと思えます。
guest

0

こんにちは。

これは難しいですね。

サンプル

html

1 <div class="cover"> 2 <div class="box1"> 3 <img src="https://teratail-v2.storage.googleapis.com/uploads/contributed_images/9c83f35b2adeab985d814364018b5242.png" alt="画像A"> 4 <img src="https://teratail-v2.storage.googleapis.com/uploads/contributed_images/104e6657f44ad40831196f0c4eccda11.png" alt="画像B"> 5 </div> 6 <div class="box2"> 7 <img src="https://teratail-v2.storage.googleapis.com/uploads/contributed_images/7521431933a264b39afd5ad35199d1de.png" alt="画像C"> 8 </div> 9 </div>

css

1 .cover{ 2 display: flex; 3 flex-flow: column; 4 width: min-content; 5 margin: auto; 6 } 7 .box1{ 8 display:flex; 9 width: max-content; 10 height: 50vh; 11 } 12 .box1 img{ 13 height: 100%; 14 } 15 .box2 img{ 16 width: 100%; 17 }

サンプルだとそれなりにできているように見えますが、スクリーンサイズによっては横スクロールが必要になります。
おそらく、aspect-ratio を使ったメディアクエリで対応させれば、それなりの感じになるんだろうとは思いますが……

参考:
aspect-ratio - CSS: カスケーディングスタイルシート | MDN

投稿2020/10/12 06:22

Lhankor_Mhy

総合スコア36960

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

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

Mimizk_50

2020/10/12 08:34

やはり難しい内容・・・なのですね・・・。ご苦労をおかけします。 ひとまず教えていただいた CSS と HTML を実行してみました。確かに、画像 A・B が、希望する縦横比で収まっています。すごい。 一方で、段組み 全体が過剰な大きさになりました。まずは PC ブラウザで見ていますが、ブログの本文欄・900px を軽々と超えています。そこで cover に max-width: 540px を与えてみたところ、A・B はそのままに、C だけが 540px に縮小されました。 画像 A・B を内包する box1 は、 cover の中にあるはずなのに、その最大幅を無視して表示されてしまうものなのですね・・・。 そこで box1 にも同様に max-width: 540px を与えてみましたが、見た目にはほとんど変わりませんでした。目視の限りですが、「A と B を合わせた幅が 540px になる」のではなく、「box 内どちらかの最大幅が 540px 以下になり(この場合 B )、もう一方はその高さに合わせて伸縮している」ように見えました。 そしてこれは不具合とはほとんど関係のない部分なのですが、回答していただいた CSS には、.box2 img というのがありながら box2 そのものは記述されていません。引き続き改善したいのは box1 に含まれる画像ですから、box2 は現状うまくいっているのですが、box2 の記述がないは特に記述する必要がない領域ということなのでしょうか?
Lhankor_Mhy

2020/10/12 08:48

段組み全体のサイズは、 height: 50vh; だけで決められています。 これは、box1の画像の高さを50vhにそろえる、というものです。 ですので、その部分の高さは指定できるのですが、「この横幅にしたい」という指定はできません。 CSSでは難しいのではないかと思いますが、他の方が良いアイデアをお持ちかもしれません。 --- 蛇足ですが、最近は、object-fit:cover を使って画像の上下左右溢れる部分を切り落としてしまう、というデザインがよく使われていると思います。 https://developer.mozilla.org/ja/docs/Web/CSS/object-fit --- >box2 の記述がないは特に記述する必要がない領域ということなのでしょうか? はい、そうですね。初期値のままで問題ないということです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問