div内のテキストと画像の配置について

このQ&Aのポイント
  • CSSを勉強中の方がdivとCSSを使用してテキストと画像を配置する際に問題が発生しています。
  • 指定の方法を追加するためには、以下の2つの方法があります。
  • まず、main-menu内の「二行目テキスト」を右寄せにする際には、テキストをspanタグで囲んでfloat: right;を指定します。次に、main-content内の画像を縦位置の中央に表示する際には、div.main-contentをrelative positionsで囲み、imgタグにtop: 50%; transform: translate(-50%, -50%);を指定します。これによって、テキストと画像の配置が正しくなります。
回答を見る
  • ベストアンサー

div内のテキストと画像の配置について

お世話になります。 現在CSSを勉強中なのですが、参考サイトを見てテーブルを使わずにdivとC SSで同じようなレイアウトが可能と知り、試してみたのですが、div内に配 置したテキストや画像の表示が思い通りになりません。 ソースは以下のような形です。 【HTMLの内容】 <div class="main"> <div class="main-menu">一行目テキスト<br />二行目テキスト</div> <div class="main-content"><img src="xxx.jpg"></div> </div> 【CSSの内容】 div.main { width: 500px; } div.main-menu { float: left; width: 300px; } div.main-content { float: left; } 上記に、以下の指定を追加したいと考えています。 1)main-menu内の「二行目テキスト」だけを右寄せにする。 2)main-content内の画像が常に縦位置の中央に表示されるようにする。 (main-menu内のテキストが複数行になり、divの縦幅が大きくなった場合に 画像も縦幅に合わせ中央に表示したいです。) この場合、どのような方法があるでしょうか? 勉強不足で大変恐縮ですが、よろしくお願いします。

  • HTML
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

