Hallo, Axel,
Durch den Rahmen bekommt das div-Element aber eigenen Inhalt.
Häh - was bedeutet das? Was hat Rahmen mit »eigenem Inhalt« zu tun? Kannst du eventuell den relevanten Standard-Auszug posten?
Explizit steht das nirgends, aber folgendes scheint mir logisch:
Das div ist _nicht_ automatisch eine Box laut http://www.w3.org/TR/REC-CSS2/box.html. Es ist ein Block-Level-Gruppierungselement.
Wo steht das genau geschrieben (das Dokument ist umfangreich); und was bedeutet das?
Erst durch eigenen Inline-Content oder durch einen Border oder durch ein Padding wird es zu einer Box.
Das kann ich nicht nachvollziehen. Selbst wenn direkter Inline-Inhalt vorhanden ist, welcher eine anonyme Box bildet, werden die margins des folgenden Blockelements nur teilweise angezeigt - wie dein Beispiel auch zeigt.
Solange es keine Box ist, wird der Margin seiner Box-Kindelemente transparent dargestellt.
Ja, aber auch nur teilweise, es gibt folglich keinen Zustand »ist Box« oder »ist nicht Box«, welcher zur Erklärung herangezogen werden kann. Wenn border und padding des div-Elements gegeben sind, trifft deine Aussage zu, aber warum?
Wieso exakt ist es bei padding anders?
Weil Padding innerhalb des p-Elements liegt, Margin aber außerhalb?
Worauf willst du hinaus? Die margins des p-Elements sollten die content edge (beziehungsweise die nicht vorhandene padding edge, welche mit der content edge übereinstimmt) des div-Containerblocks vergrößern. Und warum dies nicht der Fall ist, ist mir bis jetzt noch nicht klar geworden.
Meiner Ansicht nach macht ein Box-Kindelement mit Margin aus einem div keine Box (siehe oben).
Das kann ich dem Standard nicht entnehmen, bitte zeige es mir... Vor allem ist mir die Unterscheidung »ist Box« beziehungsweise »ist nicht Box« noch nie über den Weg gelaufen.
Der Hintergrund im Beispiel ist der Hintergrund der p-Box, nicht des divs.
Das ist mir bewusst.
Einige weitere Beispiele, die meine Ansicht zu stützen scheinen ;-)) [...]
Ja, das alles scheint einer Logik zu folgen, was ich auch nicht bezweifeln wollte. Dennoch wurde meine Frage, wo dieses Verhalten explizit definiert beziehungsweise vorgeschrieben ist, nicht beantwortet.
Möglich wäre vielleicht: »If it has block-level children, it is the distance from the top border-edge of the topmost block-level child box, to the bottom border-edge of the bottommost block-level child box« (http://www.w3.org/TR/REC-CSS2/visudet.html#q17). Somit kann die content height des Containerelement nur so hoch sein wie die border edge des p-Elements - aber was ist mit den margins des p-Elements, welche außerhalb der border edge liegen, wieso wirken sie über die content edge des Containers hinaus...? Nein, das kann nicht sein.
Grüße,
Mathias