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>

8voto

joseantgv Punkte 1810

Wenn Sie die Breite des Elements nicht kennen, können Sie diesen Code verwenden:

<body>
<div style="position: absolute; left: 50%;">
    <div style="position: relative; left: -50%; border: dotted red 1px;">
        I am some centered shrink-to-fit content! <br />
        tum te tum
    </div>
</div>

Demo an der Fiedel: http://jsfiddle.net/wrh7a21r/

Fuente: https://stackoverflow.com/a/1777282/1136132

7voto

Julix Punkte 559

Verwendung von left: calc(50% - Wpx/2); wobei W die Breite des Elements ist, funktioniert bei mir.

6voto

enter image description here

Ich bin mir nicht sicher, was Sie erreichen wollen, aber in diesem Fall genügt es, wenn Sie width: 100%; zu Ihrem ul#slideshow li reicht aus.

Erläuterung

El img Tags sind Inline-Block-Elemente. Das heißt, sie fließen inline wie Text, haben aber auch eine Breite und Höhe wie Blockelemente. In Ihrem css gibt es zwei text-align: center; Regeln, die auf die <body> und zum #slideshowWrapper (was im Übrigen überflüssig ist) werden alle Inline- und Inline-Block-Kinderelemente in den ihnen am nächsten liegenden Blockelementen zentriert, in Ihrem Code sind das li Tags. Alle Blockelemente haben width: 100% wenn sie der statische Fluss sind ( position: static; ), was der Standard ist. Das Problem ist, dass, wenn Sie sagen li Tags zu sein position: absolute; Wenn man sie aus dem normalen statischen Fluss herausnimmt, schrumpft ihre Größe, damit sie gerade noch zu ihrem inneren Inhalt passen, d. h. sie "verlieren" gewissermaßen ihre width: 100% Eigentum.

6voto

D3RPZ1LLA Punkte 281

Ihre Bilder sind nicht zentriert, weil Ihre Listenelemente nicht zentriert sind; nur ihr Text ist zentriert. Sie können die gewünschte Positionierung erreichen, indem Sie entweder die gesamte Liste zentrieren oder die Bilder innerhalb der Liste zentrieren.

Eine überarbeitete Version Ihres Codes finden Sie am Ende der Seite. In meiner Überarbeitung habe ich sowohl die Liste als auch die Bilder in der Liste zentriert.

Die Wahrheit ist, dass Sie kann nicht ein Element zentrieren, dessen Position auf absolut gesetzt ist.

Aber dieses Verhalten kann nachgeahmt werden!

Hinweis: Diese Anweisungen funktionieren mit jedem DOM-Blockelement, nicht nur mit img.

  1. Umgeben Sie Ihr Bild mit einem div oder einem anderen Tag (in Ihrem Fall ein li).

    <div class="absolute-div">
      <img alt="my-image" src="#">
    </div>

    Anmerkung: Die Bezeichnungen dieser Elemente sind nicht speziell.

  2. Ändern Sie Ihr css oder scss, um das div absolut zu positionieren und Ihr Bild zu zentrieren.

    .absolute-div {
      position: absolute;
    
      width: 100%; 
      // Range to be centered over. 
    
      // If this element's parent is the body then 100% = the window's width
    
      // Note: You can apply additional top/bottom and left/right attributes
      // i.e. - top: 200px; left: 200px;
    
      // Test for desired positioning.
    }
    
    .absolute-div img {
      width: 500px;
      // Note: Setting a width is crucial for margin: auto to work.
    
      margin: 0 auto;
    }

Und da haben Sie es! Ihr Bild sollte zentriert sein!

Ihr Code:

Probieren Sie es aus:

body
{
  text-align : center;
}

#slideshow
{
  list-style : none;
  width      : 800px;
  // alter to taste

  margin     : 50px auto 0;
}

#slideshow li
{
  position : absolute;
}

#slideshow img
{
  border  : 1px solid #CCC;
  padding : 4px;
  height  : 500px;
  width   : auto;
  // This sets the width relative to your set height.

  // Setting a width is required for the margin auto attribute below. 

  margin  : 0 auto;
}

<ul id="slideshow">
    <li><img src="http://lorempixel.com/500/500/nature/" alt="Dummy 1" /></li>
    <li><img src="http://lorempixel.com/500/500/nature/" alt="Dummy 2" /></li>
</ul>

Ich hoffe, das war hilfreich. Viel Glück!

4voto

SantoshK Punkte 1621

Hier ist die einfachste und beste Lösung für das Zentrieren von Elementen mit "position: absolute"

 body,html{
  min-height:100%;
 }

 div.center{
 width:200px;
 left:50%;
 margin-left:-100px;/*this is 50% value for width of the element*/
 position:absolute;
 background:#ddd;
 border:1px solid #999;
 height:100px;
 text-align:center
 }

<style>

</style>

<body>
 <div class='center'>
  should be centered verticaly
 </div>
</body>

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