この資料は公開時より24時間内において他サイトの内容を無断で使用しておりました。
これに関して、kzは以下のエントリにおいて説明及び謝罪をしております。
今回のお話は、XHTMLの
と、似ておりますが違う話です。
ご注意ください
CSSを書いたことがありますか?
「あれ?なんでこれカラム落ちしてんだ?」
って思いをしたことがありませんか?
「floatとかpositionとかわからないし...」
といった悩みを抱えていませんか?
IEはいらない子
と思っていませんか?
この時間でボックスの概念を理解すれば、もう怖いものなしです!
floatも楽々使いこなし、xml宣言を書いてもIEを憎むことがなくなります!
順路→
CSSには色々なボックスがあります
代表的なものとしては...
などがあります
実は他にも様々なボックスがあります
などがあります
今までに述べたボックスは、displayプロパティによって指定できます。
(ただし、匿名(ブロック|インライン)ボックスは除く)
div {
display: block;
}
<div>divはブロックボックスです</div>
順路→
displayプロパティがblock, list-item, tableである要素が描くボックスをブロックボックスといいます。
要素全体を囲む1つの長方形として描かれます。
hoge
fuga
piyo
displayプロパティがinline, inline-tableである要素が描くボックスをインラインボックスといいます。
要素の内容を行ごとに囲む1つ長方形として描かれます。折り返しによって分割されます
いんらいんぶろっくは、ふくすう行にまたがってもちゃんと囲むんだぜー?しかも途中できょうせい改行とかいれても
こんな感じでちゃんと囲むんだぜ?すっげーだろ!
displayプロパティがcompactである要素が描くボックスで、以下の条件のとき特殊なインラインボックスを生成します。
こんな感じです。
で、ハイトなワゴン
コンパクトボックスは、Opera, Safariのみ実装しています。
※dl, dt, dd にて擬似的に似せています。
displayプロパティがrun-inである要素が描くボックスで、以下の条件のとき特殊なインラインボックスを生成します。
ランインボックスは、Opera, Safari, Mac IEが実装しています。
<p style="display: run-in">ここがランイン</p>
<p>ランインをずっとラインインだとおもってすごしてた</p>
ここがランイン ランインをずっとラインインだとおもってすごしてた
割愛 ;)
順路→
<div>
らんらららんらららんららん
<p>りんるんれんろんほげふがぴよ</p>
</div>
このとき、整形の定義づけを容易にするために、"らんらららんらららんららん"の周りにボックスがあることにします。これが匿名ブロックボックスです。
匿名ブロックボックスは、自分を含んでいる非匿名ブロックボックスからプロパティの値を継承します。
<p>はー<em>ひふへ</em>ほー</p>
"ひふへ"はem要素が生成しているインラインボックスです。"はー"と"ほー"はp要素が生成しています。このとき、"はー"と"ほー"は匿名インラインボックスとして扱われます。
匿名インラインボックスは、親のブロックボックスからプロパティの値を継承できるだけ継承します。
順路→
アル晴レタ日ノ事
魔法以上のユカイが
限りなく降りそそぐ
このとき、各行に
アル晴レタ日ノ事
魔法以上のユカイが
限りなく降りそそぐ
こんなボックスが出来ています。これが行ボックスです。
つまり、1行を構成する複数のボックスが含まれている矩形領域を行ボックスといいます。
行ボックスにはこんなきまりがあります。
ある要素が生成したボックスは、その子孫ボックスの包含ブロックとして機能します。
つまり...
<div>
<p>シャンプーはエッセンシャル派です</p>
</div>
このとき、div要素が生成したブロックボックスはp要素が生成したブロックボックスの包含ブロックとなります。
また、body要素はルート要素であるhtml要素の矩形領域を包含ブロックとする初期包含ブロックとして機能します。
包含ブロックはこうやってきまります
特にこんな場合に意識しましょう :(
こんな等式もあるよ
'margin-left' + 'border-left-width' + 'padding-left' + 'width' + 'padding-right' + 'border-right-width' + 'margin-right' + (もし在ればスクロールバーの幅) = 包含ブロックの幅
最後にボックスモデルについておさらいしましょう!
CSS2では、このボックスモデルを基にブロックの幅や高さ、配置を決めます
IEの後方互換モードでは、(width|height)にmarginまでを含めてしまうので注意が必要です
以上でボックス関連についてのおはなしを終わります
簡単でしょう?
浮動とか絶対配置の話もしたかったのですが、資料作成できませんでした。ごめんなさい。
またどこかで話せたらいいですね :D
おしまい