てんぽ:みりばーるさんのエントリの本質からは外れていますが正確には初期包含ブロックがbodyに見えるというだけです
という部分の謎に迫ってみます。えー、資料のPDFは読んでいませんので、一般的な HTML 文章(<body>の中に<p>がひとつ以上あって、その最初のパラグラフだけに position:absolute のスタイルづけがされている)の想定。
<body> の位置を変えてみて <p> が連動した描画がされなければ、そのフローからは外れている=そのブロックは包含ブロックではない=初期包含ブロックではない、という三段論法(絶対配置だけに位置のみを見ればいいので簡単)。例えば、<body>にマージンを指定した CSS を書いてみる(test 1)。資料の”ブラウザ”が具体的に何を指すのかは不明だが、Firefox では <p> は <body> から飛び出して描画され、連動していない。<body> が position: static;(初期値)なので、その祖先要素 <html> が初期包含ブロックである、という予想がたつ。
また、初期包含ブロックを <body> としてしまうと、それより外にある要素にスタイルづけした場合に、どこを基準にして描画されるのか?という疑問もからもアプローチしてみよう。(前出と同じ HTML に CSS のみ書き換えたもの test 2)。やはり、この場合でも初期包含ブロックは <head> のように見えるが、 <html> となる。2つの実験から「祖先要素のうち最も近い、position の値が sitatic でない要素、該当する要素がなければ、ルート(根)の要素が初期包含ブロックとなる」で良いのでは。
ところで、test 2 は<body> 以下をすべて display: none; して <style> 要素の内容を表示するという「頭の悪い方程式」ならぬ「頭の悪いスタイル」。少なくとも日記だけは連動していたのだ。
< メンテナンス中 | 標準単焦点写真生活【5】 > | 表紙へ戻る |
なので、<html> を絶対配置するとその包含ブロックはブラウザの表示領域になると思います。
(たいていのスタイルでは表示領域とbodyは一致するのであのように書いたわけです。)-07日04時
ここがズバッと書かれていなかったことで「仕様書にはその記述がないのか」と推理したわけです(つまり、仕様書を読んでいないのです、僕)。
html には position のプロパティがないのかもしれないと思いなおしています。これもちょこっと書いてみて、バリデータを通してみれば解ることですが。
CSS を使う人は普通に * 全称セレクタ=ワイルドカードを使っていますけど、html や head にスタイルづけしようとはしませんね。これらの要素にも背景やボーダーを指定すれば、デザインの幅が広がるような気がするのですが。(あのブラウザがシェアを握っているうちはムリか)
そんなこんなな理由で、多くの人は無意識のうちに body が最親要素だと勘違いしているのではないかと思いました。-07日19時