ブラウザによってスペースができる

このQ&Aのポイント
  • HTML 4.01とCSSを使ったW3Cのガイドラインに準拠したサイトを作成しています。
  • IEとFirefoxで動作確認を行っていますが、Firefoxでの表示に問題があります。
  • Firefoxでの表示ではタブがスペースとして表示され、デザインが崩れます。改行もスペースとして表示されるため、インデントを削除しても問題は解消しません。回避策を知っている方は教えてください。
回答を見る
  • ベストアンサー

ブラウザによってスペースができる

HTML 4.01とCSSを使って、W3Cのガイドラインに準拠したサイトを作っています。 そのサイトを、Internet Explorer(以下、IE)とFirefoxで動作確認しています。 ソースを見やすくするために、タブでインデントを施しています。 【サンプル】 <div id="header">   <h1>サンプルページ</h1>   <p>これはサンプルページです。</p> </div> このようなソースをIEで確認すると問題ないのですが、 Firefoxで確認するとタブがスペースとなって表示されてしまいます。 なので、IEにあわせてmarginなどを設定すると、 Firefoxで見た際に大幅にデザインが崩れてしまいます。 (marginの値+タブのスペースが表示されるため。) そこで、インデントを削除して確認してみてもまだ若干スペースがあります。 どうやら、改行がスペースとして表示されているみたいです。 Geckoのレンダリングエンジンの場合になるように思うのですが、 これを回避する策はないのでしょうか? できれば、インデントはそのままにしておきたいと思っています。 (ソースが見にくくなるため。) 回避する策を知っている方がいましたら、どうかよろしくお願いします。

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

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

  • ベストアンサー
  • quads
  • ベストアンサー率35% (90/257)
回答No.5