すみません、No.2のスクリプトを訂正します。 たぶん、これでいいと思います。 <script> onload=function(){ var div=document.getElementsByClassName('main-menu')[0]; var img=document.getElementsByClassName('main-content')[0].getElementsByTagName('img')[0]; img.style.position='relative'; img.style.top=((div.clientHeight-img.clientHeight)/2)+'px'; }; </script> >No.1さん ついでで申し訳ありませんが、お気を悪くされましたら済みません。 自分でHTMLを作って質問文とはまるきり別物にしてしまう(私はそう感じます)方もいらっしゃるので。 ともあれどこまで同じにすべきか、どこまで書き換えるべきか、というのも難しいと思いますけどね。 わたしは「一行目テキスト二行目テキスト」という言葉だけを見て、段落が1つか、2つにすべきかというのを判断できませんので、可能な限り質問文に従っています。 --------- 段落1つでデザイン的に分離するのは、 2chなど(中国国内の商品パッケージ?)でよくみかけるこういうタイトルデザインみたいなのです。 日本語の文法として存在しなくても、HTMLの文法では存在し得ますから。 (画像添付できなかったので、URL添付で。 http://kohada.2ch.net/test/read.cgi/pcnews/1336993251/l50 ) <hgroup> <h1>iOS6に3DMap搭載か!動画あり</h1> <h2><span>GoogleMap</span><span>さようなら</span></h2> </hgroup> <style> hgroup { position: relative;width:100%;height:5em;} h1{position:absolute;left:6em;top:0;} h2 {position: absolute;top:0;} h2 span{left:0;} h2 span:before{content:"【";} h2 span:after{content:"】";} h2 span+span{position:relative;left:20em;} </style> なんかもうちょっとマシなスタイル考えないと、、、

bonkyuppon
質問者

お礼

ご返答ありがとうございます! 私が質問に書いている形で希望通りの配置をするにはスクリプトが必要になるのですね・・・ 回答者様のおっしゃる通り、同じ見た目になれば他の方法でも良いのか、あくまで質問に書いた形でそうしたいのか、私の質問が要領を得ていなかったと思います。 可能な限り質問文に沿ってご回答頂いた回答者様をBAに選ばせて頂きたいと思います。 本当にありがとうございました。

その他の回答 (2)

回答No.2

>1)main-menu内の「二行目テキスト」だけを右寄せにする。 (兼to No.1さん) デザインを目的としてHTMLを作るべきではありません。 別々の場所に表示したいからと行って、1つの段落を2つに分割しては行けません。 デザインの前にまず、 別々の場所に表示するその2つの文章は、「1つの段落にすべきか」「2つの段落にすべきか」を考えてみてください。 もし、「1つの段落に収まるが、別々の場所に表示したい」であれば、以下のようにしてみてください。 <div class="main-menu"> <p> <span class="first-line">一行目テキスト</span><br /> <span class="second-line">二行目テキスト</span> </p> </div> .main-menu { overflow: auto; } .main-menu p { margin: 0; padding: 0; /* 任意 */ } .main-menu span { display: block; } .main-menu span.first-line { float: left; } .main-menu span.second-line { float: right; } .main-menu br { display: none; } .main-menu span br { /* span内に<br>が使われてなければ不要 */ display: inline; } ※上記brに関して、 .main-menu br { .main-menu span br { この2つを消して、以下のようにしてもいいですが、古めのブラウザでは対応していないかもしれません。 .main-menu p>br{ display: none; } --------------- もし、「2つの段落にしなければならない、かつ、別々の場所に表示したい」であれば、以下のようにしてみてください。 <div class="main-menu"> <p class="first-line">一行目テキスト</p> <p class="second-line">二行目テキスト</p> </div> .main-menu{ overflow: auto; } .main-menu p.first-line { float: left; } .main-menu p.second-line { float: right; } ----------- >2)main-content内の画像が常に縦位置の中央に表示されるようにする。 残念ながら私には、JavaScriptを使うか、背景画像にしてしまう(本来<img>として表示すべき画像をデザインのために削除し、styleで表示させる)方法しか持ち合わせていません。 display: table-cellを使えばvertical-align: middleが使えるようになりますが、HTML構造上、この方法が使えないこともあります。 (もしかすると何かの組み合わせで使えるようになるかもしれませんが、私はその方法を知りません。) 以下、JavaScriptによる方法です。ご参考まで。(古めのブラウザでは動かないかもしれません) <script> onload=function(){ var div=document.getElementsByClassName('main-content')[0]; var img=div.getElementsByTagName('img')[0]; img.style.position='relative'; img.style.top=(div.clientHeight/2)+'px'; }; </script> <div class="main-menu"> <p> <span class="first-line">一行目<br />テキスト</span><br /> <span class="second-line">二行目<br/>テキスト</span> </p> <div class="main-content"><img src="xxx.jpg" width="20" height="20"></div> </div> --------------------- もし、画像を文書から削除して良い、削除すべきであるなら、以下のようにしてみてください。 <div class="main"> <div class="main-menu"> <span class="fitst-line">一行目テキスト</span><br /> <span class="second-line">二行目テキスト</span> </div> </div> .main-menu{ background-image: url(xxx.jpg); background-position: 50% 50%; background-repeat: no-repeat; }

  • naokita
  • ベストアンサー率57% (1008/1745)
回答No.1

1) > 一行目テキスト<br />二行目テキスト これは単なるテキストだから無理かな。三行目以降の対応にもよるけど・・・ だから、 <p>一行目テキスト</p><p>二行目テキスト</p> などで二行目を右よせ -------------------------------------- 2) 他の方法もあるけど、 一番簡単なのは、table-cell (旧ブラウザは非対応) div.main { width: 500px; display:table; } div.main div{ display:table-cell;} div.main-menu { background:yellow; width: 300px; vertical-align:top; /* 上 */ } div.main-content { background:lime; vertical-align:middle; /* 中 */ }

bonkyuppon
質問者

お礼

ご返答ありがとうございます! 勉強不足で恥ずかしいのですが、table-cellというものについてよく知らなかったので、調べて色々試してみます。

