Margen für erste/letzte Elemente entfernen

Avatar of Chris Coyier
Chris Coyier am

Es kann manchmal wünschenswert sein, den oberen oder linken Rand vom ersten Element in einem Container zu entfernen. Ebenso den rechten oder unteren Rand vom letzten Element in einem Container. Dies kann man durch manuelles Anwenden von Klassen auf das HTML erreichen.

.first { margin-top: 0 !important; margin-left: 0 !important; }
.last { margin-bottom: 0 !important; margin-right: 0 !important; }

Das „Nullen“ von „oben“/„unten“ ist nützlich bei einem vertikalen Stapel von Elementen, das „Nullen“ von „links“/„rechts“ ist nützlich für horizontale Reihen (im Allgemeinen). Aber… diese Methode hängt davon ab, dass Sie selbst Klassen auf das HTML anwenden. Pseudo-Selektoren können ein besserer, weniger aufdringlicher Weg sein.

* > :first-child { margin-top: 0 !important; margin-left: 0 !important; }
* > :last-child { margin-bottom: 0 !important; margin-right: 0 !important; }

Möglicherweise möchten Sie das * durch spezifischere Selektoren ersetzen, je nach Ihren Bedürfnissen.

„Jedes Dritte“, usw.

Nehmen wir an, Sie hätten einen schwebenden Block von 9 Elementen, 3 mal 3. Es ist sehr üblich, dass Sie möglicherweise den rechten Rand von den 3., 6. und 9. Elementen entfernen müssen. Der nth-child Pseudo-Selektor könnte hier helfen.

* > :nth-child(3n+3) { margin-right: 0; }

Die Gleichung dort, 3n+3, funktioniert so:

(3×0)+3 = 3
(3×1)+3 = 6
(3×2)+3 = 9
usw.

jQuery

jQuery verwendet CSS3-Selektoren, die :first-child, :last-child und :nth-child() beinhalten. Das bedeutet, dass diese in Browsern, die diese Selektoren nicht oder nicht vollständig unterstützen, in jQuery funktionieren werden, sodass Sie die CSS-Unterstützung durch JavaScript-Unterstützung ersetzen können. Zum Beispiel:

$("* > :nth-child(3n+3)").css("margin-right", 0);

Browser-Unterstützung

:first-child und :last-child funktionieren in der neuesten Version aller großen Browser, aber nicht in IE 6. :first-child wird in IE 7+ unterstützt. :nth-child funktioniert in Safari 3+, Firefox 3.5+ und Chrome 1+, aber immer noch nicht in IE8.

Siehe auch David Olivers Artikel.