Wie center "position: absolute" element
Ich habe ein problem mit der Zentrierung eines Elements, das das Attribut position
eingestellt absolute
.
Weiß jemand, warum die Bilder nicht zentriert sind?
CSS:
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;
}
HTML:
<body>
<div id="slideshowWrapper">
<ul id="slideshow">
<li><img src="img/dummy1.JPG" alt="Dummy 1" /></li>
<li><img src="img/piano_unlicened.JPG" alt="Dummy 2" /></li>
</ul>
</div>
</body>
- Sie müssen ul#slideshow eine Feste Breite...
Du musst angemeldet sein, um einen Kommentar abzugeben.
width
width
. Downvotetext-align: center;
!margin: 0 auto;
15 chars im Gegensatz zu so etwas wie 65Ohne zu wissen, die
width
/height
von der positioniert1 - element, es ist immer noch möglich, richten Sie es wie folgt:BEISPIEL HIER
Es ist erwähnenswert, dass CSS Transform unterstützt wird in IE9 und höher. (Vendor-Präfixe der Kürze halber weggelassen)
Erklärung
Hinzufügen
top
/dieleft
von50%
bewegt sich die oberen/linken Rand Kante des Elements in die Mitte des übergeordneten Elements, undtranslate()
Funktion mit der (negative) Wert von-50%
verschiebt das element um die Hälfte seiner Größe. Daher wird das element positioniert in der Mitte.Dies ist, weil Sie einen Prozentwert auf
top
/dieleft
Eigenschaften relativ zu der Breite/Höhe des übergeordneten Elements (die eine mit block).Während die einen prozentualen Wert auf
translate()
verwandeln Funktion wird relativ zur Breite/Höhe des Elements selbst (Eigentlich ist es bezieht sich auf die Größe der bounding-box).Für die unidirektionale Ausrichtung, gehen mit
translateX(-50%)
odertranslateY(-50%)
statt.1 ist. Ein element mit einem
position
andere alsstatic
. I. e.relative
,absolute
,fixed
Werte.max-width
von100%
von der enthaltenden block, D. H. der Anzeigebereich (eigentlich der erste mit block).position: absolute; left: 50%; transform: translateX(-50%);
vertikale Zentrierung:position: absolute; top: 50%; transform: translateY(-50%);
.translate
Eigenschaft, übersetzen Sie das element, indem Sie die Größe des selbst, egal, die Größe des übergeordneten Elements ein.::after
wenn Sie wollen, um die touch-Oberfläche von element! Beste Antwort, weil es Orte::after
richtig in der Mitte jedes element unabhängig von seiner Größe.Zentrierung etwas
absolute
ly positioniert ist ziemlich verschachtelt, CSS.Ändern
margin-left
auf (negative) Hälfte der Breite des Elements, die Sie versuchen zu zentrieren.Div vertikal und horizontal ausgerichtet-center
Hinweis : die Elemente sollen die Breite und Höhe eingestellt werden
height
gesetzt, für diese zu arbeiten.Einem einfachen CSS-trick, nur hinzufügen:
Dies funktioniert auf beiden Bildern und text.
Wenn Sie wollen-center ein absolutes element
Wenn Sie möchten einen container zentriert werden, von Links nach rechts, aber nicht mit der Oberseite nach unten
Wenn Sie möchten einen container zentriert werden, von oben nach unten, unabhängig von Links nach rechts
Update Dezember 15, 2015
Gut ich lernte, diese anderen neuen trick vor einigen Monaten. Angenommen, Sie haben einen relativen Elternelement.
Hier geht Ihr absolutes element.
Mit dabei, ich denke, es ist eine bessere Antwort als meine alte Lösung. Da Sie nicht haben, um geben Sie die Breite UND Höhe. Dieses eine, es passt der Inhalt von dem element selbst.
Dieser arbeitete für mich:
center ein ein position:absolute Attribut, das Sie benötigen, um left:50% und margin-left: -50% von der Breite des div.
für vertikale Zentrierung absolut Sie müssen das gleiche zu tun, was bud nicht mit der linken, nur mit der Spitze.
( HINWEIS: html und body müssen min-height 100%; )
kombiniert werden kann für beide
Schwerpunkt "position: absolute" element.
siehe demo auf: http://jsfiddle.net/MohammadDayeh/HrZLC/
text-align: center
; arbeitet mit einemposition: absolute
element beim hinzufügenleft: 0; right: 0;
Je einfacher die besten:
Dann müssen Sie legen Sie Ihre img-tag in einen tag, der Sport-position:relative Eigenschaft wie folgt:
Wenn Sie nicht wissen, die Breite des Elements können Sie diesen code verwenden:
Demo auf fiddle: http://jsfiddle.net/wrh7a21r/
Quelle: https://stackoverflow.com/a/1777282/1136132
wahrscheinlich die kürzeste
Ich bin mir nicht sicher, was du erreichen willst, aber in diesem Fall nur das hinzufügen
width: 100%;
zu Ihremul#slideshow li
wird den trick tun.Erklärung
Den
img
tags sind inline-block Elemente. Dies bedeutet, dass Sie fließen wie inline-text, aber auch eine Breite und Höhe wie der block-Elemente. In der css gibt es zweitext-align: center;
Regeln angewendet, um die<body>
und die#slideshowWrapper
(was überflüssig ist, btw) das macht alle inline und inline-block Kind-Elemente zentriert werden in den nächsten block-Elemente, in deinem code sind dieseli
- tags. Alle block-Elemente habenwidth: 100%
wenn Sie die static flow (position: static;
), das ist Standard. Das problem ist, dass, wenn Sie sagenli
tagsposition: absolute;
haben, nehmen Sie Sie aus der normalen statischen Fluss, und dies bewirkt, dass Sie schrumpfen Ihrer Größe passen Sie einfach Ihren inneren Gehalt, in anderen Worten, die Art von "verlieren" Ihrewidth: 100%
Eigenschaft.Verwenden
left: calc(50% - Wpx/2);
wo W ist die Breite des Elements funktioniert für mich.Ihre Bilder nicht zentriert sind, weil Sie Ihre Liste der Elemente, die nicht zentriert sind; nur Ihr text wird zentriert. Sie können erreichen, die Positionierung, die Sie möchten, indem Sie entweder die Zentrierung der gesamten Liste oder Zentrierung der Bilder in der Liste.
Einer überarbeiteten version der code kann gefunden werden an der Unterseite. In meiner revision habe ich Mitte der Liste und die Bilder innerhalb es.
Die Wahrheit ist, dass Sie nicht center ein element, das eine position, die absolute.
Aber dieses Verhalten kann nachgeahmt werden!
Hinweis: in Dieser Anleitung wird die Arbeit mit DOM-block-element, nicht nur img.
Umgeben, Ihr Bild mit einem div oder anderen tag (in Ihrem Fall li).
Hinweis: Die Bezeichnungen dieser Elemente sind nicht besonders.
Ändern Sie Ihre css-oder scss zu geben, die div mit absoluter Positionierung und Ihrem image zentriert.
Und dort haben Sie es! Ihre img-sollte zentriert sein!
Code:
Probieren Sie es aus:
CSS:
HTML:
Ich hoffe, das war hilfreich. Viel Glück!
Einem absoluten Objekt innerhalb eines relativen Objekt relativ zu seinem Elternteil, das problem hier ist, dass brauchen Sie eine Feste Breite für den container
#slideshowWrapper
, und der rest der Lösung ist wie die andere Benutzer sagthttp://jsfiddle.net/ejRTU/10/
Hier ist die einfache und beste Lösung für center-element mit "position: absolute"
CSS:
HTML:
Position absolute, nimmt es aus dem Fluss und legt es auf 0x0 zu den Eltern ( Letzte block-element mit position absolute oder relative position ).
Ich bin mir nicht sicher, was genau Sie sind, was Sie versuchen zu erreichen, könnte Es am besten sein, um die li zu einem
position:relative
und zentrieren Sie Sie. Angesichts Ihrer aktuellen CSS -Check-out http://jsfiddle.net/rtgibbons/ejRTU/ mit ihm zu spielen
Ich kann mich nicht erinnern, wo ich sah die Zentrierung Methode oben aufgeführten, mit negativen top, right, bottom, left Werte.
Für mich tehnique ist die beste, in den meisten Situationen.
Wenn ich die Kombination von oben, das Bild verhält sich wie ein background-image mit folgenden Einstellungen:
Mehr details über das erste Beispiel kann hier gefunden werden:
Behalten Sie das Seitenverhältnis von einem div mit der CSS
Können Sie versuchen, auf diese Weise :
CSS:
HTML:
Was passiert zu sein scheint ist, gibt es zwei Lösungen; zentriert mit Margen und zentriert mit position. Funktionieren beide gut, aber wenn Sie wollen, um die absolute position eines Elements relativ zu diesem element zentriert, Sie benötigen, um die absolute position Methode, da die absolute position des zweiten Elements standardmäßig die ersten Eltern, die positioniert ist. Etwa so:
Bis ich gelesen hatte diesen posten, mit dem margin:0 auto Technik, bauen ein Menü auf der linken Seite meine Inhalte, die ich hatte zu bauen, die eine gleiche Breite Spalte auf der rechten Seite auszugleichen. Nicht schön. Danke!
Verwenden
margin-left: x%;
wobei x der Hälfte der Breite des Elements.CSS:
HTML: