Mit margin:auto, um vertikal ausrichten eine div
So, ich weiß, wir können Mitte ein div horizontal, wenn wir margin:0 auto;
. Sollte margin:auto auto;
Arbeit, wie ich denke, sollte es funktionieren? Zentrierung vertikal als auch?
Warum nicht vertical-align:middle;
funktionieren?
CSS:
.black {
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
background:rgba(0,0,0,.5);
}
.message {
background:yellow;
width:200px;
margin:auto auto;
padding:10px;
}
HTML:
<div class="black">
<div class="message">
This is a popup message.
</div>
</div>
- Sehr empfehlen zu Lesen und Umsetzung von @zpr Antwort unter Bezug auf Flexbox. Es wird Recht gut unterstützt, wie heute und in der css wird viel, viel sauberer.
- if((new Date()).getFullYear() > 2017) useFlexBox = true;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht verwenden:
vertical-align:middle
weil es ist nicht anwendbar auf block-level-Elementemargin-top:auto
undmargin-bottom:auto
weil Ihre verwendeten Werte berechnen zeromargin-top:-50%
weil prozentuale Marge-Werte sind berechnet relativ zu der Breite des umschließenden BlocksIn der Tat, die Art der Belegfluss und element-Berechnung der Höhe algorithmen machen es unmöglich, zu verwenden Margen für die Zentrierung eines Elements vertikal innerhalb seiner Eltern. Wenn ein vertikaler Rand Wert geändert wird, löst Sie ein übergeordnetes element Höhe neu berechnet (re-flow), die wiederum Auslöser einer re-center des ursprünglichen Elements... so dass es eine unendliche Schleife.
Die Sie verwenden können:
Ein paar workarounds wie dieser die Arbeit für Ihr Szenario; die drei Elemente müssen geschachtelt werden, etwa so:
CSS:
HTML:
JSFiddle funktioniert nach Browsershot.
#
ist ein hack, um die Regel mit dem Präfix es nur interpretiert von IE7 und unter. Sie können es vorziehen, statt diese Regeln in eine IE-spezifische stylesheet durch die Verwendung von conditional comments usw..content
müssendisplay: table;
center .. vielen Dank.. es funktioniertposition: absolute; top: 50%; transform: translateY(-50%);
ist ebenfalls möglich und sehr beliebt... (im Gegensatz zutop:50%;margin: - $halfHeight
Sie nicht haben, um zu wissen, die Höhe im Voraus...)Da diese Frage wurde in 2012 und wir haben einen langen Weg mit browser-Unterstützung für flexboxes, ich fühlte mich, als ob diese Antwort war obligatorisch.
Wenn das display Ihres übergeordneten Containers ist
flex
, dann ja,margin: auto auto
(auch bekannt alsmargin: auto
) arbeiten zu zentrieren es horizontal und vertikal, unabhängig davon, ob es ist eininline
oderblock
element.CSS:
HTML:
Beachten Sie, dass die Breite/Höhe nicht angegeben zu werden absolut, wie in diesem Beispiel jfiddle die Nutzungen-Dimensionierung relativ zum viewport.
Obwohl die browser-Unterstützung für flexboxes ist bei einem all-time-high zum Zeitpunkt der Buchung, vielen Browsern noch nicht unterstützt oder erfordern vendor-Präfixe. Finden Sie http://caniuse.com/flexbox aktualisierte browser-support-Informationen.
Update
Da diese Antwort erhielt ein wenig Aufmerksamkeit, ich möchte auch darauf hinweisen, dass Sie nicht angeben müssen
margin
überhaupt wenn Siedisplay: flex
und möchte center alle Elemente im container:CSS:
HTML:
Ist hier die beste Lösung, die ich gefunden habe: http://jsfiddle.net/yWnZ2/446/ Funktioniert in Chrome, Firefox, Safari, IE8-11 & Edge.
Wenn Sie haben ein erklärtes
height
(height: 1em
,height: 50%
usw.) oder es ist ein element, wo der browser kennt die Höhe (img
,svg
odercanvas
zum Beispiel), dann benötigen Sie für die vertikale Zentrierung ist diese:Werden Sie in der Regel angeben möchten eine
width
odermax-width
damit der Inhalt nicht zu dehnen die gesamte Länge des Bildschirms/container.Wenn Sie dieses für ein modales, dass Sie wollen, immer zentriert in den Arbeitsbereich überlappende andere Inhalte, verwenden Sie
position: fixed;
für die beiden Elemente stattposition: absolute
. http://jsfiddle.net/yWnZ2/445/Hier ist eine vollständige writeup: http://codepen.io/shshaw/pen/gEiDt
position: relative
an die Eltern, und das element wird zentriert innerhalb des übergeordneten Elements. Ich habe eine viel größere writeup auf Smashing Magazin über die Technik wenn Sie möchten, um mehr zu Lesen: coding.smashingmagazine.com/2013/08/09/...parent
- es bekam. Vielen Dank!position: absolute
Elemente sind immer aufgestellt, basierend auf die nächstenposition: relative
Eltern.display: table
für variable Höhe Inhalt. Sonst, diese Methode sollte funktionieren wie erwartet. Lesen Sie die Dokument für mehr details insgesamt. Sie sollten auch in der Lage sein, um test volle Ansicht im IE8/9, um zu sehen, wenn es Probleme gibt.height: 50%
,height: 100px
,height: 0; padding-top: 50%
) oder ist die Höhe automatisch bekannt durch den browser (img
,svg
undcanvas
Elemente, etc.). Diedisplay: table
hack funktioniert nicht gut, cross-browser, aber die Bereitstellung einer Höhe sollte funktionieren ohne Probleme. Schauen Sie sich das gesamte Dokument für weitere Informationen: codepen.io/shshaw/pen/gEiDtposition: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto;
und einheight
. Ich habe aktualisiert die FIddle ein wenig einfacher: jsfiddle.net/yWnZ2/445Weder von den Lösungen, die auf dieser Seite arbeiten (für mich).
Meine Lösung
Html -
CSS
Ich weiß, die Frage ist von 2012, aber ich fand die einfachste Art und Weise immer, und ich wollte zu teilen.
HTML:
und CSS:
Wenn Sie wissen, die Höhe des div-Sie zentrieren möchten, können Sie die position, an der es absolut innerhalb der übergeordneten und legen Sie dann die
top
Wert50%
. Setzen, wird die Spitze des untergeordneten div-50% des Weges nach unten Ihren Eltern, also zu niedrig. Ziehen Sie es zurück durch die Einstellung seinermargin-top
auf die Hälfte seiner Höhe. So, jetzt haben Sie die vertikale Mitte des div Kind sitzt am vertikalen Mittelpunkt des Eltern - vertikal zentriert!Beispiel:
CSS:
HTML:
http://jsfiddle.net/yWnZ2/2/
margin-top
kann nicht eingestellt werden in %, bezogen auf das element Höhe, so werden Sie am Ende mit einer Maße abhängig behebenmargin-top
.img
, die eine Höhe festlegenDiese beiden Lösung benötigen nur zwei verschachtelte Elemente.
Ersten - Relative und absolute Positionierung , wenn der Inhalt statisch ist, (manuelle center).
https://jsfiddle.net/GlupiJas/5mv3j171/
oder für fluid-design - für genaue content center verwenden Sie folgende Beispiel, statt:
https://jsfiddle.net/GlupiJas/w3jnjuv0/
Müssen Sie 'min-height' gesetzt den Fall, der Inhalt wird über 50% der Fensterhöhe. Sie können auch manipulieren diese Höhe mit media query für mobile Geräte und tablet-Geräte . Aber nur, wenn Du mit responsive design.
Ich denke, Man könnte noch weiter gehen und verwenden Sie einfache JavaScript - /JQuery-Skript zu manipulieren, die min-Höhe oder Feste Höhe, wenn es notwendig ist, für einige Grund.
Zweiten - , wenn der Inhalt flüssig ist u können auch verwenden und die Tabelle-Zelle der css-Eigenschaften mit "vertikale Ausrichtung" und text-align zentriert:
und
Funktioniert und perfekt skaliert, oft als responsive Webdesign Lösung mit grid-layouts und media-query zu manipulieren, dass die Breite des Objekts.
https://jsfiddle.net/GlupiJas/4daf2v36/
Ich lieber Tisch-Lösung für exakte Inhalt zentrieren, aber in einigen Fällen relativ absoluten Positionierung zu tun besseren job, vor allem, wenn wir nicht wollen, zu halten genaue Anteil der content-Ausrichtung.
CSS:
HTML:
Gibt es nicht eine einfach Methode zum zentrieren div vertikal was würde den trick in jeder situation.
Jedoch, es gibt viele Möglichkeiten, es zu tun, je nach situation.
Hier sind einige von Ihnen:
Können Sie auch bei google nach "css vertikale Zentrierung"
variable Höhe ,Rand oben und unten automatische
CSS:
HTML:
variable Höhe ,Rand oben und unten automatische
Verwendung Von Flexbox:
HTML:
CSS:
Ergebnis anzeigen