質問: htmlのブロックにpositionを指定すると幅(width)が100%にならなくなる理由を教えてください。 もちろん、width:100%を指定すればいいだけの話ですが、ふと気になったので質問しました。
回答: 仕様です。 とだけ言うのもあれなので、私の理解している範囲で説明します。 まず、要素に`width`プロパティを定義していない場合、`width`の初期値は`100%`ではなく`auto`になっていて、その**要素の幅の計算はブラウザに委ねられています**。 次に、`position`プロパティの値が`static`(初期値)か`relative`となっている要素は、**通常の文書の流れに沿った内容**になります。 `width`の値が`auto`であり、同時に`display`プロパティの値が`block`である要素が通常の文書の流れの中にあるとき、ブラウザはその要素の幅を`padding`の内側と同じ幅まで広げます。 ノートの罫線が(余白を除いて)横幅一杯まで広がっているのをイメージしてみてください。 「端から端まで書き込むかもしれないから目一杯まで罫線を引いておこう」というのと似た状態なわけです。 しかし、`position`プロパティに`absolute`や`fixed`を指定すると、その要素は**文書の通常の流れから外れます**。 この「文書の通常の流れから外れた要素」というのは、先程と同じノートで例えるなら付箋のようなものです。 書き込んだノートの上に幅が目一杯まである付箋を貼り付けたら邪魔ですよね。 ブラウザも同じような解釈をして、文書の通常の流れから外れた要素は幅を目一杯まで広げる必要はないと判断し、内容に合わせた幅にするわけです。 多分こういう認識で合っていると思います。 あとは(2つ目のW3Cの方は英語ですが)こちらも参考になると思いますよ。 position - CSS | MDN CSS Positioned Layout Module Level 3