今まで一般人ってチェックしてましたが、全部経験上の知識です。 って、URIとか全部消去されましたね…(苦笑 まぁ、うpされたものを確認したので大丈夫です; 今回の場合はFF(IE以外のモダンブラウザの一部)でimg要素というインライン要素がどのような高さ(縦位置)で扱われているのかを知る必要があります。 画像をリンクとして使い、anchorにbackground-colorを指定すると分かるのですが、画像の縦の位置=img要素のvertical-alignのプロパティ値を調整することで解決に繋がります。 今回、h1要素で包含されたわけですから、パラグラフと同様、heading要素としての余白が現れるのは当然です。 img要素はvertical-alignの規定値として、未指定の場合、baselineというプロパティ値を持っているのですが、この値は、img要素に関してはテキストの下端に対して余白を持っています。 そして、h1の余白は内容物の上下から計算されるのですが、IEでは内容物の上端下端から計算し、このbaselineの余白を無視してしまいます。 本来であれば余白も含んで計算されるべきです。それがFFで表示した際に現れた、 > 画像の下にわずかに意図しないスペースができてしまいます。 > これはGeckoエンジンの特徴でしょうか? Geckoだけの仕様ではありません。 事実、特徴とかではなく、これが本来の仕様です。 IEで余白が無いのは単なるバグです。 さて、ということで、どうすればいいのかということになるのですが、 実際、img要素の隣にテキストを表示することなど少ないと思います。 まぁ、それは関係ないのですが。ってことで、一括的に指定してしまいましょう。 img {vertical-align:text-bottom;} という指定を。 これは、 a img {border:none;} と同じくらい頻出な指定だと思います。私は。 私もまだまだ未熟なので誤りがあるかもしれませんが、そのときはすみません。。

manabu527
質問者

お礼

quadsさん、ありがとうございます。 img要素にvertical-align:text-bottomを指定したところ、うまくいきました。 本当にありがとうございました。 やはりIEのバグだったんですね。 次期バージョンのIEはW3Cに準拠した解釈が行われることを期待します。

その他の回答 (4)

  • quads
  • ベストアンサー率35% (90/257)
回答No.4

なるほど。 これはタブやスペースによるインデントとは全く関係ありません。 p要素によるパラグラフとしての上下の余白によるものです。 少なくともIEでは、リスト要素やパラグラフ要素として元々備える余白の扱いが異なります。 本来であれば、その要素の前後に何も要素が無くとも余白が発生すべきなのですが、IEでは前後に何の要素(テキスト)もない場合は、余白が無視されます。 余白などの挙動が気になる場合は、それぞれのブロック要素に、borderプロパティやbackground(-color)プロパティを指定して確認してみてください。 挙動の違いが一目瞭然です。 div要素直下にテキストを含むのは(匿名ブロックボックスとなり)問題ないので、 ●p要素での包含をやめる ●div要素での包含に変更 ●セレクタでマージンを指定 などを考えてください。 今、上部のマージンについて考えられていますが、下部についても同様です。 ある(大きな)ブロック要素の内容に関しても、上端部、パラグラフ、下端部、という構成を認識し、適切な構成(余白など)を指定するように心がけていただければ、ある程度のクロスブラウザが可能になると思います。 >>#4補足 問題ないのであれば良かったです。 しかし、最終的には、検証ツールで引っかからなくてもブラウザの解釈の違いで理想形が崩れてしまうことがあります。 完成した後、検証ツールに引っかからなかったから完璧だ。とは思わず、構成に問題が無いか人の目で再確認することが大切です。 それでは、頑張ってくださいw

manabu527
質問者

補足

あぁ~、恥ずかしい…。 quadsさんのおっしゃるとおり、p要素の余白でした。 p要素にmargin:0をつけると、問題なく表示されました。 ありがとうございました。

  • quads
  • ベストアンサー率35% (90/257)
回答No.3

IEでもFFでも、タブによるインデントは表示結果に影響を与えていないように思われます。 少なくとも、ブロック要素間に記述しているので、影響があるとしても要素(テキスト)の末端に半角スペース分の領域が発生するくらいかと。 補足ですが、 <container> <menu></menu> <content><content> </container> というような構成でフロートされていますが、このままでは不適切だと思われます。 ●content要素にwidth指定が無い contentの内容量によっては構成が完全に崩れます。 IEでは理想とされる表示になりやすいですが、バグです。 ●container要素に包含される要素が全てフロートされている container要素の領域が計算されない可能性があります。 container要素もフロート化(float:left)させることで解消されるかもしれません。 ●フロートが解除されていない container要素内部でフロートが解除されるのであればcontainer要素自体をフロートさせる必要はないかもしれません。 <header></header> <container></container> <footer></footer> というような構成なのであれば、footer要素にclear:bothなどを指定することも考えられますが、前後の余白の解釈がブラウザによって異なる可能性があります。 今回は、Strictで作成されているので、br要素のclear属性は利用できません。 それらの点にも注意してみてください。

manabu527
質問者

補足

アドバイスありがとうございます。

  • Kuppycat
  • ベストアンサー率50% (109/216)
回答No.2

同じ環境ですが、特に問題なく表示できました。 フォントの違いでそのように見えるだけなのでは?

manabu527
質問者

補足

アドバイスありがとうございます。 フォント等の設定はデフォルトのままです。 さらに付け加えるならば、bodyにfont-familyを設定しているので、 フォントの違いということは考えられないと思います。

  • Desires
  • ベストアンサー率40% (173/424)
回答No.1

WinXP SP2 の Firefox 1.0.6 と IE 6 SP2 で確認表示してみましたが、当方の環境では、同じような表示されかたがされ、問題無なく表示されますよ? 質問者さんのブラウザバージョンとOSバージョンはなんですか?

manabu527
質問者

お礼

すみません。補足です。 ファイルはhead内にスタイルシートを書き込んでいますが、 実際には外部ファイルを読み込んでいます。

manabu527
質問者

補足

早速の回答、ありがとうございます。 こちらの環境は、そちらとまったく同じです。 具体的には、OSがWindows XP SP2で、 ブラウザがIE 6.0 SP2とFirefox 1.0.6です。 HTMLのバージョン等も念のため書き込んでおきます。 バージョン:HTML 4.01 DTD:HTML 4.01 Strict(システム識別子あり)

関連するQ&A

  • perlにてフォームに入力したhtmlの<>タグの外の半角スペース削除

    perlにてフォームに入力したhtmlの<>タグの外の半角スペース削除 よろしくお願い致します。 Perlのバージョンは[5.10.0]です。 下記の様なhtmlから<>の外側の半角スペースを削除する方法を教えて下さい。 <>の外側でスタイル指定部分の半角は残す必要があります。 <style type="text/css"> <!-- #container{*****} h1{border-right:solid #e4dac6 2px;} #<---この部分の半角スペースは残す必要があります。 .discript0 { margin:0;} #col_1{****} --> </style> <div id="container"> <h1>** ***</h1> #<---<h1>の前の部分の半角スペースは削除。 <div id="col_1"> <p class="discript0"> 123123 121 23 #<---「123123 121 23」の「123123」の前と「121 23」の間の半角スペース削除。 </p> </div> </div> htmlのbodyに組み込む部分です。 ご回答頂くにあたり必要事項の追加が必要で有ればご指摘下さい。 よろしくお願い致します。 確認するボタンを押すと、自動的に「<」の前のスペースとタブが削除されて表示していますが、 記入時は「<」の前にはタブと半角スペースがあります。

    • ベストアンサー
    • Perl
  • ブラウザの中央に配置したい(長文)

    CSS初心者です。 きちんと学んだことがなく、WWW上のリファレンスを参照しながらのサイト作成なので、変な質問だったらごめんなさい。 以下のようなHTML記述で、 <html> <head> <link href="css1.css" rel="stylesheet" type="text/css"> </head> <body> <div id="textbox"> <h2>あああ</h2> <h3>いいい</h3> <p>ううう</p> </div> </body> </html> 外部CSSファイルで次のように指定しています。 @charset "Shift_JIS"; #textbox{ margin-left: auto; margin-right: auto; float: center;   width : 640px; align: center; } Firefoxで表示確認しながら作成し、一応希望通りにdivがブラウザの横幅に関係なく中央配置になるようになったのですが、IE6.0で確認してみたらfloat: centerがきいていないようで全て左寄せになってしまっていました。 textboxだけでなく、どのdivもそうなってしまいます。 また、フォントのサイズなどは指定どおりになっても、マージン・パディングもFirefoxの表示とはかなり違ってしまいます。 上記の記述で問題があればその点を教えていただければ助かります。 (説明の足りないことがあったらご教示ください) また、今後はブラウザ毎にCSSの指定を変えたほうがいいのでしょうか…。そこまで技術がないので、できるだけ応用のきくCSS記述を覚えていければと思っています。 よろしくお願いします。

    • ベストアンサー
    • CSS
  • CSSでmarginを指定すると、表示の仕方がブラウザによって変わってしまいます。

    はじめまして、CSS初心者です。 お聞きしたいことがあります。 ---CSS--- body{   margin:0px;   padding:0px; } #formbox{  width:750px;  height:155px; } #box01{ margin-left:30px; width:280px; height:50px; } ---HTML--- <div id="formbox"> <div id="box">ほげほげ</div> </div> というHTMLをIE6.0とfirefox1.5で表示させたときに、 <div id="box">のmargin-leftがIE6.0だと60pxぐらいになってしまいます。firefoxでは、30pxとられているようなのですが…。 IE6.0とfirefox1.5で誤差が生じしてしまうのはなぜなのでしょうか。 どなたかご教授お願いできないでしょうか。 よろしくお願い申し上げます。

    • ベストアンサー
    • HTML
  • <h1>表示テキストを0emとした場合の処理について

    初歩的な事で申し訳ありませんがご教授下さい。 見出しをテキストではなく画像として、なおかつ背景画像として処理をしたく、表示される結果に困っております。 特に意味は無いのですが、どうせ見出しに画像を使用するなら背景画像として<h1></h1>に変換し、何かSEO的にも良いかと勝手に判断しているのですが… そこで、以下のような例を挙げさせて頂きます。 例) <div id="sample"> <a href="hoge.html"><h1>あいうえお</h1></a> <p>あいうえおの説明?</p> </div> div#sample h1{ display: block; margin: 0; padding: 0; width: 340px; height: 150px; background-image: url(./img/sample.jpg); background-repeat: no-repeat; font-size: 0em; color: #fff; } 上記の場合FireFoxではそのまま背景画像が表示され、<h1></h1>内に入力したテキストも目には付きませんが、IEでの表示に限って約1ピクセル程の大きさでテキストが表示されてしまいます。 そこで皆さんにお伺いしたいのはIEでこの小さなテキスト表示を回避する方法はないかとお伺いをした次第です。 他のサイトでも同じことを行っているのですが上記のような現象は無く、今回に限って表示されてしまいます。 ※表示はIE7での確認です。 解る方が居ましたら是非ご教授下さい。宜しくお願いします。

    • ベストアンサー
    • HTML
  • インデントをスペースにするメリット

    インデントには一般的にタブもしくはスペースが使われますが、これをタブにするメリットは、表示上のインデント幅を表示する人が自由に設定できることだと考えています。 一方でこれをスペースにするメリットは、いくらか調べてみましたが納得できるものが見つかりませんでした。 そこで、インデントをスペースにするメリットを教えてください。 多く見かけたのは「どの環境でも同じように見える」というものですが、その場合なぜ同じように見える必要があるのかを教えてください。

  • スマホで表示するとwidthが適応しない。

    WindowsのPCでは問題ないのですが、スマホでレイアウトを確認すると、width470pxで指定しているのに300px位の幅で改行されてしまいます。 スマホを横にして幅広に表示させると下記sampleの文字は問題なく表示します。 また、sample2の文字(h4)はwidthを指定していないにも関わらず途中で改行されてしまいます。 どうすればスマホでも問題無く表示できるのでしょうか? よろしくお願いします。 <div class="section"> <div class="box_l"> <p> sample.sample.sample.sample.sample.sample.sample.sample.sample.sample.sample.sample. </p> </div> <div class="box_r"> <p><img src="a.jpg" width="460" height="321"></p> </div> </div> <div class="clear"></div> <div class="section"> <h4>sample</h4> </div> .section { position: relative; width: 960px; margin-left:auto; margin-right:auto; margin-top: 50px;} .box_l p{ width:470px; float:left; text-align:justify;} .box_r p{ width:470px; float:right; text-align:justify;} .clear{ clear: both;}

    • 締切済み
    • CSS
  • スマホサイトの複数半角スペースについて

    PCやケータイでは有効な<pre>タグがスマホで効かず、半角スペースがまとめられてしまいます。 回避には<div style="white-space: pre-wrap;"></div>のようにwhite-spaceを使うようですが これも効きません。(富士通isw13fで確認) 何か回避策ありますでしょうか?

  • tabによるスペースの障害と、cssのDIV id=○○ seo対策における<h○>タグ について

    現在、ブログで公開していた記事をやめて、HPで作り直そうと思い、メモ帳とExcelを使って、サイトを作ってみようとしているところです。 初心者です。 Excelを立ち上げて、htmlをセルに記述します。次のセルには、タイトルを。その次のセルには本文を。などというように、1行をコピーして、メモ帳に貼り付け、拡張子をhtmlで保存し、IEでプレビューすると、ちゃんと表示されるのですが、 そのソースを右クリックで表示すると、セルをまたいだ箇所に、tabの空白が入っていて、非常に見にくくなっています。 IE以外のブラウザで確認したことがないのでわかりませんが、 HTMLのソースに、必要以上にtabによる空白が入っていても、問題はないのでしょうか? もうひとつ、質問があります。 cssの、ボックス指定についてなのですが、 外部スタイルシートの記述は以下のようになっています。 #left1 { position:absolute; top:0px; left:0px; margin:0; padding: 4px; border: 1px #666 solid; width:120px; height:120px; background:#FFFFCC; } #menu1 { position:absolute; top:0px; left:134px; margin:0; padding: 0px; width:522px; height:130px; } このように指定したボックスが11個あります。 htmlの記述は、<div id="left1">~</div> などのようにしています。 span class id などの違いがよくわかりません。 1枚のHTMLファイルの中に、こんなにたくさん<div id="~"> を使ってはいけないなどの決まりはあるのでしょうか? 最後の質問です。 見出しタグについてなのですが、 <h1><h2><h3><p> と、文章をつなげた後、 <h2><h3><p> のように、一度<h3>を出現させた後に、また<h2>を使用してもいいのでしょうか? 理解不足で申し訳ありません。 どなたか、それかひとつでもいいので、教えていただけますでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • margin,paddingなどで困ったことがあります。

    現在、HPを作っています。 そこで相談なのですが、FirefoxやOpera、IE8、IE8のIE7互換モードなどで表示の違いがありました。 その部分のソースはこちらです <div class="menu"> <span><h4>Link</h4></span> <p><a href="javascript:void(0)">リンク1</a></p> <p><a href="javascript:void(0)">リンク2</a></p> </div> そしてCSSのソース(一部)です。 div.menu{ font-size: 10pt; color: #000000; font-weight: bold; margin: 3px; padding: 4px; border: 4px groove #000000; width: 178px; background-color: #eeeeee; } div.menu span{ display: block; text-align: center; } div.menu h4{ color: #000000; font-size: 26px; padding-bottom: 10px; padding-top: 10px; } このCSSのソースのどこを修正すれば、正しい表示になるでしょうか? 表示は送付画像のような表示です。

  • 行と行の間のスペースをなくしたい

    行と行の間のスペースをなくしたいのですが、 うまくいきません。 <div style='margin-bottom:0;padding-bottom:0;'>ああ</div> <div style='margin-top:0;padding-top:0;'>いい</div> のような形でいろいろ試しているのですが、行間は残ってしまいます。 ブラウザはIEです。 ご教授よろしくお願いします。

専門家に質問してみよう