Gunter Gans: Fehler bei FF

Beitrag lesen

Ich hab eben bei 'margin' die folgende Zeile gelesen:
Initial: not defined for shorthand properties

Ich denke, das steht nur deshalb dort, damit es keine Definitionskonflikte mit den eigentlichen Attributen gibt. margin ist ja ein Kürzel, gewissermaßen nur eine Hülse für die vier Eigenschaften margin-top, -right, -bottom und -left. Als solche hat es keine eigene Vorgabe, sondern bezieht sie indirekt aus den zu Grunde liegenden Eigenschaften.

Die Vorgaben für alle vier margins ist 0, in der Weiterleitung kannst du davon ausgehen, dass die Vorgabe für margin 0 ist, obwohl sie nicht als solche definiert ist.

Also wenn ich dieser Kapitel lese (für margin):
http://www.w3.org/TR/REC-CSS1#horizontal-formatting

steht folgendes:

  1. By default, the 'width' of an element is 'auto'
  2. If none of the properties are 'auto', the value of 'margin-right' will be assigned 'auto'.

Da könnte deine Kette schon aufhören, denn in Punkt zwei steht doch bereits, dass width standardmäßig auto ist. Somit träffe Punkt 3, "if _none_ […] are 'auto'", nicht zu. Das funktioniert bei Blockelementen wie <p>, bei <table> ergäbe sich allerdings ein kleiner Erklärungsnotstand, nämlich jener des Abstands vom rechten Tabellenrand zum rechten Rand des Elternelements (zB <body>).

Der Haken liegt woanders: Die Breite einer Tabelle, d.h. width, ergibt sich üblicherweise aus ihrem Inhalt (siehe 17.5.2). width hat also eine intern gegebene Breite, margin- und padding-left und -right sind standardmäßig 0, in der Folge wechselt margin-right gemäß Punkt 3 nach auto.

Und zusätzlich gilt: "if both 'margin-left' and 'margin-right' are 'auto', they will be set to equal values. This will center the element inside its parent"

Ja, aber nur weil margin-right auto (geworden) ist, ist margin-left nicht automatisch auch auto. margin-left bleibt bei seiner Vorgabe 0.

Dieser Absatz für margin-left und -right trifft erst zu, wenn du selbst in deinen CSS-Regeln beide Eigenschaften auf auto setzt.