• 締切済み

line-height指定で発生する余白の対応

line-heightを指定した際に発生する要素の上下の余白(文頭の行の上と文末の行の下)についてご相談です。 行間を指定する上で仕様上仕方のない空白なので、普段は (1)多少の余白なので無視する (2)次に続く要素が背景色or画像orボーダーありの要素以外のときは別途CSSでマージンを調整する (3)ブロック要素の内側に<span>でネガティブマージンを指定して上下のline-heightを相殺する のいずれかで対応しています。 (1)はともかく、(2)は汎用性がいまいちで、構成が変わって画像が間にはいったりしたらクラスをいちいち付け替えなくてはなりません。 (3)に関しては文書構造上余計なタグが入ってしまいますし、ネガティブマージンの多用でかなりカオスなことになってしまいます… かといってデザインに気を使ったサイトやline-heightをかなり広めに指定したいときなど、 見過ごせないときもあるなあと思い、皆様がどう対応しているのかご教授いただければと思います。 よろしくお願いいたします。

みんなの回答

  • tracer
  • ベストアンサー率41% (255/621)
回答No.2

:beforeや:afterを解釈できる比較的新しいブラウザであれば、一応こんな感じで回避できますね。今、思いついただけの方法なので、ベストプラクティスかどうかは謎ですがw p{  background: #f00;  line-height: 3;  font-size:15px; } p:before , p:after{  display:block;  content:"";  line-height:1;  height:1px;  width:1px; } p:before{  margin-bottom:-15px; } p:after{  margin-top:-15px; } :beforeや:afterを解釈できないブラウザに関しては、javascriptで対応させる感じかな。

全文を見る
すると、全ての回答が全文表示されます。
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

基本的には、(1)です。 永続スタイルシートには html,body{margin:0;padding:0;font-size:14px;} h1,h2,h3,h4,h5,h6,p{line-height:1.8em;margin:0;} p{text-indent:1em;} としています。 途中に画像が入ると言う想定がよくわかりませんが・・ 例えば本文(section)中の段落はline-height:3em;だとして div.section p{margin:0;line-height:3em;} 挿絵的要素(class="figure")があれば div.section *.figure,div.section *.figure p{margin:-1em;line-height:1.8em;text-align:center;} >(2)は汎用性がいまいちで、構成が変わって画像が間にはいったりしたらクラスをいちいち付け替えなくてはなりません。  これもわかりません。ひょっとしてデザインのためにclass名をいちいち付与しているのですか?もしそうでしたら、根本的に間違っています。 『DIV要素とSPAN要素は、id属性及び class属性と併用することで、文書に構造を付加するための一般機構を提供する。( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/struct/global.html#h-7.5.4 )』ためのものです。その上でその文書構造を利用してスタイルシートを書くのです。  HTML5では、DIVは他に適当な要素がないときの最後の最後の手段としてDIVを使うと明記されましたが、元々HTML4.01の時代からそうでした。 【引用】____________ここから NOTE:Authors are strongly encouraged to view the div element as an element of last resort, for when no other element is suitable. Use of more appropriate elements instead of the div element leads to better accessibility for readers and easier maintainability for authors.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[4.5 Grouping content — HTML5( http://www.w3.org/TR/html5/grouping-content.html#the-div-element )]より 訳すと 『著者は、他に適切な要素がないときの、最後の手段としてDIVを使用することが強く奨励される。DIVより適切な要素を使用することは、読者には良いアクセシビリティに、著者には容易な保守につながる。』 <div class="section">  <h2>見出し</h2>  <p>(1)はともかく、(2)は汎用性がいまいちで、構成が変わって画像が間にはいったりしたらクラスをいちいち付け替えなくてはなりません。</p>  <p>3)に関しては文書構造上余計なタグが入ってしまいますし、</p>  <p class="figure"><img src="./images/abc2.jpg" width="100" height="100" alt="扇風機"></p>  <p>ネガティブマージンの多用でかなりカオスなことになってしまいます…</p>  <div class="figure">   <p><img src="./images/abc2.jpg" width="100" height="100" alt="扇風機"></p>   <p class="figcaption">これは扇風機</p>  </div> </div> に 先のスタイルシートで添付図のようになるはずです。firefox+firebug・・  スタイルシートを読むと一目瞭然にわかるのは div.section p{margin:0;line-height:3em;} ↑本文中の段落は行高さを3emにする。 div.section p.figure,div.section div.figure p{ ↑本文中の挿絵中の段落は margin:-1em;line-height:1.8em;text-align:center; とHTMLを見なくてもどうデザインしているかわかりますし、デザインを変えるためにHTMLを弄る必要もありませんね。 ★HTMLはデザインを一切考えずに、ひたすら将来の自分(あるいは第三者)のメンテナンス性、検索エンジンに理解できるよう、様々なユーザーエージェントに利用できるよう・・文書構造だけをマークアップする。 ★スタイルシートはその文書構造を元にmarginやline-heightやpaddingなどを自在に調整する。  そうすると、 汎用性とか、構成が変わって画像が間にはいったりしたとか、文書構造上余計なタグとかの悩みはそもそも存在しなくなるのでは?

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

関連するQ&A

  • line-heightと画像

    例えば、 <div style="line-height:200%"> 一行目<br> 二行目<br> 三行目<br> 四行目 </div> とすれば、それぞれの行間(行の前後の余白)は通常の200%となりますよね。 このとき文章内に(文字と同じくらいの高さの)画像を入れると、IEではその行前後に行間が開かないようなのですが、どうすればよいのでしょうか。 Netscapeでは文章と同じように行間が開いて表示されるのですが。 <div style="line-height:200%"> 一行目<br> <img src="gazou.gif">二行目<br> <img src="gazou.gif">三行目<br> 四行目 </div> のようにすると、二行目と三行目に行間が開きません。 (二行目と三行目のそれぞれの行の前後に余白がありません。) ちなみに、DTDは <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ですが、システム識別子をつけても同様でした。 ※準拠にしたらtd,th内にも適用されました。余談ですが。 IEで、画像を含んだ行にline-heightを適用させるにはどうすればよいのでしょうか。 誤った表現をしていたら申し訳ありません。

    • ベストアンサー
    • HTML
  • line-height

    <html> <head> <title>test</title> </head> <body> <style type="text/css"> p.example1{ line-height:10em; } </style> <p class="example1">test1</p> <p class="example1">test2</p> </body> </html> line-heightを使うと、上の余白もあいてしまうのですが 行間だけ開けて、上下の余白は開けない方法はありますか? 不可能だったら文字と文字の間に改行を入れたりした方がいいのでしょうか?

    • ベストアンサー
    • CSS
  • line-heightが利いてない

    下記のように指定しましたが、line-heightだけ利いてないと 思います。行間があきません。 #new { width:160px; text-align: left; line-height: 150%; float:left; margin: 10 10 10 0; padding: 5; border:1px solid #800000; clear : left; } HTML <div id="new">コラム<br>{$tag}</div> $tagはphpを使っています。 line-heightが利かないことはあるのでしょうか?

    • ベストアンサー
    • HTML
  • スタイルシート line-heightのバグ?

    ホームページの中で、行幅をあけるのに、line-heightを使っています。 簡潔なタグは以下の通りです。 <html> <body> <span style="font-size:13px; line-height:160%;"> <img src="image/point.gif" border=0 width=6 height=8 alt="">てすと1<br> <img src="image/point.gif" border=0 width=6 height=8 alt="">てすと2<br> </span> </body> </html> 「てすと1」「てすと2」の前に小さな画像を入れています。 WinXP、NN4.XやN7.Xで見た場合は、画像が入っていても問題なく行幅が開きますが、 WinXP、IE6.02で見ると、line-heightが効きません。 これはIEのスタイルシートバグなのでしょうか? また、打開方法ありましたらお願いします! (参考まで:テーブルタグを使いたくないのでline-heightで行間をあけています)

    • ベストアンサー
    • HTML
  • selectにline-heightがきかない【WIN IE6】

    プルダウンメニューが混じっている文章があるのですが、この文章に line-heightで行間をつけたところ… ※■がプルダウンだとします。 ああああああああああああ■あああ あああああああ■ああああああああ ああああああああああああああああ あああああああ■ああああああああ ああああ■あああああああああああ といったように、プルダウンのある行に関してline-heightが効きません… firefoxでは全ての行に行間がきちんと対応されるのですが… こちらの回避方法分かる方いらっしゃいますでしょうか?

  • CSSで行間の指定

    td { font-size:10pt; line-height:16px ;} で指定しています。 このtdの中に2行書いていますが ああああああああああ<br> いいいいいいいいい<br> このそれぞれのテキストの前に <img src="xxx.gif" width="20" height="9"> と画像を入れると行間の指定が効かなくなってしまいます。 どのような指定をしたらよいのでしょうか。

    • ベストアンサー
    • HTML
  • ネットスケープで上に余白があいてしまいます

    お忙しいところすみません。どうしたら良いのか分からないので、教えていただけると大変うれしいです。 IEだと上の余白がなくちゃんと表示されるのですが、ネスケで見ると上にかなりの余白があいています。マージンを2パターンで指定しているのですが、なぜなのでしょうか? body { margin-left: 0px; margin-top: 0px; margin-height: 0px; margin-right: 0px; margin-bottom: 0px; } 何かタグが足りないのでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • HTML
  • WEBページ wordのように余白指定

    DreamweaverMXを使用して、個人HPを作成しています。 以前からwordの様に、画面上に上下左右余白を指定できたらなーと思っていたのですが、何か指定する方法はないでしょうか。 背景にひとつの画像を付けたいのでフレーム等で区切るのではなく、 行始まりはここから、というような指定が出来れば便利だなぁと思うのですが・・ お詳しい方、どうかご教授下さい。

    • ベストアンサー
    • HTML
  • HPの余白

    こんにちわ! HPの最初の行の部分を記入した上の部分の余白(マージンというのでしたか?)を 確か0にする事できましたよね。やり方がわかりません。すんませんが、教えてくださいませんか?

    • ベストアンサー
    • HTML
  • 上部の余白を消すには?

    上部の上の部分の余白を消したいのですが イマイチソースの使い方が分かりません。 TOPマージンを使えばよいとの事ですが どのように使えばいいのでしょうか? そのページには画像があって、 画像をなるべく上部に載せたいのです。

    • ベストアンサー
    • HTML
B204で印刷できない問題について
このQ&Aのポイント
  • B204で印刷ができないトラブルが発生しています。原因や解決方法について教えてください。
  • キヤノンのB204で印刷できない問題についてのお知らせです。原因や対処法について詳しく教えてください。
  • B204の印刷トラブルについての最新情報をお知らせします。具体的な原因と解決策についてご説明します。
回答を見る

専門家に質問してみよう