• ベストアンサー

スタイルシートでのレイアウトの際に、border枠から文字がはみ出てしまう問題について

まず、ソースです。 [html] <ul id="greeting"> <li id="entrancephoto">  写真 </li><!-- entrancephoto --> <li id="word">  言葉 </li><!-- word --> <li id="news">  ニュース </li><!-- news --> </ul><!-- greeting --> [css] ul#greeting{ clear:both; display:block; width:570px; border-color:#D6757E; border-width:1px; border-style:solid; padding:20px 0px 20px 0px; list-style:none; } li#entrancephoto{ float:left; width:210px; vertical-align:middle; padding:0px 20px 0px 20px; } li#word{ float:left; width:320px; } li#news{ clear:both; float:left; width:530px; padding:5px 0px 0px 20px; margin:auto; } --ここまで-- このように、一番外をid:greetingで囲み、 borderを設定しています。 そしてその中に、3つの要素を<li>で書いています。 (上に段組2段、下に1段) ですので、borderで全ての要素を囲みたいのですが、 id:greetingで囲んでいるはずが下の3つの要素を 囲むことは無く、高さ40pxの枠(padding分)に なってしまい、文字量に関係無い設定になってしまいます。 (IEでは、文字量に合わせてheightが変わるのですが、 firefox、nsではできません) いろいろ試してみたつもりですが解決できませんでした。 お分かりになる方、何卒よろしくお願いします。

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

  • ベストアンサー
  • ao_
  • ベストアンサー率33% (15/45)
回答No.3

inline-tableはMacIEのためのもので、WinIEの値はホリーハック内にあるblockです。 WinIEの場合、高さを指定すれば解決します。それはWinIEのバグで、内容物によってheightを無視して表示するからです。しかしMacIEにはこういったバグはなく、heightを忠実に再現します。 詳しくは参考URLを参照ください。

参考URL:
http://www.positioniseverything.net/easyclearing.html
tamotsu180
質問者

お礼

ご返信ありがとうございます。 基本的に理解することができました。 教えて頂いたページにて、勉強させて頂こうと 思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • ao_
  • ベストアンサー率33% (15/45)
回答No.2

htmlに手を加えず、CSSだけで解決する方法です。 #greeting:after { content: "."; display: block; height: 0; clear: both; visibility: hidden;} #greeting{ display: inline-table;} /* Hides from IE-mac ?*/ * html #greeting {height: 1%;} #greeting {display: block;} /* End hide from IE-mac */ これをul#greetingのCSSの下に書き足せば解決します。 フロートした要素(li)の親要素(ul)はフロートした要素の高さを無視してしまいます。解決するには親要素の一番下にブロック要素を追加し、そのブロック要素にclearを指定します。ただそのためだけに空のブロック要素を追加するのは好ましくないので上記の方法をおすすめします。

tamotsu180
質問者

補足

とてもとても勉強になりました。 非常にコンパクトで簡潔な説明ありがとうございました。 afterの使い道をいまいち理解できていなかったのですが、 このような使い方があることが理解できました。 ただ、理解できないところは、 #greetingのdisplay要素は、なぜblockではなく、 inline-tableになるのだろう・・・という所と、 (今回の場合、ie-mac の場合だけになるのでしょうか?) 丁寧に教えて頂いた  /* Hides from IE-mac */ の部分でie-macには適用しないように(?) されているのかな・・・と思うのですが、 なぜそのようになるのかがわかりません。 もし、宜しければヒントだけもお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

