• 締切済み

CSS 画像横に改行があるテキストを高さ中央で

画像の右側にテキストを回り込ませ、 そのテキストを、高さ中央揃えにしたいのですが テキストに改行がある場合には どのようにしたら良いでしょうか? テキストに改行があるために vertical-align:middle; を使うとテキストの<br>以下が画像下に回り込んでしまいます。 vertical-align:middle; を使うと、改行以下も画像の横に表示されますが、 上揃えとなってしまいます。 何かもっと違う方法が良い方法があれば教えてください。 お願いします。

  • CSS
  • 回答数5
  • ありがとう数3

みんなの回答

  • DrFell
  • ベストアンサー率55% (305/551)
回答No.5

<head> <style type="text/css"> td a{width:500px;/*画像と文字をあわせた幅*/ height:100px;/*画像の高さ*/ padding-left:120px;/*画像の幅+画像と文字とのあき*/ display:table-cell; vertical-align:middle;} p a{width:500px;/*以下tdと同じ*/ height:100px; padding-left:120px; display:table-cell; vertical-align:middle;} #abc{background:url(abc.jpg) no-repeat;}/*画像を背景として個別に入れます。*/ #def{background:url(def.jpg) no-repeat;}/*場合によってはclassの方がいいかも*/ #ghi{background:url(ghi.jpg) no-repeat;} </style> </head> <body> <table> <tr> <td> <a href="abc.html" id="abc">AAA<br>BBB</a></td> <td> <a href="abc.html" id="def">DDD<br>EEE</a></td> </tr> <tr> <td> <a href="abc.html" id="ghi">GGG<br>HHH<br>III</a></td> </tr> </table> <p><a href="abc.html" id="abc">AAA<br> BBB</a><a href="abc.html" id="abc">DDD<br> EEE</a></p> <p><a href="abc.html" id="abc">GGG<br> HHH<br> III</a></p> 文字数の制限なら、文章構造無視も仕方ないですね。伝えることが大事なので、理想を言ってられません。 上記のソースはtableバージョンとpバージョンです。横に並べるため、表でもないのに表にしなくてもいいのです。 cssの理想から言えば今回の画像と文字の関係は、画像は絶対に必要なものではなく、デザイン表現に必要なものへの適用です。もし、論文中のグラフや概略図などデザインではなく、画像が絶対に必要なコンテンツの場合には使いません。 htmlとcssは表示されたらいいというものではなく、表示されたら……という感覚で勉強されると、無駄な勉強時間を10倍・100倍取られます。今回のとりあえずができれば、わかっているつもりでも、基本から(いわゆる「正しいhtml」系)学び直されることをお勧めします。

  • DrFell
  • ベストアンサー率55% (305/551)
回答No.4

先の回答にも書きましたが、htmlやcssは文章構造が大事です。どんなに、こうしたいと書かれましても文章構造がなくては、適切なアドバイスができません。 html4以下はインライン要素とブロックレベル要素があり、インライン要素にブロックレベル要素を含めることができません。ので、根本的にsgmsgm さんのブロック要素ごとインライン要素であるa要素に含めるというのは無理があります。 html5からは、ブロック要素、インライン要素の考え方は表示上(css)は残っていますが、文章構造としては無くなるようです。つまり、それまでのインライン要素にブロックレベル要素を含めても問題がなくなります。ですので、問題がなければ、html5の宣言をするのが簡単ですね。 見た目上で画像だが、構造的には意味が無い場合は、imgではなく、文章への背景として扱えばdreamweaverでのデザインビュー上も許容範囲で表示されると思いますよ。 無理やり1回ですますよりも、2回書くことに何の問題があるのかよくわかりません。事情はわかりませんが、スマートだと思います。

sgmsgm
質問者

お礼

お礼に補足を入力することになってしまい申し訳ございません。 <table> <tr> <td><a href="http://www.******.com/abc.html"> <img src="http://www.******.com/abc.gif"></a></td> <td><a href="http://www.******.com/abc.html">AAA</a></td> </tr> </table> としておくのがスマートだと思いますが、 リンク先URLを絶対パスで書かなくてはならずURLが実際はもっと長く こうしたリンクが30個ほどあるため、文字数が足りず リンク先を一度で書き出したら節約できるかと思ったのです。 <table> <tr> <td><a href="http://www.******.com/abc.html"> <img src="http://www.******.com/abc.gif align="left"> AAA<br>BBB</a></td> </tr> </table> cssは別ファイルに書くことができ文字制限にも余裕があるため、 外部CSSでうまくできないかなと思った次第です。 よろしくお願いいたします。