関連するQ&A

  • DIVタグの背景に画像を配置できない

    <!DOCTYPE HTML> <html lang="jp"> <head> <meta charset="UTF-8"> <title>組織図</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style> #figure_main { font-size:12px; margin-top:10px; margin-left:10px; width:510px; } #figure_main div { margin:0px; padding:0px; } #figure_main ul { margin:0px; list-style-type: none; width:510px; padding: 0px; } #figure_main li { float:left; text-align:center; background-color:#FFF; border:solid 1px #ccc; padding:5px; width:110px; display:block; margin-right: 40px; } #figure_main div.blank1 { float:left; background-color: #FFF; width:510px; height:10px; } #figure_main li.list_low { margin-left:212px; } #figure_main li.list_hei { margin-left:375px; } #figure_main li.list_l { margin-right:90px; } #figure_main li.list_r { width:120px; margin-right:0; } #figure_main div.list_lineT { background:url(images/listlineT.gif); } </style> </head> <body> <div id="figure_main"> <div class="list_lineT"> <ul> <li class="list_l">営業局</li> <li>人材派遣部</li> </ul> </div> <div class="blank1"></div> <div> <ul> <li class="list_low">営業推進部</li> <li class="list_r">メディア事業グループ</li> </ul> </div> </div> </body> </html> list_lineTクラスの背景「listlineT.gif」を指定しても表示されません。 パスは間違っていませんが。どこが違うのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • HTML
  • div入れ子の背景画像

    【CSS】 #layout{ width:755px; margin:auto; background-color:#ffff00; background-image:url(img/back.gif); background-repeat:repeat-y;} #menu{ width:168px; margin:0px; padding:0px; float:left;} #main{ width:570px; background-color:#ffffff; padding:0px 0px 0px 10px; float:left;} 【html】 <div id="layout">  <div id="menu">メニュー</div>  <div id="main">メイン</div> </div> レイアウトで指定した背景画像を縦に繰り返し表示させたいのですが、 上記のCSSだとIEはOKなのですが、foxが表示されません。 メニューidにはデザイン上背景画像は設定できません。 また、 <div id="layout"> あああ </div> を試したら背景画像が表示されましたので、パスの間違いはありません。 どうすれば良いでしょうか? 知恵をお貸しいただけますでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • CSSにおいて、画像とテキストの配置(回り込み)について

    CSS+HTMLによって、HPを作成しております。 HP作成ソフトはDream Weaver8です。 画像をテキストの左に回りこませる技術。 (例) ■■■■ テキストテキスト ■画像■ テキストテキスト ■■■■ テキストテキスト はスタイルシートで、画像にスタイルシートの ボックスのfloat定義でleftをつけて <div class="header" id="pageName"> <div id = "left"></div> <span class="style3">テキスト</span><br/> </div> このように設定すればよいのかと思ったのですが (headerは外部スタイルシートで、読み込み) 十分に画像をおくスペースがないと、 画像に、テキストがかぶってしまう場合や、(レイヤーが働いてしまう。)うまく、回り込まないのですが、どの設定が足りないのでしょうか。 ちなみにたっぷりとスペースをとった、divですと、 回り込ませることができたりしましたが、メニューdivなど 小さいスペースや縦幅が足りないとだめなのでしょうか。 画像のレイヤーの解除指定などをした方がよろしいのでしょうか。 まだ、初心者ですが、もし、ヒントだけでも、教えていた だけますと幸いです。

    • ベストアンサー
    • HTML
  • floatで左右に分けて配置した2個の画像の中央にテキスト

    floatで左右に分けて配置した2個の画像の中央にテキストを回り込ませた後にテキストの続きの内容の画像を配置するとIE6でレイアウトが崩れしまします。 (NN7、Opera9、Firefox2では表示されるのですが…。) 初心者ですので困っています。お力をお貸し下さい。 ↓このように表示したいです。 ■■■■ テキスト ■■■■ ■画像■ テキスト ■画像■ ■■■■ ■画像■ ■■■■ ■■■■ ■画像■ ■■■■ ↓IE6ではこのような表示になってしまいます。 ■■■■ テキスト ■■■■ ■画像■ テキスト ■画像■ ■■■■       ■■■■ ■■■■       ■■■■ ■画像■ ■画像■ タグは以下のとおりです。 ☆HTML☆ <div id="contents01"> <div id="contents01_left"> <img src="img/contents01_01.gif"> </div> <div id="contents01_right"> <img src="img/contents01_02.gif"> </div> <p>テキストテキスト</p> <p><img src="img/contents01_03.gif"></p> <p><img src="img/contents01_04.gif"></p> <p><img src="img/contents01_05.gif"></p> </div> ☆CSS☆ #contents01{ width:480px; height:140px; padding:10px; } #contents01_left{ float:left; width:150px; padding-right:10px; } #contents01_right{ float:right; width:150px; padding-left:10px; } どうぞよろしくお願い申し上げます。

    • ベストアンサー
    • HTML
  • floatを使って画像にテキストを回り込ませて解除する時

    floatを使って画像にテキストを回り込ませて解除する時 clear:both;などを使うけど、テキストの量が少ないと上手く解除されないですよね。そのとき、下記のようなCSSを書くのですが、これだとMacのIEではうまいこと解除できていません。 どう書いたら良いでしょうか? 【HTML】 <div class="box"> <img> <p>テキスト</p> </div> 【CSS】 div.box { zoom: 100%; background-color: #CCC; padding: 10px; width: 500px; } div.box:after { content: " "; clear: both; height: 0; display: block; visibility: hidden; } div img { float: left; }

    • 締切済み
    • CSS
  • 画像をセンター配置にする方法

    過去ログを検索したのですが、同じような方法が載っていなくて質問させていただきます。 以下の画像にある通り、img_01とimg_02とimg_03を画面中央に配置したいのですがどうしてもうまくいきません。 根本的な部分の理解ができていないかもしれませんが、どうかご教授お願いします。 【HTML】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無題</title> <link href="css/common.css" rel="stylesheet" type="text/css" /> </head> <body> <!--▼▼ヘッダーここから▼▼--> <div id="header"> <p>ヘッダー</p> </div> <!--▲▲ヘッダーここまで▲▲--> <!--▼▼メインここから▼▼--> <div id="main"> <ul> <div id="main_site01"> <p class="center">aaa01</p><li><img src="images/site01.jpg" width="300" height="200" alt="01" /></li><p class="center">aaa01</p> </div> <div id="main_site02"> <p class="center">aaa02</p><li><img src="images/site02.jpg" width="300" height="200" alt="02" /></li><p class="center">aaa01</p> </div> <div id="main_site03"> <p class="center">aaa03</p><li><img src="images/site03.jpg" width="300" height="200" alt="03" /></li><p class="center">aaa01</p> </div> </ul> </div> <!--▲▲メインここまで▲▲--> <!--▼▼フッターここから▼▼--> <div id="footer"> <p>フッター</p> </div> <!--▲▲フッターここまで-▲▲--> </body> </html> 【HTMLここまで】 -------------------------------------------------------------------------------- 【CSS】 @charset "utf-8"; /*******************/ /* リセットcss */ /*******************/ * { margin: 0; padding: 0; list-style-type: none; line-height: 1.6; font-family: "メイリオ","MS Pゴシック","ヒラギノ角ゴ Pro W3"; } img { border: none; } /*******************/ /* コンテンツ */ /*******************/ body { background-color: #000; } #header { height: 100px; margin-top: 50px; font-size: 18px; background-color: #fff; } #main { color: #FFF; width: 990px; text-align: center; } #main ul li { float: left; margin: 0 15px 15px; } #main_site01 { float: left; } #main_site02 { float: left; } #main_site03 { float: left; } .center { text-align: center; margin-top: 15px; } #main ul { text-align: center; } #footer { height: 100px; font-size: 18px; color: #000; clear: both; background-color: #fff; } 【CSSここまで】

  • CSSにてfloat:leftを使用して画像を3つ並べたのですが。。

    CSSにてfloat:leftを使用して画像を3つ並べたのですがこの3つの画像をセンターによせることができません。 なんでかまったくわかりません(ToT) 教えてくださいm(__)m 【HTML】 <div class="box2"><img src="images/sum2.gif"></div> <div class="box3"><img src="images/sum3.gif"></div> <div class="box4"><img src="images/sum4.gif"></div> 【CSS】 .box2{ float:left; width:219px; } .box3{ float:left ; width:156px;} .box4{ float:left ; width:195px; }

  • CSSで 画像をかさねたい

    お世話になります。 CSSで 画像をかさねたいんです。 下になる画像を「背景」にして それで2つを重ねればいいのかと思いましたが、どうもうまくいきません。 CSSソースは .left{ width:182px; background:url(sideback.gif) float:left; } .left-midashi{ width:182px; text-align: center; } *「float:left」がはいっているのは、右隣にメインの枠があるからです HTMLは↓ <div class="left"> <div class="left-midashi"><img src="sidemanu-canner.gif"></div> </div> です。 初心者なので凡ミスかもしれませんが、自分ではよくわからなくなってしまいました。。。よろしくおねがいいたします。m(_ _"m)ペコリ

    • ベストアンサー
    • HTML
  • 背景画像上にテキストを配置したボタンについて

    今晩は。 いつもお世話になっています。 CSSで次のようなボタンを作りたいと思っています。 ・背景画像の上にテキストを乗せたボタン。 1)ボタン上のテキストを書き換えられるようにしたい。 2)ボタンはページによって同じ背景画像でサイズを変えたい。(指定した縦横幅に合わせて背景画像がリサイズされるようにしたい) 3)背景画像ごとリンクにしたい。 参考サイトを見て、現在以下のようなボタンを作ってみました。 1、2はクリアできたのですが、ボタン上のテキストではなく、背景画像自体をリンクにするにはどうすればいいでしょうか? また、色々方法はあると思うのですが、今回のようなボタンを作る上でもっと効率の良いCSSがあれば、参考サイト等教えて頂けると幸いです。 -------------CSS-------------- div.photo{ width:100px; height:50px; background-image:url("xxxx.png"); background-repeat:no-repeat; position:relative; background-size:contain; float:right; } .text{ width:100px; position:absolute; top:8px;left:10px; color:#ffffff; line-height: 1.2; font-size:15px; } ------------HTML------------- <div class="photo"> <div class="text"><a href="#">テキスト</a></div> </div> 以上になります。 よろしくお願い致します。

    • ベストアンサー
    • HTML
  • StyleSheet:float 使用時、テキストが指定幅を超える

    お世話になります。 スタイルシートの設定について、質問させてください。 下記のようなページを作ったところ、 main_left内のテキストが指定した400pxを超え、 main_rightがmain_leftの次の段落に回り込んでしまいます。 テキストが400を超えないようにするには どうすればよいでしょうか? もっと具体的に言えば、 http://www.geocities.jp/multi_column/float/sample/float.html このサイトのようにしたいだけなのですが、 どこが間違っているのかがわからず困っています。 --------------------------------------- index.html --------------------------------------- <html><head><link rel="stylesheet" href="main.css" type="text/css" /></head> <body> <div id="main"> <div id="main_left"> 123456789012345678901234567890123456789012345678901234567890</div> <div id="main_right"> 12345678901234567890123456789012345678901234567890</div> </div> </body></html> --------------------------------------- main.css --------------------------------------- #main { width:600px; } #main_left { float:left; width:400px; background-color:#CCFF99; } #main_right { float:right; width:190px; background-color:#FFCC99; } --------------------------------------- 以上、ご回答よろしくお願いいたします。

    • ベストアンサー
    • HTML