Ich musste kürzlich eine Platzhalterseite für eine Website erstellen. Ich wollte, dass das Logo-Bild genau in der Mitte des Bildschirms zentriert ist, das heißt, sowohl vertikal als auch horizontal zentriert. Schnell dachte ich, ich gebe dem Bildelement einfach eine Klasse namens "centered" und style dann diese Klasse
.centered {
position: fixed; /* or absolute */
top: 50%;
left: 50%;
}
Aber wie Sie sicher denken, funktioniert das nicht ganz. Was das bewirkt, ist, dass die obere linke Ecke des Bildes genau in der Mitte der Seite platziert wird, nicht die *Mitte* des Bildes in der Mitte der Seite.

Um das Bild genau zu zentrieren, ist es eine einfache Sache, einen negativen oberen Rand von der halben Höhe des Bildes und einen negativen linken Rand von der halben Breite des Bildes anzuwenden. Für dieses Beispiel, so
.centered {
position: fixed;
top: 50%;
left: 50%;
margin-top: -50px;
margin-left: -100px;
}
Das wird den Trick tun

Das funktioniert wunderbar, wenn Sie die Größe des zu zentrierenden Objekts kennen. Wenn Sie sie nicht kennen oder denken, dass sie sich ändern könnte und zukunftssicher sein wollen, versuchen Sie Folgendes
.centered {
position: fixed;
top: 50%;
left: 50%;
/* bring your own prefixes */
transform: translate(-50%, -50%);
}
Der `translate`-Wert für `transform` basiert auf der Größe des Elements, daher wird dies gut zentriert.
Ja, aber das funktioniert nicht in IE6, wie Sie wahrscheinlich wissen. Daher sollten Sie `* html .centered { position:absolute }` verwenden, da IE6 einen Fehler hat, der `position:absolute` im Quirks-Modus als `position:fixed` unterstützt. Sie können auch ausgefeiltere Tricks wie `ie-fixed.htc` verwenden.
Und was, wenn mein "zu zentrierendes Objekt" in Prozent angegeben ist? Oder ich nicht weiß, wie hoch es sein wird (flüssige Höhe)?
Toller Beitrag, ich habe nach diesem Trick gesucht. Danke.
Ich auch... Danke Chris!
@Mariusz: Ja, das ist genau das, was benötigt wird, um sicherzustellen, dass es in IE 6 funktioniert, danke für den Hinweis.
@Cosss: Das wird dann nicht annähernd so einfach sein. Diese Technik diente nur zum Zentrieren eines einfachen Logo-Bildes. Sie könnten ihm immer einen oberen Rand geben und es horizontal zentrieren mit
margin: 20px auto;Oder Sie könnten eine Tabelle verwenden, die vertikale Zentrierung unterstützt. Oder es gibt wahrscheinlich auch eine JavaScript-Lösung.
@Jochen: Großartig, ich bin froh, dass dies nützlich war!
Zu einfach.
Schöner kleiner Tipp, der nützlich sein könnte. Ein guter Entwickler hätte das herausgefunden, wie Sie es getan haben.
@Cosss und Chris
Im Gegenteil, wäre es dann nicht noch einfacher?
Ich meine, wenn Ihre Breite 20% beträgt, ist die Hälfte davon 10%, 50% – 10% = 40%, also richten Sie es so ein:
left: 40%;width: 20%;
Das schien mir logisch, aber ich bin im Moment halb eingeschlafen, also wer weiß.
@David: Ja, Sie haben Recht, wenn die Breite des Objekts ein Prozentsatz ist, machen Sie einfach Ihr "left" zur Hälfte des verbleibenden Prozentsatzes. Also, left percentage = (100 – width percentage).
Aber die vertikale Zentrierung eines Objekts mit flüssiger Höhe, das ist schwieriger. Das ist praktisch nur für Tabellen.
Chris,
Diese Technik ist keine sichere Methode zum Zentrieren von Objekten; ich habe früher größere Blöcke durch Kombination von left/top und margin-left/margin-top zentriert, bis jemand eine schreckliche Tatsache darüber entdeckt hat.
Zum Beispiel, bei einer größeren Box
#centered
{
width:900px;height:400px;
left:50%;top:50%;
margin:-200px 0 0 -450px;
border:1px solid #000;
position:fixed;
}
* html #centered { position:absolute;} /* Wie Mariusz bemerkte */
Wenn Sie versuchen, die Breite Ihres Fensters auf eine Größe **kleiner als** 900px zu reduzieren, werden die linken und rechten Teile der Box von Ihrem Fenster verdeckt, je kleiner die Fenstergröße ist (dasselbe passiert, wenn Sie die Größe Ihres Fensters vertikal reduzieren).
Und die Scrollbalken werden nicht sichtbar sein, egal ob Sie sie auf FF, IE, Safari oder Opera testen; es gibt eine sinnvolle Erklärung.
Bei einem Fenster, das **größer** als die Größe Ihres Objekts ist, befinden sich die mittleren x- und y-Punkte an einer Position **gleich oder größer** als die Ränder des Objekts.
Beispiel
Fenstergröße: 1000 x 600
zentraler Punkt: 500 x 300
Objekt-Ränder in meinem Beispiel: -450 x 200
------------------------------------------------
Objektposition: 50 x 100
Jedoch, in einem schmalen Fenster…
Beispiel
Fenstergröße: 700 x 600
zentraler Punkt: 350 x 300
Objekt-Ränder: -450 x -200
--------------------------------------------------
Objektposition: *\-100* x 100, was zu einer negativen Position führt.
Dennoch ist es eine gute Technik für kleine Objekte.
@Hudson Tavares: Sie haben Recht, dass Sie keine Scrollbalken erhalten, wenn die Fenstergröße unter die Größe des zentrierten Objekts schrumpft. Schauen Sie sich ein Beispiel dafür an
https://css-tricks.de/examples/CSSCentering/
Ich verstehe auch, was Sie sagen, dass Sie am Ende eine negative Position haben, da Sie das Fenster bis zu dem Punkt schrumpfen können, an dem der Inhalt an den Rändern verloren geht, ohne dass Sie scrollen können, um ihn zu erreichen. Ich denke, wenn jemand sein Browserfenster auf etwa 500 Pixel Breite reduziert, weiß er, was er tut und versteht, dass Inhaltsseiten nicht auf diese Weise angezeigt werden sollen.
Wenn Sie tatsächliche Inhalte zentrieren, ist es meiner Meinung nach eine gesündere Methode, die horizontale Zentrierung und statische vertikale Positionierung zu wählen.
Ich habe die 50%/50% CSS-Positionierung verwendet, hatte aber am Ende die gleichen Probleme wie Hudson: Der obere Teil der Website wurde bei kleineren Browserfenstergrößen abgeschnitten. Ich habe bereits JavaScript/jQuery auf der Website verwendet, also habe ich einfach eine Funktion geschrieben, die bei onload und onresize aufgerufen wurde. Ich wünschte, es gäbe eine Möglichkeit, dies mit reinem CSS zu machen.
function setCenter(whichDiv) {
var newX = ($(window).width() - $(whichDiv).width())/2;
var newY = ($(window).height() - $(whichDiv).height())/2;
if (newY
Ich bin ein Anfänger und versuche, CSS zu verstehen. Ich mag diesen Trick, aber er scheint nur mit einem Logo oder etwas zu funktionieren, das man im Browser zentriert. Ich habe jedoch eine Box mit dem Tag "div" erstellt und versuche, ein Bild in dieser Box zu zentrieren. Dieser Trick nimmt das Bild aus meiner Box und zentriert es im Browser. Gibt es eine Möglichkeit, das Bild in meiner Box zu lassen und es in der Box und nicht im Browser zu zentrieren?
@Joe Porritt: Kennen Sie die Breite des div, in dem Sie das Bild platzieren? Wenn ja, können Sie dem Bild einfach eine Klasse geben und dann einen linken Rand über diese Klasse anwenden, um es zu zentrieren. Wenn nicht, können Sie tatsächlich `text-align` verwenden, um das Bild zu zentrieren, da Bilder standardmäßig Inline-Elemente sind.
Lassen Sie sich nicht von veralteten Tags wie `
Das behebt die Scrollbalken
http://exanimo.com/css/vertical-centering-with-a-floated-shim/
Toller Beitrag, habe schon ewig danach gesucht, wie man das macht
bisher habe ich so etwas gemacht
margin: 0 auto;
aber ich bin mir nicht sicher, ob das der beste Weg ist.
Okay, lassen Sie uns das auf die nächste Stufe heben
Kann ich 2 Boxen (unterschiedlicher Farben) in der Mitte haben, und die linke Box wiederholt sich nach links und die rechte Box wiederholt sich nach rechts ... und sie bleiben immer zentriert, wahrhaftig zentriert?
lieblichlieblichlieblich!
Ich habe einen weiteren guten Trick gefunden
.centered-horizontal
{
left:-50%;
position:relative;
}
Einfach, schnell und genau das, was ich brauchte, danke!
.centered { //You can use just margin:auto; or both left and right margin auto :) margin-left: auto; margin-right: auto; width:70%; //Just for example this width }Funktioniert perfekt in divs, draußen, wo immer Sie wollen ... aber in IE8 funktioniert es nicht, es sei denn, Sie deklarieren den !doctype
Gern geschehen:)
Vielen Dank für diese Seite und für alles, was Sie tun. Diese Seite hat sich als hilfreich erwiesen, als ich in einer Klemme war, mehr als nur ein paar Mal. Ihre Arbeit inspiriert meine, besser zu werden.
Eigentlich habe ich festgestellt, dass der beste Weg, dies zu tun, mit einer Tabelle ist. Es funktioniert in allen Browsern (auch IE). Außerdem muss man dabei nie die Größe des Bildes kennen.
Ich verwende jQuery, um den margin-top und margin-left zu ermitteln. Es zentriert dynamische Elemente perfekt.
Niemand scheint bemerkt zu haben, dass Sie die Zahlen in Ihrem Diagramm vertauscht haben. (Sie haben `top:` auf einen Links-nach-rechts-Pfeil und umgekehrt gesetzt)
Versuchen Sie
CSS
HTML
Interessantes DOM. Chris Coyiers Code ist CSS-Kindergarten. Nicht responsiv.
Um CSS-Code einzufügen...
left:50%; top:50%;
left: -0.5(objectwidth); top: 50%(objectheight) ? ?
Wie codieren wir 50% einer **relativen** Breite/Höhe mit CSS?
Responsivität rockt ((vielleicht nicht ich)), aber wie wäre es damit als Ausgangspunkt.
Es gibt eine trigonometrische Beziehung zwischen links, margin-left und breite.
Instanziiert durch die Beherrschung des Browsers über das flüssige Gleichgewicht des Höhen-Breiten-Verhältnisses.
Logik schreit also: *„Hier gibt es ein Schlüsselloch!“*
background-size: auto; left: 50%; margin-left: -12.5%; width: 25%;
... nun, das ist **magisch**!!
Ziemlich langweilig, wenn jedes Bild genau 50% ist. Extrapolation?
Eher ein Sinkloch-Marker. Passt zum Schlüsselloch, nicht zum Schlüssel. Irgendwelche Ideen?
Berichte über ein Rätsel, das Licht auf den schwer fassbaren Begriff 'responsiv' wirft. Ein Nachteil dieses 50%-Modells: Beim Hinein- und Herauszoomen bleibt ein 50%-Bild exakt gleich groß, während alles andere rein- und rauszoomt. Obwohl zentriert und flüssig, wenn sich die Fenstergröße ändert, ist dieses Bild nicht 'responsiv' im Hinblick auf die Geräte-Zoomtechnologie. Wenn Geräte heranzoomen, um Text zu vergrößern ... Passt sich der Text relativ zur flüssigen Breite von 100% innerhalb des Containers an.
Wir wären interessiert daran zu sehen, wie Chris sein Vokabular um unsere halb so große Wunderwaffe wickelt, sagen wir in einer Erweiterung seines obigen Themas. Entschuldigung für die Kettenpostings, Entdeckung ist aufregend. Ich überlasse das nun Ihnen allen.