Ich mache eine Website und versuche, vertikal zu zentrieren:
position: absolute;
width:1200px;
height:600px;
top: 50%;
left: 50%;
margin-left: -600px;
und mein HTML ist ein einziges div
Schwalbenfloh
Ich mache eine Website und versuche, vertikal zu zentrieren:
position: absolute;
width:1200px;
height:600px;
top: 50%;
left: 50%;
margin-left: -600px;
und mein HTML ist ein einziges div
w3debugger
i{
-webkit-transform: translate(-50%,-50%);
transform: translate(-50%,-50%);
position: absolute;
top: 50%;
left: 50%;
}
<i>center</i>
i {
display: flex;
align-items: center; /* vertical centering if flex-direction: row */
justify-content: center; /* horizontal centering if flex-direction: row */
/* extra styles */
background-color: limeGreen;
min-height: 160px;
}
<i>center</i>
enter code here
das ist IMO die beste Lösung.
– Kevin
6. Januar 2017 um 19:40 Uhr
Danke! Das suche ich schon ewig!
– Michael
4. März 2017 um 4:15 Uhr
Dies wird nicht funktionieren, wenn Ihr Elternteil keine statische Größe hat, es sei denn, Sie haben eine height: 100%;
sowohl auf Ihrem HTML als auch auf Ihrem Körper. Sie können meine Antwort unten überprüfen, wenn Sie weitere Informationen benötigen. Außerdem brauchen Sie in manchen Situationen keine absolute Position. Das kann mit Witz funktionieren position: relative;
für diejenigen, die besorgt sind, sich für diese Lösung zu entscheiden, die eine Positionsbeziehung zu anderen Elementen aufrechterhalten müssen. Obwohl ein anderer Positionswert als position: static;
ist erforderlich für die top
und left
arbeiten. (oder auch bottom
, right
oderz-index
)
– Jomar Sevillajo
29. Oktober 2017 um 0:24 Uhr
@JomarSevillejo Das ist eine andere Technik. Ich habe nur die Antwort gegeben, indem ich seinen aktuellen Code mitteilte. Es kann geben flexbox
/table-cell
/line-height
/ oder irgendetwas anderes, aber warum versuchen wir, diesen Typen seinen Code umschreiben zu lassen? 🙂
– w3debugger
29. Oktober 2017 um 12:30 Uhr
@w3debugger Ich zwinge die Person nicht, ihre Antwort zu ändern. Bitte nicht als Beleidigung auffassen. Ich habe einfach alle davor gewarnt, dass diese Methode, die Sie gezeigt haben, eine statische Höhe erfordert, wenn Sie dies mit pposition verwenden: relative; auf Eltern. prntscr.com/h3pbpf Die meiste Zeit verwenden wir position:relative;
on parent, um absolute Elemente zu steuern. und FYI die Frage ist “WARUM TOP:50%; FUNKTIONIERT NICHT” also was ist falsch daran zu antworten “DU BRAUCHST EINE HÖHE IN DEINEN ELTERN”?
– Jomar Sevillajo
30. Oktober 2017 um 1:52 Uhr
Jomar Sevillajo
Um deine Frage zu beantworten warum top: 50%
funktioniert nicht, wenn Sie Eigentum verwenden top
Bei einem Element muss für das übergeordnete Element dieses Elements eine statische Höhe festgelegt werden. Das sollte drin sein px
oder eine andere Einheit als Prozent. Wenn Sie wirklich auch Prozent in Ihrem Elternteil verwenden müssen, können Sie zum nächsten Elternteil (das das Elternteil dieses Elternteils ist) übergehen und diesem eine feste statische Höhe geben.
Alles vertikal zentrieren. Ich bevorzuge diese Methode
Die Verwendung von CSS transform
da Sie nicht wissen müssen, welche Breite oder Höhe Ihr Element hat.
position: relative;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
Vergessen Sie nicht, Browser-/Anbieterpräfixe hinzuzufügen.
Sie können sich hier auf Herstellerpräfixe beziehen.
Wenn Sie die Größe Ihrer Eltern nicht kennen. Sie haben zwei Möglichkeiten:
$('.parent').height( $(this).height() );
.parent {
/* Unkown height */
}
.child {
/* Create columns */
width: 50%;
float: left;
}
.child-1 {
position: relative;
top: 50%;
text-align: center;
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Example Start -->
<div class="parent">
<div class="child child-1">
Lorem ipsum
</div>
<div class="child child-2">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
</div>
Tipp: Wenn Sie Responsive in Betracht ziehen, legen Sie die Höhe einfach erneut in JavaScript fest, wenn Sie die Größe des Browsers ändern. Sie können die neue natürliche Höhe erhalten, indem Sie die Höhe in JavaScript auf automatisch setzen und den Vorgang wiederholen.
display: table
stattdessen. CSS-Tricks hat hier ein sehr gutes Beispiel.“Wenn Sie die Eigenschaft oben auf einem Element verwenden, muss für das übergeordnete Element dieses Elements eine statische Höhe festgelegt werden” – Dies war die Antwort auf die Frage. Ich habe mein Problem in Safari gelöst.
– codecribblr
17. März 2017 um 17:05 Uhr
RE: “Für das übergeordnete Element dieses Elements muss eine statische Höhe festgelegt werden.” Hinweis 1: HTML und Body können beide als Eltern angesehen werden, wenn es kein Eltern-Div gibt. Hinweis 2: Ein % funktioniert auch. Zum Beispiel enthält amp.css die Zeile: html,body{height: auto !important;} Dies kann dazu führen, dass Anzeigen enthauptet werden, wenn Sie Ihre eigene remote.html/frame.max.amp.html rollen, es sei denn, Sie fügen diese CSS darin ein: html,body{height:100% !important;} Dadurch können die top:50% funktionieren.
– Brian Laie
21. März 2017 um 23:31 Uhr
kba
Die CSS-Eigenschaft top
funktioniert genau so left
. Es schiebt das div aus dieser Richtung. Wenn du schreibst top:50%
das div
wird um 50 % von oben nach unten gedrückt. Sie möchten, dass es vertikal zentriert ist, also müssen Sie dem entgegenwirken zieht es wieder hoch. Dies kann mit erfolgen margin-top: -300px
so wie du es gewohnt bist margin-left: -600px
zu ziehen Sie es nach links.
position: absolute;
width: 1200px;
height: 600px;
top: 50%;
margin-top: -300px;
left: 50%;
margin-left: -600px;
Dies funktioniert für Elemente mit fester Höhe. Verwenden Sie dies für variable Höhen.
– Lukas
30. August 2016 um 16:45 Uhr
top:50%;
funktioniert gut, aber “zentriert” das Element nicht, es platziert seine Oberkante 50% der Seitenhöhe von oben. Ähnlich wie du es hast margin-left:-600px;
sollten Sie auch hinzufügen margin-top:-300px;
Sie können verwenden
calc(%50 - (items_height/2));
zum Zentrum.
Ich hätte dieser Aussage mehr Kontext hinzugefügt, aber das war es, was ich vorschlagen wollte.
– Tgwizman
19. Juni 2019 um 20:10 Uhr
Beachten Sie, dass es 50 % statt %50 sein sollte. Und vergessen Sie nicht, nach dem zweiten Wert “px” hinzuzufügen. Das Format sollte etwa so sein calc(50% - 5px);
. Das wird zum Beispiel nicht funktionieren: calc(50% - (10/2)px);
– infografnet
24. Juli um 17:25 Uhr
Ich glaube, dies könnte die Antwort von Kristian etwas nachahmen, aber hier sind meine zwei Cent, die die Verwendung von Prozentsätzen beinhalten und auch eine in der anderen demonstrieren:
#parent {
position: absolute;
top: 50%;
left: 50%;
width: 120px;
height: 60px;
margin: -60px 0 0 -30px;
background: blue;
}
#center {
position: absolute;
width: 50%;
height: 50%;
top: 50%;
left: 50%;
margin: -12.5% 0 0 -25%;
background: green;
}
http://jsfiddle.net/userdude/MYD27/
BEARBEITEN
Wenn Sie es weiter betrachten, denke ich, dass Sie auf Probleme stoßen könnten, wenn Sie versuchen, dies mit einem Element zu tun, das kein Container innerhalb eines positionierten Elements ist. Zum Beispiel:
Ich glaube nicht, dass es so funktioniert, wie Sie es beabsichtigt haben. Wenn ich hinzufüge position: relative
(oder alternativ position: absolute
), es funktioniert, denke ich, wie Sie es beabsichtigt haben:
Ich hätte dieser Aussage mehr Kontext hinzugefügt, aber das war es, was ich vorschlagen wollte.
– Tgwizman
19. Juni 2019 um 20:10 Uhr
Beachten Sie, dass es 50 % statt %50 sein sollte. Und vergessen Sie nicht, nach dem zweiten Wert “px” hinzuzufügen. Das Format sollte etwa so sein calc(50% - 5px);
. Das wird zum Beispiel nicht funktionieren: calc(50% - (10/2)px);
– infografnet
24. Juli um 17:25 Uhr
Gemeinschaft
Ich möchte diese Gelegenheit nutzen, um für meine Antwort auf eine andere Frage hier auf SO offen Werbung zu machen 🙂
Davon abgesehen wird die CSS-Eigenschaft „top“ basierend auf der Höhe des Containerelements korrekt berechnet – wodurch das Zielelement effektiv unterhalb der Mittellinie gerendert wird. Dies bedeutet, dass das Element auf halbem Weg nach oben geschoben werden muss, wie in der verknüpften Frage erläutert.
Leider kann eine so scheinbar einfache Aufgabe nicht durch Anpassen des oberen Rands usw. ohne die Verwendung absoluter pixelbasierter Werte (+1 für Christian Antonsen‘s answer) – man könnte sich vorstellen, dass das Setzen von margin-top auf “-50%” genau das bedeuten würde, aber laut CSS-Spezifikation werden Margin-Werte sogar auf der vertikalen Achse als berechnet ein Prozentsatz immer relativ zur Breite des umgebenden Blocks
Tun
left: 50%;
und dannmargin-left: -600px;
macht nicht viel Sinn, da Sie nur das eine mit dem anderen aufheben.– Jared Farrish
19. März 2012 um 5:55 Uhr
swenflea: Ich habe meine Frage mit Informationen zu den übergeordneten Elementen bearbeitet
position
Wirkung.– Jared Farrish
19. März 2012 um 6:19 Uhr
Können Sie die Frage konkreter machen? Möchten Sie, dass Ihr DIV in der Mitte der Seite steht? Ich meine genau in der Mitte….?
– Vijay Sarin
19. März 2012 um 6:30 Uhr
@JaredFarrish Es hält das div genau in der Mitte, aber ich bevorzuge die Verwendung von width:calc(50% – 600px)
– Maarten Wolfsen
20. September 2016 um 8:38 Uhr
@Swenflea, hast du es in den letzten sieben Jahren geschafft, das zu beheben? Wenn ja, waren die bereitgestellten Antworten gut? Wenn nicht, könntest du bitte deine Lösung posten?
– gesund
28. November 2019 um 16:48 Uhr