918 Stimmen

Wie zentriert man ein "Position: absolut"-Element?

Ich habe ein Problem beim Zentrieren eines Elements, das das Attribut position eingestellt auf absolute . Weiß jemand, warum die Bilder nicht zentriert sind?

body {
  text-align: center;
}

#slideshowWrapper {
  margin-top: 50px;
  text-align: center;
}

ul#slideshow {
  list-style: none;
  position: relative;
  margin: auto;
}

ul#slideshow li {
  position: absolute;
}

ul#slideshow li img {
  border: 1px solid #ccc;
  padding: 4px;
  height: 450px;
}

<body>
  <div id="slideshowWrapper">
    <ul id="slideshow">
      <li><img src="https://source.unsplash.com/random/300*300?technology" alt="Dummy 1" /></li>
      <li><img src="https://source.unsplash.com/random/301*301?technology" alt="Dummy 2" /></li>
    </ul>
  </div>
</body>

1629voto

baaroz Punkte 18395

Wenn Sie eine Breite festgelegt haben, können Sie diese verwenden:

position: absolute;
margin-left: auto;
margin-right: auto;
left: 0;
right: 0;
text-align: center;

863voto

Hashem Qolami Punkte 95440

Ohne Kenntnis der width / height der positionierten 1 ist es dennoch möglich, es wie folgt auszurichten:

BEISPIEL HIER

.child {
    position: absolute;
    top: 50%;  /* position the top  edge of the element at the middle of the parent */
    left: 50%; /* position the left edge of the element at the middle of the parent */

    transform: translate(-50%, -50%); /* This is a shorthand of
                                         translateX(-50%) and translateY(-50%) */
}

Es ist erwähnenswert, dass CSS-Transformation wird in IE9 und höher unterstützt . (Die Präfixe der Anbieter wurden der Kürze halber weggelassen)


Erläuterung

Hinzufügen von top / left de 50% verschiebt die obere/linke Randkante des Elements in die Mitte des übergeordneten Elements, und translate() Funktion mit der (negativ) Wert von -50% verschiebt das Element um die Hälfte seiner Größe. Daher wird das Element in der Mitte positioniert.

Dies liegt daran, dass ein prozentualer Wert auf top / left Eigenschaften ist relativ zur Höhe/Breite des übergeordneten Elements (das einen enthaltenden Block erstellt).

Während ein Prozentwert auf translate() umwandeln Funktion ist relativ zur Breite/Höhe des Elements selbst (Eigentlich bezieht es sich auf die Größe der Begrenzungsrechteck ) .

Für eine unidirektionale Ausrichtung verwenden Sie translateX(-50%) ou translateY(-50%) stattdessen.


1. Ein Element mit einer position andere als static . D.h. relative , absolute , fixed Werte.

196voto

bookcasey Punkte 38113

Etwas zentrieren absolute Die Positionierung ist in CSS ziemlich verworren.

ul#slideshow li {
    position: absolute;
    left:50%;
    margin-left:-20px;

}

Ändern Sie margin-left auf die (negative) Hälfte der Breite des Elements, das Sie zu zentrieren versuchen.

97voto

Sebin Simon Punkte 1507

Div vertikal und horizontal zentriert ausrichten

top: 0;
bottom: 0;
margin: auto;
position: absolute;
left: 0;
right: 0;

Hinweis: Elemente sollten Breite und Höhe haben, um eingestellt werden zu können.

73voto

Wenn Sie ein absolutes Element zentrieren möchten

#div {
    position:absolute;
    top:0;
    bottom:0;
    left:0;
    right:0;
    width:300px; /* Assign a value */
    height:500px; /* Assign a value */
    margin:auto;
}

Wenn ein Container von links nach rechts, aber nicht von oben nach unten zentriert werden soll

#div {
    position:absolute;
    left:0;
    right:0;
    width:300px; /* Assign a value */
    height:500px; /* Assign a value */
    margin:auto;
}

Wenn Sie möchten, dass ein Container von oben nach unten zentriert wird, unabhängig davon, ob er von links nach rechts steht

#div {
    position:absolute;
    top:0;
    bottom:0;
    width:300px; /* Assign a value */
    height:500px; /* Assign a value */
    margin:auto;
}

Update vom 15. Dezember 2015

Nun, ich habe vor einigen Monaten einen weiteren neuen Trick gelernt. Angenommen, Sie haben ein relatives übergeordnetes Element.

Hier kommt Ihr absolutes Element.

.absolute-element { 
    position:absolute; 
    top:50%; 
    left:50%; 
    transform:translate(-50%, -50%); 
    width:50%; /* You can specify ANY width values here */ 
}

Ich denke, dass dies eine bessere Lösung ist als meine alte Lösung. Da man nicht Breite UND Höhe angeben muss. Diese passt den Inhalt des Elements selbst an.

Stand: 23. April 2021

Es ist keine Antwort auf die Frage des Auftraggebers nach der absoluten Position, aber wenn Sie eine alternative Lösung suchen, gibt es die folgende flexbox . Hier ist ein Beispiel.

#parent {
    display:flex;
    align-items:center;
    justify-content:center;
}

Der Container wird umgewandelt in flex und zum Ausrichten untergeordneter Elemente auf die Mitte der Horizontalen wird mit justify-content:center und vertikal ist zu verwenden align-items:center . Es unterstützt auch moderne Browser, so dass es sicher zu verwenden ist.

Allerdings sollten Sie zuerst lesen, wie Flexbox funktioniert.

https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox

Unterstützte Flexbox-Browser

https://caniuse.com/flexbox

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X