Tutorial
この記事の読了時間:約3分56秒
リストタグ(li タグ)に対してCSSで display:inline や display:inline-block を使って横並びにしようとすると、なぜか横に2~3ピクセル程度の意味不明な隙間が生じます。
初めて遭遇した時は、慌てて自分の書いたCSSを確認したり、仕方無しに float:left に書き換えたり、マイナスマージンで誤魔化したりしたって方も多いんじゃないでしょーか。
が、この問題の主たる原因はCSS側ではなく、HTML側の「改行」。
とはいえ「見栄え」の問題なので、HTMLをどーこーするのは気持ち悪い。
そんな時には今回ご紹介する対応策!CSSにほんの少々の手を加えるだけで、この謎の隙間から完全に開放されちゃいます!
さぁさぁ、寄ってらっしゃい見てらっしゃい♪
下記マークアップで現象は再現されます。まずはHTMLから。
<ul> <li>その1</li> <li>その2</li> <li>その3</li> <li>その4</li> <li>その5</li> </ul>
んで、CSSは下記。分かりやすく li タグの背景に色を付けていますが、現象には影響ありません。
ul li { background-color:#eee; display:inline; }
このようなマークアップだと、下記のサンプルページのように「謎の隙間」が発生してしまいます。
上記サンプルページでは各ブラウザのデフォルトCSSをリセットするのに「CSS Reset - YUI Library」というのをCDNで使用していますが、まぁリセットしてもしなくても当該症状は発生します。
比較的よく見かける対応策としては、下記のように「改行部分にHTMLコメントアウトを付ける」というモノ。
<ul> <li>その1</li><!-- --><li>その2</li><!-- --><li>その3</li><!-- --><li>その4</li><!-- --><li>その5</li> </ul>
うはーマンドクセ( ゚д゚)、ペッ
もしくは下記のように「改行を入れず一行で記述する」ってのもよく見かけます。
<ul> <li>その1</li><li>その2</li><li>その3</li><li>その4</li><li>その5</li> </ul>
これもこれで1階層ならまだイイけど、多階層になったら見辛いコトこの上なし。
しかも両対策とも「見栄え」のハナシなのにHTMLの記述に余計な手間をかけなきゃなので、なんか筋違い感も拭えません。
これからの決定版はコレ!HTMLは変わらないので、CSSだけを下記に。
ul { font-size:0; } ul li { font-size:16px; background-color:#eee; display:inline; }
ポイントは「親の ul タグに font-size:0 を指定して、その子要素の li タグで改めてフォントサイズを設定する」ってトコ!
こーすると下記サンプルページのように、あの「謎の隙間」は綺麗サッパリ無くなっちゃいます☆
HTMLを汚すこと無く、複雑なCSS記述でもない、なんともエレガントな対応策。
是非一度ご賞味あれ♪
続く明日はマークアッパー必携知識「clearfix」について。
:after要素?IE用ハック?そげなモン使わんよ!!
関連する記事
同じカテゴリーの記事
makebridge より:
2012/11/20 8:07 PM
ソースを汚さないエレガントな横並び感動しました!
ただ、IE6、7で確認したところ、まだ隙間がありましたので
なんとか消せないかなと思い試行錯誤していたら
liのCSSにzoom:1;を入れて、hasLayoutを有効にすると隙間がなくなりました。
うちの現場では、まだIE6、7の検証が必要だったので。。。
念の為コメントさせていただきました。
不要でしたら削除してください。
こちらの方法、今後活用させていただきます♪