Zunächst also ein wenig Fleisch, um den Rahmen abzustecken:
HTML
<div id="container">
<div id="inner">test</div>
</div>
CSS
#container {
width:300px;
height:150px;
background-color:#d7ebff;
}
#inner {
width:100%;
height:100%;
padding:5px;
background-color:#4c0015;
opacity:.3;
}
Dies führt zu einem Ergebnis, das in allen modernen Browsern so aussieht:
Jetzt weiß ich, dass dies das standardkonforme Verhalten ist (was ich schon vorher wusste, aber in diese Stelle und ich weiß auch, dass, wenn ich diesen Code in die innere CSS-Deklaration einfüge:
box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box
...es wird das "border-box"-Modell übernehmen und das Verhalten erhalten, das mir intuitiver erscheint, aber ich habe mich dabei ertappt, wie ich versucht habe, logisch zu begründen, warum dies so ist, wie es ist, und es ist mir nicht gelungen.
Es erscheint mir (oberflächlich betrachtet) logischer, dass der innere Kasten den Container immer zu genau 100 % der Breite des Containers ausfüllt, unabhängig von der Auffüllung oder dem Rand des inneren Kastens. Ich stoße ständig auf dieses Problem, wenn ich versuche, die Breite eines Textfeldes auf 100 % festzulegen, das einen Rahmen oder so etwas wie eine 4px Innenauffüllung hat... das Textfeld wird den Container immer überfüllen.
Meine Frage lautet also: Welche Logik steckt dahinter, wenn man das Standardverhalten so einstellt, dass der Rahmen und das Padding eines Elements bei der Einstellung seiner Breite ignoriert werden?