<div id="test"> <ul id="greeting"> <li id="entrancephoto"> 写真</li> <li id="word"> 言葉</li> <li id="news"> ニュース</li> </ul> <div id="test2"> </div> </div> div#test{ width:570px; border-color:#D6757E; border-width:1px; border-style:solid; margin:0; padding:0; } div#test2{ clear:both; height:20px; } ul#greeting{ clear:both; display:block; width:570px; margin:0; padding:20px 0px 0px 0px; list-style:none; } li#entrancephoto{ float:left; width:210px; vertical-align:middle; padding:0px 20px 0px 20px; } li#word{ float:left; width:320px; } li#news{ clear:both; float:left; width:530px; padding:5px 0px 0px 20px; margin:auto; } 一応、上記で類似の事は出来そうですが・・・。 あまり綺麗なやり方ではないです。 何かを諦めないと無理みたいですね・・・。 とりあえずポイントは li 要素の float の指定の様です。 この為に li 要素が考慮されない様で・・・。 ちなみに、ol 要素の width の指定を外すと、IE でも高さが考慮されなくなります。 上記ではこの float の影響を回避する為に ol 要素の後に div 要素で clear:both; と指定し、その位置を考慮する様なその外側にさらに div 要素を用いてそこで外枠を書くように考えています。 上記以外に考えられる対応は、 1.高さを指定する。 2.枠線を諦める。 3.リスト要素を用いる事を諦めて、div や span 要素で代用する。 等が考えられます。 どれも何かを諦めるというか犠牲にしているというか そういう事なので、作者自身なら他にもいろいろあるのではないかと思われますが・・・。 また、あまりお勧めではありませんが、li 要素を display:inline; と指定して float と width の指定をやめて、 width の指定の代わりに全角スペースなどを使う方法もあるにはありますが・・・。

tamotsu180
質問者

お礼