sgmsgm
質問者

補足

ありがとうございます。 GWで留守にしていてお礼が遅れました。 利用しているブログサービスによる各パーツの文字数制限によって 文字数削減が目的でした。 文章の構造を補足に足しておくのでよろしければまた ご教授頂けると幸いです。

  • DrFell
  • ベストアンサー率55% (305/551)
回答No.3

文章構造を見せていただかないと、違っているのかもしれませんがvertical-alignでも出来ると思います。 vertical-alignはインライン要素とテーブルにのみ有効です。 【例】 <img src="test.jpg" width="100" height="100" style="vertical-align:middle;"><span style="display:inline-block;vertical-align:middle">aaa<br>bbb<br>ccc<br>ddd</span> 他には、display:table関連の値を使う方法もあります。こちらだとブロック要素にも使えます。

sgmsgm
質問者

補足

ありがとうございます。 現状組んである内容に、spanを書き込むだけで一番近い形に表示されました。 ただ、2つほど気になる点が。 Dreamwever CS4だとプレビューをしない限り、実際の表示が見えず 編集画面では崩れて表示されているため全体のバランスが分かりにくいんです。 また、ブラウザとの相性の問題で IEでは、リンクへの指アイコンが表示されないようでした。 Chromeだとばっちり出ていましたが。 最初の説明が足りませんでしたが、 今回は、左画像と右のテキストとを同じリンク先を設定したいということでした。 これまでセルで分けてそれぞれにリンク先を書いていましたが リンク先の記述が2回になってしまうためセルを結合しました。 なんだそんなことだったら、こんな記述を使わずに もっと違うこういうのが便利だよと言うのがありそうですね。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

vertical-align:middleで回り込むということはおかしいです。 verticla-alignは、tableのcellに対するものですから、それ(ceell)自体が回り込むことはありません。cell以外には、HTMLで言うところの画像の位置と行のベースラインの位置関係を指定するものですから、強制改行すれば別の行ですから、「下の行に行くべきです」 vertical-align ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/visudet.html#propdef-vertical-align ) と 表について ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/tables.html#height-layout ) を読んでおくこと。 「画像横に改行があるテキストを高さ中央で 」という考え方は、HTMLやCSSの考え方で言うと、とてもおかしいです。  たとえば、画像とその説明を記述したリストがあります。画像の横に説明部分を表示し、説明文は画像の高さの中央に配置したい・・・という風に考えると良いです。 (例)たとえば、次のようなHTMLがあるとします。 <div class="albumList">   <ul>     <li><img src="./images/01.jpg" width="240" height="180" alt="出発">       <ul>         <li>今日は・・・・家族みんなでドライブに行くことに・・</li>         <li>いつもながら、妻の顔作りで予定時間を過ぎてしまった。</li>       </ul>     </li>     <li><img src="./images/01.jpg" width="240" height="180" alt="交差点">       <ul>         <li>最初の交差点で事故を目撃してしまった。出かけるのに気が進まない。</li>       </ul>     </li>   </ul> </div>  大事なことは、どのように表示させたいというプレゼンテーションを考えずに、HTMLは文書構造がわかるように書くことです。これが何よりも大事です。それによって、スタイルシートで好きなようにデザインが変えられるようになる。  そもそもHTMLもスタイルシートも、とっても簡単になります。数年先に見ても理解できる。HTMLを開かなくてもスタイルシートの変更も自由自在に・・ [HTML] ★Another HTML-lint gateway ( http://openlab.ring.gr.jp/k16/htmllint/htmllint.html ) ★W3C CSS 検証サービス ( http://jigsaw.w3.org/css-validator/#validate_by_input ) で検証すみ。 タブは_に置換してあります。戻すこと。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> _<meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> _<title>サンプル</title> _<meta name="author" content="ORUKA1951"> _<meta http-equiv="Content-Style-Type" content="text/css"> _<link rev="made" href="mailto:oruka1951@hoge.com" title="send a mail" > _<link rel="START" href="../index.html"> _<style type="text/css"> <!-- div.albumList ul,div.albumList ul li{list-style:none;margin:0;padding:0;vertical-align:middle;} div.albumList ul{display:table;width:480px;margin:0 auto;background-color:gray;} div.albumList ul li{display:table-row;} div.albumList ul li ul{display:table-cell;} div.albumList ul li ul li{display:block;margin:0 1em;} --> _</style> </head> <body> _<h1>サンプル</h1> _<div class="albumList"> __<ul> ___<li><img src="./images/01.jpg" width="240" height="180" alt="出発"> ____<ul> _____<li>今日は・・・・家族みんなでドライブに行くことに・・</li> _____<li>いつもながら、妻の顔作りで予定時間を過ぎてしまった。</li> ____</ul> ___</li> ___<li><img src="./images/01.jpg" width="240" height="180" alt="交差点"> ____<ul> _____<li>最初の交差点で事故を目撃してしまった。出かけるのに気が進まない。</li> ____</ul> ___</li> __</ul> _</div> </body> </html>

