molily: Kniffliges margin-/border-Problem

Beitrag lesen

Hallo, Jan,

das Problem ist leider etwas kompliziert, ich habe es untersucht, aber habe keine Erklärung gefunden, nur dass das von dir beobachtete Verhalten offenbar standardkonform ist, das es von Mozilla und Opera 6.05 und 7b2 wie von dir beschrieben an den Tag gelegt wird.

Erneut eine kurze Zusammenfassung des Falles.
Es existieren zwei div-Elemente, von welchem einen das andere enthält:

<div id="a">
 <div id="b">text</div>
</div>

Weitere Umstände:
 #a hat kein padding und kein border (explizit 0 bzw. none)
 #b hat kein padding und margin-top>0

Die gewünschte Anzeige ist (die Ränder sind vorerst nur gedacht, das heißt nicht unbedingt sichtbar):

+---------------------------+
|                           |
|                           |
|                           |
|                           |
|+-------------------------+|
|| text                    ||
|+-------------------------+|
+---------------------------+

(Angenommen wird weiterhin, dass padding-top bei #a nicht anstelle von margin-top bei #b treten kann, da die Höhe von #a festgelegt werden soll - das wäre zwar über Höhe minus padding-top gleich height möglich, aber diese Alternativmöglichkeit soll hier nicht behandelt werden.)

Es lässt sich jedoch die Beobachtung machen, dass die tatsächliche Anzeige von der gewünschten abweicht.

Version ohne border:
  http://home.t-online.de/home/dj5nu/fanhost/b.html

Anstatt dass #a um die margin-top von #b erhöht wird, wird #bs margin-top als margin-top von #a interpretiert und #a wird mitsamt #b um die angegebene Größe von der oberen content edge des #a-Elternelements abgesetzt.

Wird jedoch eine border bei #a definiert (border-style:!none), ist die Ausgabe wie gewünscht.

Version mit border:
  http://home.t-online.de/home/dj5nu/fanhost/a.html

Ebenso, wenn #a zusätzlichen Inhalt (Textknoten) vor dem Kindelement #b hat.

Version ohne border mit Text in #a:
 http://home.t-online.de/home/dj5nu/fanhost/c.html

Testumgebung: Mozilla 1.2b und 1.3a, Opera 6.05 und 7b2 auf Win98 getätigt; MSIE 6 zeigt alle Versionen nahezu gleich an.

Ich vermute, dass es mit collapsing margins und/oder den verschiedenen edges zu tun hat, welche zusammenfallen, wenn border nicht gesetzt ist (und damit die border edge wegfällt).
Bezüglich collapsing margins: http://www.w3.org/TR/CSS21/box.html#collapsing-margins
Bezüglich den verschiedenen edges, welche wegfallen: Siehe http://www.w3.org/TR/CSS21/box.html#box-dimensions bzw. die Definitionsliste http://www.w3.org/TR/CSS21/box.html#content-edge.

Genauso kann es in folgendem Absatz definiert sein: http://www.w3.org/TR/CSS21/visudet.html#q17 (»Computing heights and margins« -> »Block-level, non-replaced elements in normal flow and floating, non-replaced elements«): <q>If it has block-level children, the height is the distance between the top border-edge of the topmost block-level child box and the bottom border-edge of the bottommost block-level child box.</q>

Alle drei Teile der Specs sind mir teilweise oder komplett unverständlich beziehungsweise erkenne ich nicht diejenige Regel, welche die oben genannten Beobachtungen bedingt.

Vielleicht hat jemand eine Erklärung...

Grüße,
Mathias

--
Moving, watching, working, sleeping, driving, walking, talking, smiling
Moving, watching, working, sleeping, driving, walking, talking, smiling
Moving, watching, working, sleeping, driving, walking, talking, smiling
Moving, watching, working, sleeping, ...     (Air - People In The City)