Ich habe nach anderen Fragen gesucht, und obwohl dieses Problem einigen anderen ähnlich zu sein scheint, scheint nichts, was ich bisher gesehen habe, das Problem zu lösen, das ich habe.
Ich habe ein Div, das eine Reihe anderer Divs enthält, von denen jedes nach links schwebt. Diese Divs enthalten jeweils ein Foto und eine Bildunterschrift. Ich möchte nur, dass die Gruppe von Fotos innerhalb des enthaltenen div zentriert wird.
Wie Sie dem folgenden Code entnehmen können, habe ich versucht, beide overflow:hidden
und margin:x auto
die übergeordneten Divs zu verwenden, und ich habe clear:both
nach den Fotos auch ein (wie in einem anderen Thema vorgeschlagen) hinzugefügt . Nichts scheint einen Unterschied zu machen.
Danke dir. Ich freue mich über Vorschläge.
<div style="position: relative; margin: 0 auto; overflow: hidden; text-align: center;">
<h4>Section Header</h4>
<div style="margin: 2em auto;">
<div style="float: left; margin: auto 1.5em;">
<img src="photo1.jpg" /><br />
Photo Caption
</div>
<div style="float: left; margin: auto 1.5em;">
<img src="photo2.jpg" /><br />
Photo Caption
</div>
<div style="float: left; margin: auto 1.5em;">
<img src="photo3.jpg" /><br />
Photo Caption
</div>
<div style="clear: both; height: 0; overflow: hidden;"> </div>
</div>
</div>
Antworten:
Entfernen Sie zuerst das
float
Attribut auf dem innerendiv
s. Dann setzen Sietext-align: center
die Hauptaußenseite aufdiv
. Und für die innerendiv
s verwendendisplay: inline-block
. Könnte auch klug sein, ihnen auch explizite Breiten zu geben.quelle
Mit Flexbox können Sie schwebende Kinder einfach horizontal (und vertikal) in einem Div zentrieren.
Wenn Sie also ein einfaches Markup haben:
mit CSS:
(Dies ist das (erwartete - und unerwünschte) ERGEBNIS )
Fügen Sie nun dem Wrapper die folgenden Regeln hinzu:
und die schwebenden Kinder werden in der Mitte ausgerichtet ( DEMO )
Nur zum Spaß, um auch eine vertikale Ausrichtung zu erhalten, fügen Sie einfach Folgendes hinzu:
DEMO
quelle
Ich habe das oben genannte durch relative Positionierung und Schweben nach rechts erreicht.
HTML Quelltext:
CSS:
JSFiddle: http://jsfiddle.net/MJ9yp/
Dies funktioniert in IE8 und höher, aber nicht früher (Überraschung, Überraschung!)
Ich erinnere mich leider nicht an die Quelle dieser Methode, daher kann ich dem ursprünglichen Autor keine Anerkennung geben. Wenn jemand anderes weiß, bitte den Link posten!
quelle
Die folgende Lösung verwendet keine Inline-Blöcke. Es sind jedoch zwei Helfer-Divs erforderlich:
quelle
display: inline-block;
funktioniert in keinem IE-Browser. Hier ist was ich benutzt habe.quelle
Lösung:
quelle
In meinem Fall konnte ich die Antwort von @Sampson nicht für mich arbeiten lassen, bestenfalls bekam ich eine einzelne Spalte auf der Seite zentriert. Dabei habe ich jedoch gelernt, wie der Float tatsächlich funktioniert, und diese Lösung erstellt. Im Kern ist das Update sehr einfach, aber schwer zu finden, wie dieser Thread zeigt, der zum Zeitpunkt dieses Beitrags mehr als 146.000 Aufrufe hatte, ohne es zu erwähnen.
Alles, was benötigt wird, ist die Summe der Bildschirmbreite, die das gewünschte Layout einnehmen wird, dann das übergeordnete Element auf die gleiche Breite zu bringen und den Rand anzuwenden: auto. Das ist es!
Die Elemente im Layout bestimmen die Breite und Höhe des "äußeren" Div. Nehmen Sie die Breite oder Höhe jedes "myFloat" oder Elements + seine Ränder + seine Ränder und seine Polster und addieren Sie sie alle. Fügen Sie dann die anderen Elemente auf die gleiche Weise zusammen. Dadurch erhalten Sie die übergeordnete Breite. Sie können alle etwas unterschiedliche Größen haben und Sie können dies mit weniger oder mehr Elementen tun.
Bsp. (Jedes Element hat 2 Seiten, sodass Rand, Rand und Polsterung x2 multipliziert werden.)
Ein Element mit einer Breite von 10 Pixel, einem Rand von 2 Pixel, einem Rand von 6 Pixel und einem Abstand von 3 Pixel würde also folgendermaßen aussehen: 10 + 4 + 12 + 6 = 32
Addieren Sie dann alle Gesamtbreiten Ihres Elements.
In diesem Beispiel wäre die Breite für das "äußere" div 112.
quelle