sgmsgm
質問者

お礼

ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

端的にいえばテーブル以外で垂直的なセンタリングは簡単にはできない

sgmsgm
質問者

お礼

ありがとうございます。

関連するQ&A

  • 画像の横にテキストを縦方向中央に配置したい

    画像の右側にテキストを縦中央揃えにしたく、下記のように記述しました。 <style type="text/css"> img {height:100px; vertical-align: middle; } h3{display:inline;} </style> <img src="画像.jpg"> <h3>タイトル</h3> タイトルが短いときはよいのですが、長くなると2行目が画像の下段にいってしまいます。 このHTNLの記述では無理でしょうか?

    • ベストアンサー
    • CSS
  • 画像の横にテキスト

    画像の右側にテキストを配置したいです テキストが画像の上付近から始まるようにしたのですがどんな方法が一番良いのですか? 他にも方法はありますか? <img src="sample.gif" alt="" align="top">テキスト <img src="sample.gif" alt=""style="float: left">テキスト <img src="sample.gif" alt=""style="vertical-align: top;">テキスト また、HTML5ではどんな方法がいいでしょうか? よろしくお願いします

    • ベストアンサー
    • CSS
  • 画像の中央横にテキストを表示したい

    Dreamweaverでホームページを作っています。 30×30ピクセルほどの小さな画像のとなりにテキストを表示させたいのですが、デフォルトだと画像の下側に合わさってしまいます。 そこで、imgに対するalignオプションで"middle"を指定しました。 ところが、それだと上方に位置されてしまいました。 一体どうすれば、画像とテキストの中央が合ってくれるようになるのでしょうか? ご存知の方、どうかお教え願えますでしょうか?

    • ベストアンサー
    • HTML
  • CSSでテキストを垂直、中央に設定する方法

    はじめまして。 現在、CSSを勉強中のものですが、タイトルにあるCSSでテキストを垂直方向に中央に配置する方法がわかりません。 clearfix { margin-top: 0px; text-align: left; width: 530px; height: 100px; vertical-align: middle; } とクラスで設定したのですが、DWのデザイン画面はもちろん、ブラウザで確認してもちゃんと表示されません。 解決方法を教えていただけないでしょうか? どうかよろしくお願いいたします。

    • ベストアンサー
    • HTML
  • htmlで縦の中央揃えが上手くいきません。

    htmlで縦の中央揃えが上手くいきません。 vertical-align : middleでいけると思われるのですが、上手くいきません。 下記の部分です。 <div style="vertical-align : middle;"> <a href="http://www.yahoo.co.jp/"><img src="logo.png" /></a> &gt; <a href="http://okwave.jp">okwave</a> &gt; thispage </div> 何か間違えているでしょうか? それとも、テキスト以外は揃わないのでしょうか?

  • 【HTML/CSS】ブロック内の中央揃え

    HTML初心者です。 tableのセルにリンクを張り、cssで {display:block;} と設定し、セル単位で別ページへリンクできるようにしました。 しかし、blockで設定するとセル内のリンクが中央揃えになりません。 text-alignやvertical-alignを設定しても中央揃えできません。 手をこまねいているのでアドバイスがほしいです。 よろしくお願いします。

  • 画像とテキストのレイアウト

    左に画像、その画像の右に複数行のテキストを、画像高さの中央に配置したいと思っています。 <table><tr><td><img></td> <td style="vertical-align:middle"> 文1<br> 文2<br> 文3<br> </td></tr></table> をテーブルを用いないでレイアウトしたいということです。 <img src="loc"> 文1<br> 文2<br> 文3<br> では、文1 のみが画像右に表示されます。 <img src="loc" style="float:left"> 文1<br> 文2<br> 文3<br> では、文全体が画像のtop位置から表示されます。 どのようにスタイルシートで指定すればいいのでしょうか?

    • ベストアンサー
    • HTML
  • CSSで画像を中央に持っていく方法。

    簡単な問題です。 画像を liの枠内の上下左右中央に配置するには、どうすればいいでしょうか? 画像のサイズがまちまちなので、 paddingなどで数値を指定するのは、NGです。 vertical-align:middleはだめでした。 text-align:centerで左右の中央に持って行く所まで、できました。 HTML ==================== <ul class="book_slide"> <li><img src="image/bookmihon.jpg" width="51" height="75" alt="*" /></li> <li><img src="image/bookmihon.jpg" width="51" height="75" alt="*" /></li> </ul> ====================== css ======================= ul.book_slide li{ float:left; height:114px; width:80px; border:1px solid #000; text-align:center; } =======================

    • ベストアンサー
    • CSS
  • CSS セルごとリンクにする際、リンク文字を上下中央寄せにしたい

    セルごとリンクにしたくて、以下の記述をしました。 【CSS】 ------------------------------------------------------------------ a.widelink{ vertical-align:middle; display:block; // display:inline-block; width: 100%; height:100%; // line-height:100%; color: #000000; text-decoration:none } a.widelink:hover{ vertical-align: middle; color: #000000; background-color: #9999FF; text-decoration:none } td.bgchng{ align: center; vertical-align: middle; color: #000000; margin: 0px; padding: 0px; } td.bgchng:hover{ vertical-align: middle; color: #000000; background-color: #9999FF; margin: 0px; padding: 0px; } ------------------------------------------------------------------ 【HTML】 ------------------------------------------------------------------ <TABLE border="1" bordercolor="#6666CC" cellspacing="0"> <TR> <TD width="150" height="60" valign="middle" align="center" CLASS="bgchng"> <A href="test01.html" CLASS="widelink"> テスト<BR>(その1) </A> </TD> <TD width="450" bgcolor=""> &nbsp;テスト(その1)の説明文<BR> &nbsp;二行目 </TD> </TR> <TR> <TD width="150" height="60" valign="middle" align="center" CLASS="bgchng"> <A href="test02.html" CLASS="widelink"> テスト(その2) </A> </TD> <TD width="450" bgcolor=""> &nbsp;テスト(その2)の説明文<BR> &nbsp;二行目<BR> &nbsp;三行目 </TD> </TR> <TR> <TD width="150" height="60" valign="middle" align="center" CLASS="bgchng"> <A href="test03.html" CLASS="widelink"> テスト(その3) </A> </TD> <TD width="450" bgcolor=""> &nbsp;テスト(その3)の説明文<BR> &nbsp;二行目 </TD> </TR> </TABLE> ------------------------------------------------------------------ この記述だとリンク文字がセルのTOPに来てしまい、中央寄せになりません。 思いつく限りの場所にvertical-alignやvalignを仕込んでみましたがダメでした。 line-heightであわせる方法もやってみましたが、<BR>を含むリンク文字の表示が二行揃ってくれず、ダメでした。 セル自体をリンクにして、さらにリンク文字を上下中央寄せにしたいのですが、やり方をご存知の方、教えてください。

  • セルをリンクにしたときの揃え位置

    http://www.htmq.com/style/vertical-align.shtml こちらを参考にセルのリンクを作成しました。 セル中の文字の縦揃えを中央揃えにしようと<td style="vertical-align:middle">としたのですが、反映されず困っております。 リンクの定義部分でA{vertical-align:middle}とも試しましたが変化ありませんでした。 どのようにすれば可能になりますでしょうか?

専門家に質問してみよう