Wie zu deaktivieren margin-collapsing?
Gibt es eine Möglichkeit zu deaktivieren margin-collapsing insgesamt? Die einzigen Lösungen die ich gefunden habe (unter dem Namen "uncollapsing") verbunden mit einem 1px Rand oder 1px padding. Ich finde das inakzeptabel: die überflüssigen pixel erschwert Berechnungen für keinen guten Grund. Ist es ein vernünftiger Weg, um dies zu deaktivieren margin-collapsing?
- Verwenden Sie Flex-oder Grid-layout, wo die Marge kollabiert nicht existiert: stackoverflow.com/a/46496701/3597276
- Geben Sie einfach die Elemente einen Wert für
margin-bottom
aber lassenmargin-top
als 0. - Ich machte ein Paket, um die Berechnung einfacher: npmjs.com/package/collapsed-margin
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Arten von margin-collapse:
Mit einem padding oder border verhindert Zusammenbruch nur im letzteren Fall. Auch jeder Wert von
overflow
unterscheidet sich von seinem Standardwert (visible
) angewendet, um die Eltern zu verhindern, Zusammenbruch. So, beideoverflow: auto
undoverflow: hidden
wird den gleichen Effekt haben. Vielleicht der einzige Unterschied bei der Verwendung vonhidden
ist die unbeabsichtigte Folge des Versteckens Inhalte, wenn die Muttergesellschaft hat eine Feste Höhe.Anderen Eigenschaften, die, einmal angewendet, um die Eltern, kann helfen, zu beheben dieses Verhalten sind:
float: left /right
position: absolute
display: inline-block
Können Sie testen, alle von Ihnen hier: http://jsfiddle.net/XB9wX/1/.
Sollte ich hinzufügen, dass, wie üblich, Internet Explorer ist die Ausnahme. Genauer gesagt, im IE 7 die Margen nicht zusammenbrechen, wenn einige Art von layout angegeben ist, für das übergeordnete element, wie
width
.Quellen: Sitepoint Artikel Collapsing Margins
overflow: auto
können Scrollleisten erscheinen im übergeordneten element, anstatt die überlauf-content-überlauf als prooverflow: visible
.flex
unterscheidet sich von seinem Standardwert wird auch deaktivieren Rand Zusammenbruchsdisplay: flow-root
möglicherweise die bevorzugte Methode einmal den browser-support nimmt ein bisschen.Können Sie auch die gute alte micro-clearfix für diese.
Finden Sie in den aktualisierten fiddle: http://jsfiddle.net/XB9wX/97/
:before
und:after
Elemente. Ich habe jetzt Hinzugefügt, diese Regel zu meinem stylesheet:div:before, div:after{content: ' '; display: table;}
. Fantastisch. Plötzlich Zeug, benimmt sich wie erwartet.<input>
.Einen netten trick zum deaktivieren Marge kollabiert, das hat keine optische Wirkung, soweit ich weiß, ist die Einstellung der Polsterung des Elternteils, der
0.05px
:Die Polsterung ist nicht mehr 0, so kollabieren nicht mehr auftreten, aber zur gleichen Zeit, der Abstand ist klein genug, dass die visuell Runde auf 0.
Wenn einige andere Polsterung gewünscht ist, dann gelten die Polsterung nur für die "Richtung", in die margin collapsing ist nicht erwünscht, zum Beispiel
padding-top: 0.05px;
.Beispiel:
CSS:
HTML:
Edit: verändert den Wert von
0.1
zu0.05
. Wie Chris Morgan erwähnt in einem Kommentar unten, und von dieser kleine test, es scheint, dass in der Tat Firefox nimmt die0.1px
Polsterung zu berücksichtigen. Obwohl0.05px
seemes, den trick zu tun.*{padding-top:0.1px}
. Sind wir sicher, dass es in allen Browsern funktioniert, obwohl?overflow:hidden
verhindert Zusammenbruch Margen, aber es ist nicht frei von Nebenwirkungen - nämlich es... versteckt überlauf.Abgesehen von diesem und dem, was Sie erwähnt haben, Sie müssen nur lernen, mit Ihr Leben und lernen für diesen Tag, wenn Sie eigentlich nützlich sind (kommt alle 3-5 Jahre).
overflow: auto
ist gut zu verwenden, um zu verhindern, dass versteckte überlauf und immer noch verhindern, dass collapsing margins.Jedem webkit-basierten browser unterstützen sollte, die die Eigenschaften
-webkit-margin-collapse
. Es gibt auch untereigenschaften nur legen Sie es am oberen oder unteren Rand. Geben Sie die Werte Zusammenbruch (Standard), verwerfen (sets margin auf 0 setzen, wenn es einen benachbarten Rand) und einem separaten (verhindert Marge Zusammenbruch).Habe ich getestet, dies funktioniert auf die 2014-Versionen von Chrome und Safari. Leider, ich glaube nicht, dass diese unterstützt werden würde im IE, da es nicht basierend auf webkit.
Lesen Apple ' s Safari CSS Reference für eine vollständige Erklärung.
Wenn Sie das Kontrollkästchen Mozilla webkit-CSS-extensions-Seite, dann Listen Sie diese Eigenschaften als proprietäre und empfehlen, Sie nicht zu verwenden. Dies ist, weil Sie wahrscheinlich nicht zu gehen in die standard-CSS jederzeit schnell und nur webkit-basierte Browser unterstützen.
Ich weiß, dass dies ein sehr Alter Beitrag aber wollte nur sagen, dass die Verwendung von flexbox auf einer übergeordneten element deaktivieren margin collapsing für seine Kind-Elemente.
Tatsächlich, es ist eine, die funktioniert einwandfrei:
display: flex;
flex-direction: column;
CSS:
HTML:
Ich hatte ähnliches problem mit margin zusammenbrechen, weil der Elternteil mit
position
gesetzt, um die relative. Hier sind die Liste der Befehle, die Sie verwenden können, um deaktivieren Sie die Marge kollabiert.HIER BEFINDET SICH EIN SPIELPLATZ ZUM TESTEN
Versuchen Sie, nur weisen Sie jede
parent-fix*
Klassediv.container
element, oder eine andere Klassechildren-fix*
zudiv.margin
. Wählen Sie diejenige, die Ihren Bedürfnissen am besten passt.Wenn
div.absolute
mit rotem hintergrund platziert wird an der Spitze der Seite.div.absolute
Position bei der gleichen Y-Koordinate wiediv.margin
CSS:
HTML:
Hier ist jsFiddle mit Beispiel können Sie Bearbeiten
Für Ihre Informationen, die Sie nutzen könnten
raster, aber mit Nebenwirkungen 🙂