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

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

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

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

CSS

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

Q&A

解決済

1回答

1378閲覧

可変の画像縦幅の下部に合わせて文章を表示したい

sssooo

総合スコア17

HTML

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

CSS

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

0グッド

0クリップ

投稿2017/02/02 15:15

###質問
floatの2カラムで、片方に画像を横幅に合わせて縦幅が設定されるように、もう片方に画像の詳細情報が表示されるようにしていて、その情報を画像の可変の縦幅の下部に揃えたいのですが、どのようにすればいいでしょうか。CSSだけでposition:relative/absolute、overflow:hidden、vertical-align:bottomなどを使用すればできそうな気がするのですが、JavaScriptなどで揃える必要があるでしょうか?

HTML

1<div> 2 <div class="leftcol"> 3 <img src="sample.jpg" style="max-width:100%; height:auto"> 4 </div> 5 <div class="rightcol"> 6 <p>サンプル1</p> 7 <p>サンプル2</p> 8 <p>サンプル3</p> 9 </div> 10</div>

実際はBootstrapのグリッドシステムでカラムや幅を設定しています。

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

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

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

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

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

kei344

2017/02/03 03:57

書かれている状況が再現するコード(HTML/CSS)を提示されたほうが回答を得やすいと思います。
guest

回答1

0

ベストアンサー

わたくしであれば、文書構造的に、以下のように

HTML

1<dl> 2 <dt>.leftcolの内容</dt> 3 <dd>.rightcolの内容</dd> 4</dl>

CSS

1dl { 2 display:table; 3} 4dt,dd { 5 display:table-cell; 6} 7dt { 8 /*.leftcolの内容を移植*/ 9} 10dd { 11 /*.rightcolの内容を移植*/ 12 vertical-align:bottom; 13}

しちゃうと思います。

追記:当方でのテスト状況

HTML

1<div id="box"> 2 <dl> 3 <dt><img src="images/img01.png"></dt> 4 <dd><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p><p>ほげほげほげほ</p></dd> 5 </dl> 6</div>

CSS

1#box { 2 width:500px; 3 text-align:left; 4} 5#box dl { 6 display:table; 7 width:100%; 8} 9#box dl dt,#box dl dd { 10 display:table-cell; 11 width:50%; 12} 13#box dl dt { 14 background-color:#CFF; 15 vertical-align:bottom; 16 text-align:center; 17} 18#box dl dt img { 19 max-width:100%; 20 height:auto; 21} 22#box dl dd { 23 background-color:#FFC; 24 vertical-align:bottom; 25} 26#box dl dd p { 27 line-height:22px; 28 font-size:16px; 29} 30#box dl dd p:last-of-type { 31 margin-bottom:-3px; 32}

画像は、137px/256pxで確認、どっちもbottom設定。

投稿2017/02/02 15:38

編集2017/02/02 17:54
LibertyBell3

総合スコア1084

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

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

sssooo

2017/02/02 15:45 編集

レスポンシブで縦長構成対応したいのと、実際はもっとコンテンツが入ること、他ページとの共通デザインを部分的に適用しているので作業効率的にdiv構成で実装したいのです...何か簡単な方法はないでしょうか?
LibertyBell3

2017/02/02 15:46

う~ん。 タブレット/スマホでは、display:block;にすれば良いだけなので、 ちゃんと対応できるのですが…
sssooo

2017/02/02 17:02 編集

上の通りに設定するとすると、widthがmax-width:100%のままだと画像が表示されませんね...
LibertyBell3

2017/02/02 17:11

いえ、table-cellにしたdt/ddは完全に同じ高さになります。 (背景色を付けて確認ください) 揃わないの意味が複数考えられるので、それぞれの対応を以下に。 ・画像の高さよりテキスト部分の方が長く、その場合でも下辺を揃える場合 dtにもvertical-align:bottom;を ・画像の下辺ぴったりにしたいが、数pxずれている場合 改行高が原因なので、その分をマイナスする。 例:font-size:16px;line-height:22px; (line-heightマイナスfont-size)÷2の分だけ引くので、 dd p:last-of-type { margin-bottom:-3px; } でどうでしょう?
sssooo

2017/02/02 17:34

同じ高さになる件は了解しました。しかし、max-width:100%;height:autoの場合、画像が高さを持たなくなり表示されず、よって背景色も表示されません。
LibertyBell3

2017/02/02 17:56

もしかして、float入れてませんか?(float入れると高さが0になるので) ちゃんと表示されるテストソースを追記しておきましたので、 参考にしてくださいませ。
sssooo

2017/02/02 18:58 編集

そうですね、Bootstrapのグリッドシステムはfloatを使用するので入ってますね。しかしどこの親要素にclearfix入れても画像表示されないので違う原因なんじゃないかと思うのですが...どんな問題が考えられるでしょうか?もしくはグリッドシステムのfloatが問題の場合どのように対処すべきでしょうか?
LibertyBell3

2017/02/02 18:58

clearfixではなくて、dt/ddにfloat:none;ですね。 不安であれば、dlにも。
sssooo

2017/02/02 19:01

でしたら、それを入れても変わらないので、別の原因だと思います。
LibertyBell3

2017/02/03 11:23

原因の切り分けが出来ないと、これ系は扱えないと思います。 とりあえず、インラインでスタイルを記述して適用されれば、 例:<dt style="float:none;">など 対処は間違っていないので、あとは、インラインで書かなくても、 適用されるように、作り替えるだけです。 #boxのように、IDで独自の記述を行い、その記述が最後に読み込まれるような位置にあれば、通常問題ないはずなので、CSSファイルの最後や、 別ファイルに記述して、外部CSSの最後に読み込むファイルとして指定すれば、良いのではないでしょうか?
sssooo

2017/02/03 16:58

そうですね。おそらくグリッドシステムとの兼ね合いなんじゃないかと思います。 なので僕は結局row-eq-heightクラスとflexboxを使うことでdiv構造のままスマートに対応できたのでこちらの方法を採用しますが、追記の方法でも可能なのでBAとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問