Swap Skills
書籍などに紹介されていない display : inline-block について

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

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

SwapSkills とこのスライドについて

主催:『allWeb クリエイター塾

web directions east

allWeb クリエイター塾では 11 月に web directions east を開催予定です。

自己紹介

小山田 晃浩

株式会社メタフェイズ / HTML コーダー

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

コーダーブログ : http://labs.metaphase.co.jp/blog/coder/

アジェンダ

行について

これを頭の片隅において 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?

aa

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

  1. vertical-align は 行内の縦位置をどこに揃えるかを決めることのできる CSS のプロパティ
  2. 行内では vertical-align が有効
  3. vertical-align を middle または bottom に指定することで inline-block で作ったカラムの上下中央揃え、下揃えを実現できる

上下中央揃えの段組

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

下揃えの段組

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

応用例 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 なので 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 以前のバージョンでは

Mozilla 系Webブラウザに独自実装されている display プロパティの値 -moz-inline-box を使用する

-moz-inline-box が指定された要素の中身の挙動は 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 以前のバージョンのために余分なマークアップをする

Opera では

Firefox と同じく HTML のソースコード上ではスペースや改行をつけないようにする

これらを組み合わせる

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;
}

HTML のソースコード

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

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

Fx 2 以下で気をつけること

まとめ