![]() |
Robert’s talk |
Webページの制作で水平リストが必要な場合にはフローレイアウトを使って要素を配置していくということがある。しかし、水平フローにさらに可変の高さを持った要素が入っていたり、それを垂直方向に複数行展開するということになると、なかなか面倒なことになってくる。ブラウザの幅に対応したり、ブラウザごとにデザインを揃えるということになると、頭を抱えることになる。
Robert Nyman氏がそうした場合の代替方法のひとつにdisplay: inline-blockを使う方法があるとし、CSS display: inline-block: why it rocks, and why it sucks - Robert's talkにおいて簡潔な説明とサンプルコードおよびその欠点を紹介している。display: inline-blockは要素をブロックとして作成しつつ、インラインボックスのように振る舞わせるための指定。コメントにRobert Nyman氏が挙げたdisplay: inline-blockを使う場合の欠点を解消する設定が寄せられるなど、興味深い内容になっている。
display: inline-blockはこのように便利に使える設定だが、作成されたブロックがインラインとして振る舞いというところに注意する必要がある。インラインとして振る舞うため、ホワイトスペースがレンダリング結果に影響する。ホワイトスペースがピクセルとして現れないようにするには<li>Item one</li><li>Item two</li><li>Item three</li>のようにホワイトスペースを入れずに1行で記述する必要がある。
display: inline-blockを使った場合のこの問題について、CSS display: inline-block: why it rocks, and why it sucks - Robert's talkのコメントには3つの解決方法が寄せられている。まずはコメントを挿入してホワイトスペースを削除するというテクニック。もっとも影響が少ないが、記述が煩雑になる。
<ul id="display-inline-block-example"><!--
--><li>Item one</li><!--
--><li>Item two</li><!--
--><li>Item three</li><!--
--></ul>
次にCSSで空白スペース分をずらすというアプローチ。ただしフォントやブラウザなどの環境によって値を調整する必要がある。
ul {
letter-spacing:-.40em
}
li {
letter-spacing:normal;
}
先ほどと同じ発想だが、指定する内容を変えたもの。スペースサイズ調整が不要になるかわりに、表示されるフォントが変わってしまうという面もある。
ul {
font-size: 0;
}
li {
font-size: 13px;
}
display: inline-blockがどのブラウザのどのバージョンで動作するかといった情報はSitePointのCSSリファレンスdisplayによくまとまっている。同ページにはdisplay、position、floatが指定された場合の関係がどうなるかの説明や、IE7で表示が想定どおりにならない問題なども説明されている。以下にCSS display: inline-block: why it rocks, and why it sucks - Robert's talkに掲載されているコードを簡単に試せるようにそれぞれまとめたものを掲載しておく。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>display: inline-blockデモ1</title>
<style type="text/css">
ul#display-inline-block-example,
ul#display-inline-block-example li {
/* Setting a common base */
margin: 0;
padding: 0;
}
ul#display-inline-block-example li {
display: inline-block;
width: 100px;
min-height: 100px;
background: #ccc;
}
</style>
</head>
<body>
<ul id="display-inline-block-example">
<li>Item one</li>
<li>Item two</li>
<li>Item three</li>
</ul>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>display: inline-blockデモ2</title>
<style type="text/css">
ul#display-inline-block-example,
ul#display-inline-block-example li {
/* Setting a common base */
margin: 0;
padding: 0;
}
ul#display-inline-block-example li {
display: inline-block;
width: 100px;
min-height: 100px;
background: #ccc;
vertical-align: top;
}
</style>
</head>
<body>
<ul id="display-inline-block-example">
<li>Item one</li>
<li>Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two</li>
<li>Item three</li>
</ul>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>display: inline-blockデモ3</title>
<style type="text/css">
ul#display-inline-block-example,
ul#display-inline-block-example li {
/* Setting a common base */
margin: 0;
padding: 0;
}
ul#display-inline-block-example li {
display: inline-block;
width: 100px;
min-height: 100px;
background: #ccc;
vertical-align: top;
/* For IE 7 */
zoom: 1;
*display: inline;
}
</style>
</head>
<body>
<ul id="display-inline-block-example">
<li>Item one</li>
<li>Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two Item two</li>
<li>Item three</li>
</ul>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>display: inline-blockデモ4</title>
<style type="text/css">
ul#display-inline-block-example,
ul#display-inline-block-example li {
/* Setting a common base */
margin: 0;
padding: 0;
}
ul#display-inline-block-example {
width: 300px;
border: 1px solid #000;
}
ul#display-inline-block-example li {
display: inline-block;
width: 100px;
min-height: 100px;
background: #ccc;
vertical-align: top;
/* For IE 7 */
zoom: 1;
*display: inline;
}
</style>
</head>
<body>
<ul id="display-inline-block-example">
<li>Item one</li>
<li>Item two</li>
<li>Item three</li>
</ul>
</body>
</html>
| IEでCSSが2回ダウンロードされるパターン [2010/2/22] |
| CSSでグラデーションを実現する方法、主要ブラウザ全対応 [2010/2/17] |
| HTML5 video、ブラウザ対応状況とコーデックまとめ [2010/1/27] |
| JavaSriptとCSSの結合/圧縮ツール14 [2010/1/22] |
| アイシンの最新安全運転システム - 車両周辺・後方障害物監視、わき見・居眠り判断 [10:30 5/28] |
| ラネクシー、画像処理ソフトウェア開発キットの最新版を64bit版で販売 [10:10 5/28] |
| 東陽テクニカ、1G/10GbE回線対応のポータブルネットワークアナライザ [09:57 5/28] |
| 日本発の取り組み「Mozilla Factory」がスタート [09:30 5/28] |
| 【レポート】クラウド/モバイル/ビッグデータ時代に求められるUIとは - TOBESOFT 金代表 [09:00 5/28] |
|
ネット上でEdy決済可、非接触ICリーダーライター『楽天Edyリーダー』販売 [15:09 5/28] ライフ |
|
ローランド、iPhone・iPadでレコーディングできる無料アプリをリリース [15:08 5/28] クリエイティブ |
|
【女性編】あこがれの場所へ1日限定で1カ所だけ行けるなら、あなたはどこへ行きますか?ランキング [15:00 5/28] ライフ |
|
【男性編】あこがれの場所へ1日限定で1カ所だけ行けるなら、あなたはどこへ行きますか?ランキング [15:00 5/28] ライフ |
|
SKE48の松井玲奈、総選挙7位の速報に「ファンの期待を裏切らないように」 [15:00 5/28] エンタメ |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。