display : inline-block をつかったレイアウト

初版 : 2008 年 7 月 5 日
アップデート : 2008 年 10 月 16 日
小山田 晃浩
株式会社メタフェイズ

矢印キーの左右でスライドを切り替えることができます。

このスライドについて

このスライドは 2008 年 7 月 5 日に開催された SwapSkills で使用しました。
今回はその再演です。

自己紹介

ヨモツネット : http://www.yomotsu.net

アジェンダ

前提 行について

行について

これを頭の片隅において inline-block を知ってみましょう

仕様 / 仕組み

inline-block は...

CSS 2.1 で定義されている display プロパティの値の一つ

inline-block を指定するには

div.sample{
	display:inline-block;
}

のように指定する

inline-block の仕様

CSS 2.1 (9.2.4 The 'display' property)

inline-block
This value causes an element to generate a block box, which itself is flowed as a single inline box, similar to a replaced element. The inside of an inline-block is formatted as a block box, and the element itself is formatted as an inline replaced element.

inline-block の仕様をまとめると...

inline-block 仕様を図にしてみる

inline-block のどこがいいのか

実装 実際の応用例

実際の応用例

inline-block を使ったレイアウトの例の紹介

これらのソースコードは公開します

基本的な利用方法 : 横並びの box

応用例 1 : float : center?

応用例 2 : 上下中央揃え、下揃えの段組

  1. 行内では vertical-align が有効
  2. vertical-align を middle や bottom に指定することで上下中央揃え、下揃えを実現できる

上下中央揃えの段組

vertical-align :middle を指定して行の中央に揃えて配置する

display:tableを併用した例

下揃えの段組

vertical-align :bottom を指定して行の底に揃えて配置する

応用例 3 : 高さが違う box が並ぶリスト

まず、float で実現する方法を思い出してみる

高さが違う要素が混ざっている場合、そこで詰まって崩れてしまう

応用例 3 : 高さが違う box が並ぶリスト

まず、float で実現する方法を思い出してみる

そのため、1 行ずつ div などでくくる必要がある

inline-block の特徴を思い出して実現してみる

  1. 通常のテキストなどは行の中に並び、横幅がいっぱいになると次の行へ折り返す : demo
  2. これと同様に inline-block は横幅がいっぱいになると自動で次のを作り出し折り返す
  3. 高さが違う box が並んでいる複数の行を作ることができる

実装 実際に inline-block 使う方法

現在のメジャーな Web ブラウザではほぼ使うことができる

メジャーな Webブラウザの対応状況

Opera, Safari と最近 Firefox 3 でも対応がされた。

各 Web ブラウザ (最新からの 2 世代) における inline-block の対応状況
Web ブラウザ対応状況メモ
Internet Explorer 8 beta 2 サポート済み beta 1 は未対応だった
Internet Explorer 7 一部サポート display: inline と zoom: 1 を組み合わせることで実現可能
Internet Explorer 6 一部サポート display: inline と zoom: 1 を組み合わせることで実現可能
Firefox 3 サポート済み
Firefox 2 サポートしていない inline-block はサポートしていないが -moz-inline-box とマークアップで代用可能
Safari 3.1 サポート済み
Safari 2 サポート済み
Chrome サポート済み レンダリングエンジンが Webkit なので CSS のサポートは Safari とほぼ同等
Opera 9.5 サポート済み
Opera 9.2 サポート済み

IE や Firefox 2 以前のバージョンでも対応ができる

横幅が 300 px の inline-block を作るとき

div.sample {
	width: 300px;
	display: inline-block;
}

を指定する。

IEでは

IE 5 以上、7 以下のためのコードを追記する

div.sample {
	width: 300px;
	display: inline-block;
	/display: inline;
	/zoom: 1;
}

/』で始まるプロパティは IE 5, 5.5, 6, 7 用の CSS ハック (IE 8 では無視される)

Firefox 2 以前のバージョンでは

display : -moz-inline-box; を使用する (Mozilla 独自実装)

inline-block が指定されたときとは違うが、block が指定された要素を噛ませることで解決できる

Firefox 2 以前のバージョン用のには CSS に以下を追記する

display: -moz-inline-box;display: inline-block; の前に追記する

div.sample {
	border: 1px solid #999;
	width: 300px;
	display: -moz-inline-box;
	display: inline-block;
}

div.sample > div{
	width:300px;
	display:block;
}

Firefox 2 以前のバージョン用の HTML のソースコード

display:block最大の横幅が指定された要素を噛ませる

<div class="sample"><div>内容</div></div>

Firefox 2 以前のバージョン用の HTML のソースコード

<div class="sample"><div>内容</div></div>

Firefox 2 以前のバージョン用の inline-block

IE 用、Fx 2 用コードを組み合わせる

CSS のソースコード

div.sample {
	border: 1px solid #999;
	width: 300px;
	display: -moz-inline-box;
	display: inline-block;
	/display: inline;
	/zoom: 1;
}

div.sample > div{
	width:300px;
	display:block;
}

IE 用、Fx 2 用コードを組み合わせる

HTML のソースコード

<div class="sample"><div>内容</div></div>

メジャーな Web ブラウザ (IE 6, 7, Firefox 2, 3, Safari 2, 3, Opera 9.2, 9.5) で inline-block の実現が可能

気をつけること

HTML のソースコード上ではスペースや改行をつけない (Firefox 2, Opera 対策)

Firefox 2 用に気をつけること

まとめ

このスライドについての情報とその他

スライドの URI
http://www.yomotsu.net/works/081016cssnite
ハンドアウトの URI
http://www.yomotsu.net/works/081016cssnite/handout.pdf
連絡先
admin[at mark]yomotsu.net

コーダーさんを募集してます。で。

CSS上級テクニック講座 (全 8 時間) を 10 月 26 日 日曜日に行います。
http://all-web.org/modules/tinyd/index.php?id=8