いろいろな回避策ありがとうございました。 divで囲む際に、囲みの底に当たる部分に div(test2)を用いて解決する方法を知りました。 問題については、ao様の方法で解決できました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • スタイルシート・・・borderが適用されない

    横並びのメニューを作っていますがなぜかborderが適用されません。 多分余計な記述があるためだと思いますが分からなくなってしまいました。どなたか助けて下さい。 <!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=shift_jis" /> <title>テスト</title> <link href="test.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="header-menu"> <ul class="sample"> <li><A href="#">メニュー1</A></li> <li><A href="#">メニュー2</A></li> <li><A href="#">メニュー3</A></li> <li><A href="#">メニュー4</A></li> </ul> </div> </body> </html> .header-menu { width: 400px; overflow: hidden; } ul.sample{ margin-top:20px; font-size:12px; padding-left:0; margin-left:0; } ul.sample li{ display: inline; } ul.sample li a{ width:85px; text-decoration:none; color: #fff; background-color: #FF7F50; padding:3px 0 3px 0; margin-right:7px; width:85px; float:left; border-width:1px; border-color:#CCCCCC; text-align: center; } ul.sample li a :hover { background:none; }

    • ベストアンサー
    • HTML
  • border-style:solidで文字がずれる

    URL用のテキストに枠線をつけました。通常はポインタを当てると下線がでると思いますが、最初に a{ text-decoretion: none; } でもって下線を消しました。 次に a hover{ border-style: solid; padding: 5px; } によって枠線を作りましたところ、ポインタを当てると枠線はでるのですが、<li>のテキストが5pxほどずれてしまいます。 cssで header ul li{ float: left; padding: 0 70px 0 0; } こんな感じになら設定しており、float: left;で左詰めにしているせいでポインタを当てて枠線をが出た時に枠線分だけ右にずれるのが原因ではないかななどと思っていますが、兎にも角にも分かる方がいらっしゃいましたらすみませんが教えてください。

    • ベストアンサー
    • HTML
  • テキストの揃え方について

    CSSの勉強を始めて間もないのですが、下記のようにホームページを作成し、左右に均等の間隔を指定して、テキストも中央揃えになっています。<div id="01">を5段、<div id="02">で1段、この後<div id="03">と<div id="04">で合わせて2段にしたいと考えています。そのうえで、<div id="03">以降は左右に均等の間隔になっている幅の中(<div id="01">や<div id="02">が配置されている400pxの位置)で、テキストを左揃えにして配置したいと考えています。text-align: left;をCSSのいろいろなところに書いているのですが、ウィンドウの左端に配置されてしまいます。どのようにCSSに書いたら実現できるのでしょうか。CSSレベル2までの書き方でお教えください。 【HTMLの<body>内】 <div id="01_05"> <div id="01"> <ul> <li><a href="link01.html">リンク01</a></li> <li><a href="link02.html">リンク02</a></li> <li><a href="link03.html">リンク03</a></li> <li><a href="link04.html">リンク04</a></li> <li><a href="link05.html">リンク05</a></li> </ul> </div> <div id="02"> <img src="gazou01.jpg" alt="画像01" width="400" height="300" border="0"> </div> <div id="03"> </div> <div id="04"> </div> </div> 【CSS】 body { margin: 0; padding: 0; width: 100%; text-align: center; overflow: hidden; } #01_05 { margin: 0 auto; padding: 0; width: 400px; } #01 { position: relative; margin: 0; width: 100%; } ul { position: relative; left: 50%; float: left; margin: 0; padding: 0; } li { position: relative; left: -50%; float: left; display: inline; margin: 0; padding: 0; } li a { float: left; width: 80px; display: block; margin: 15px 0; padding: 15px 0; } #02 { clear: left; width: 100%; } #03 { float: left; margin: 0; width: 200px; } #04 { float: left; margin: 0; width: 200px; }

    • ベストアンサー
    • CSS
  • div枠のレイアウトが崩れてしまいます

    2×2段の枠を作るために、下のような段組にしました。 100%表示ではうまく表示するのですが、ウィンドウを縮小すると、 div要素が勝手に改行してしまい、レイアウトが崩れてしまいます。 同じような質問を参考にして、"wrap"の幅設定をしてみたり、 div要素に{position:relative;}を追加してみたりしましたが、 どれもうまくいかず、縮小でレイアウトが崩れます。 ウィンドウを縮小してもレイアウトが崩れないようにする方法はあるでしょうか? それと、もう1つ質問があります。 右上の枠内の画像を「枠内の右下」に表示したいのですが、よい方法はありますか? {text-align:right;}で横位置は移動できたのですが、縦位置がうまく設定できません。 画像自体に{potision:absolute;}{top:**}{left:**}で指定すると、 またウィンドウの倍率変更でとんでもないところに表示されてしまいます。 【html】 <body> <div id="wrap"> <img src="image/title.gif"> <div id="left-up">あああ</div> <div id="right-up"><img src="logo.jpg"></div> <br class="clear"> <div id="left-down">いいい</div> <div id="right-down">ううう</div> </div> <!-- /wrap--> </body> 【css】 #wrap{ width: 945px; height: 700px; padding: 0px; border: 1px #202020 solid; margin: 0 auto; text-align: left; } #left-up{ width: 160px; height: 80px; border-top: 1px solid #606060; border-right: 1px solid #606060; float: left; } #right-up{ width: 780px; height: 80px; border-top: 1px solid #606060; float: left; } .clear{ clear: left; } #left-down{ width: 160px; height: 500px; border-top: 1px solid #606060; border-right: 1px solid #606060; border-bottom: 1px solid #606060; float: left; } #right-down{ width: 780px; height: 500px; border-top: 1px solid #606060; border-bottom: 1px solid #606060; float: left; } よろしくお願いいたします。 そもそも、この枠組みの仕方が無謀であれば、何かよい方法を教えていただけないでしょうか。 重ね重ね申し訳ありません。

    • ベストアンサー
    • HTML
  • Firefox、Netscapeでレイアウトが崩れる(スタイルシート)

    2段組レイアウト、 左がナビゲーションメニューで ロールオーバーボタンのような効果を出したくて、 IEとOperaでは正常に表示・動作したのですが FirefoxとNetscapeで、レイアウトが大きく崩れてしまいます。 メニュー箇所のソースは以下です。 【HTML】 <div id="side"> <div id="sidelist"> <ul> <li><a href="#">メニュー1</a></li><br> <li><a href="#">メニュー2</a></li><br> </ul> </div> </div> 【CSS】 #side{ float:left; position:absoulte; width:200px; height:100%; padding:0; background-color:#ffffff; } #sidelist ul{ margin:0; padding:0; list-style:none; } #sidelist li{ display:inline; } #sidelist a,#sidelist a:link #sidelist a:visited{ width:100%; height:100%; padding:10px 20px; border-bottom:1px solid #333333; background-color:#cccccc; color:#333333; text-decoration:none; } #sidelist a:hover{ width:100%; height:100%; paddint:0; margin:0; color:ffffff; background-color:#666666; } headerの幅を800px、mainの幅を600pxに指定したので ナビゲーションメニューとなるsideは 200pxに指定しましたが、 数値を減らしてみてもやはり崩れます。 FirefoxとNetscapeでも崩れずに 表示させる方法はあるでしょうか? よろしくお願いします。 なお、ブラウザは全て最新バージョンです。

    • ベストアンサー
    • HTML
  • スタイルシートでのメニュー作成で

    今回初めてテーブルを使わずスタイルシートでナビゲーションを作成しているのですが 下記の方法ではメニュー内のテキストが左に寄ってしまいます。 出来ればすっかり左寄せではなく、左に10px程空間を入れたいのですがどのようにすれば良いでしょうか。 CSS内の#menuに「margin-left:10px」としても反映されません。 ■■ CSS ■■ #menu {margin: 12px; padding: 0px; width: 180px; border-top: 1px solid #080240; border-right: 1px solid #080240; border-left: 1px solid #080240; font-size: 100%; } #menu ul {margin: 0px; padding: 0px; list-style: none; } #menu li {margin: 0px; padding: 0px; } ■■ HTML ■■ <ul> <li><a href="#">メニュー1</a></li> <li><a href="#">メニュー2</a></li> </ul> アドバイスいただけると助かります。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • HTML
  • 半角文字を使用してリスト表示をするとレイアウトが崩れてしまう

    -------------------------------- //htmlコード <div id="hoge">  <ul>   <li>あああ</li>   <li>いいい</li>   <li>ううう</li>   <li>えええ</li>   <li>おおお</li>  </ul> </div> -------------------------------- //cssコード #hoge ul {     margin: 0px;     padding: 0px;     list-style-type: none;     width: 500px; } #hoge li {     width: 33%;     float: left; } --------------------------------- 上記コードで出力をすると以下のように出力されます。 あああ  いいい  ううう えええ  おおお しかし、例えばここで <li>いいい</li> に半角文字を使用して <li>いいいi</li> の様に変更すると あああ  いいいi  ううう              えええ おおお とレイアウトが崩れて表示されてしまいます。 Firefoxでは問題なく表示されますが、IEでこのような現象がおきてしまいます。 これはどういった原因が考えられるのでしょうか。

    • ベストアンサー
    • HTML
  • ホームページビルダーでスタイルシートを使ったのですが?

    今、ホームページビルダーで簡単な2カラム(右メニュー)のテンプレートを作っています。 質問ですが、メニューバー(サイドバー)に色を付けたくて、画像を使う事にしました。 <div class="main">に画像(background.gif)を入れ属性で繰り返す(垂直方向)にチェックをいれたのですが、IEやfirefoxでプレビューでは反映されていないです。 色々いじってみたのですがどうしても解りません。どこが間違っているのか教えていただけないでしょうか? よろしくお願いします。 HTML <body> <div class="box"> <div class="header"> <span class="site_name">ここにサイト名を入れる</span> <h1>ここにh1</h1> <div class="description_1">ここに簡単な説明文</div> </div> <div class="main"> <div class="contents">コンテンツ部分<br /> </div> <div class="menu"> メニュー部分 </div> </div> <div class="footer"> フッター部分 </div> </div> </body> スタイルシート * { margin:0; padding:0; } .box{ width : 750px; margin: 0 auto; border-left-width : 1px; border-left-style : solid; border-left-color : black; border-right-width : 1px; border-right-style : solid; border-right-color : black; border-bottom-width : 1px; border-bottom-style : solid; border-bottom-color : black; } .header { width : 726px; height : 96px; background-color : #b9b9ff; padding-top : 12px; padding-left : 12px; padding-right : 12px; padding-bottom : 12px; border-bottom-width : 2px; border-bottom-style : solid; border-bottom-color : black; } .main { width : 750px; background-image : url(file:///C:/Documents and Settings/※※※/img/background.gif); background-repeat : repeat-y; background-position : 0px 0px; margin-top : 0px; margin-bottom : 0px; margin-left : auto; margin-right : auto; background-color : #ffffff; } .menu { float: left; width : 180px; padding-top : 10px; padding-left : 10px; padding-right : 10px; padding-bottom : 10px; margin-left : auto; margin-right : auto; } .contents { float: left; width : 526px; padding-top : 12px; padding-left : 12px; padding-right : 12px; padding-bottom : 12px; } .footer { clear: both; width : 726px; height : 26px; background-color : #b9b9ff; padding-top : 12px; padding-left : 12px; padding-right : 12px; padding-bottom : 12px; text-align : center; } .menu ul { list-style: none; } .site_name{ font-size : 21px; font-weight : bold; margin-left : 12px; } h1{ font-size : 15px; margin-top : 12px; margin-left : 24px; } .description_1{ font-size : 12px; font-weight : normal; margin-left : 24px; }

  • ボーダースタイルがうまく表示できない

    #content { width:525px; } div.box { width:525px; margin-top: 20px; border-bottom:dotted 1px #ccc; } div.left { width:140px; float: left; font-weight: bold; margin-left: 5px; } div.right { width:380px; float: left; line-height: 20px; height: 20px; } <div id="content"> <div class="box"> <div class="left">Address</div> <div class="right">住所<br>東京都</div> </div> </div> クラス名boxというボックスのボトムにボーダー指定をしましたが、ボックスのズレ?によりボーダーがトップになっているように見えてしまいます。 どこが間違っておりますか? アドバイスを宜しくお願いします。

    • ベストアンサー
    • HTML
  • float横並びにしたブロックの中のul/liを縦並びにさせたい

    float leftで横並びさせている中でul/liを縦並びにさせたい。現在はすべて横並びしてしまう。 (html) <div class="base"> <div class="box1"> <a href="#"><img src="#" alt=""></a> </div> <div class="box2"><img src="images/spacer.gif" width="1" height="1" alt=""></div> <div class="box3"> <ul class="list-y"> <li>ああああ</li> <li>いいいい</li> <li>うううう</li> <li>ええええ</li> <li>おおおお<a href="#">かかか</a></li> </ul> </div> </div> (css) ul{ margin: 0; padding: 0; list-style-type: none; text-decoration: none; display: block; } li { margin: 0; padding: 0; display: inline; } .base { width: 618px; height: 100px; margin: 0; padding: 8px 10px 0 10px; text-align: left; line-height: 1.5em; background-image: url(../images/content_bg.gif); background-repeat: repeat-y; } .base .box1 { width: 130px; height: 97px; margin: 0; padding: 0; float: left; outline: solid 2px black; } .base .box2 { width: 2px; height: 100px; margin: 0 5px 0 10px; padding: 0; float: left; border-right: dotted 2px #ccc; } .base .box3 { margin-left: 157px; padding: 0; font-weight: bold; text-align: left; } .list-y{ clear: both; } CSSに疎いのでよろしくお願いいたします。

    • ベストアンサー
    • CSS