Positionieren Sie das <div> -Element in der Mitte des Bildschirms


134

Ich möchte ein <div>(oder ein <table>) Element unabhängig von der Bildschirmgröße in der Mitte des Bildschirms positionieren . Mit anderen Worten, der Abstand zwischen "oben" und "unten" sollte gleich sein, und der Abstand zwischen "rechts" und "links" sollte gleich sein. Ich möchte dies nur mit CSS erreichen.

Ich habe Folgendes versucht, aber es funktioniert nicht:

 <body>
  <div style="top:0px; border:1px solid red;">
    <table border="1" align="center">
     <tr height="100%">
      <td height="100%" width="100%" valign="middle" align="center">
        We are launching soon!
      </td>
     </tr>
    </table>
  </div>
 </body>

Hinweis:
Es ist in Ordnung, ob das <div>Element (oder <table>) mit der Website scrollt oder nicht. Ich möchte nur, dass es zentriert wird, wenn die Seite geladen wird.



Hallo Purmou, die Frage, die du erwähnt hast, ob für die Positionierung in der Mitte der Seite, dh links und rechts gleich viel Platz - nicht der obere und untere Platz gleich!
Summe


Antworten:


201

Der einfache Weg, wenn Sie eine feste Breite und Höhe haben:

#divElement{
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -50px;
    margin-left: -50px;
    width: 100px;
    height: 100px;
}​

Bitte verwenden Sie keine Inline-Stile! Hier ist ein Arbeitsbeispiel http://jsfiddle.net/S5bKq/ .


13
Für diejenigen, die eine dynamische Höhe suchen: stackoverflow.com/questions/396145/…
pulkitsinghal

1
@ woho87 warum nicht Inline-Stile verwenden? aus den bekannten Gründen oder gibt es noch etwas, das ich für das spezifische Beispiel wissen sollte?
Sharky

@KatrinRaimond ist es aus den bekannten Gründen, dokumentiert hier stackoverflow.com/questions/2612483/… und hier webdesign.about.com/od/css/a/aa073106.htm .
Alex

Wenn Sie jedoch die Spitze des DivElements in der Einheit '%' festlegen, nimmt das DivElement vertikalen Platz ein, es sei denn, das DivElement befindet sich in einem relativen Element.
Sudip

ist Position: fest oder Position: absolut?
Kurkula

151

Da Transformationen heutzutage allgegenwärtiger unterstützt werden, können Sie dies tun, ohne die Breite / Höhe des Popups zu kennen

.popup {
    position: fixed;
    top: 50%;
    left: 50%;
    -webkit-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
}

Einfach! JSFiddle hier: http://jsfiddle.net/LgSZV/

Update: Check out https://css-tricks.com/centering-css-complete-guide/ für eine ziemlich umfassende Anleitung auf CSS Zentrierung. Fügen Sie es dieser Antwort hinzu, da es viele Augäpfel zu bekommen scheint.


1
Wenn der Inhalt im Popup verwendet wird, overflow:autoist das Scrollen in IE9 fehlerhaft. :(
joescii

2
Nicht so allgegenwärtig. IE8 macht immer noch 20% der Browserfreigabe aus und unterstützt sie nicht . Nehmen Sie diese also nur für IE9 +.
Fotanus

7
+1 als einzige Lösung, bei der Sie weder Höhe noch Breite angeben oder Javascript verwenden müssen.
Jan Derk

@fotanus, wenn Entwickler IE 9 nicht mehr unterstützen <Benutzer migrieren oder aktualisieren ihren Browser.
Diego Vieira

@DIegoVieira so funktioniert das leider nicht. Sehen Sie die Tragödie der Commons . Die Leute werden IE8 weiterhin unterstützen, weil sie diesen Anteil nicht verlieren möchten, und die Leute werden ihn weiterhin verwenden, weil er funktioniert.
Fotanus

33

Stellen Sie die Breite und Höhe ein und Sie sind gut.

div {
  position: absolute;
  margin: auto;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  width: 200px;
  height: 200px;
}

Wenn Sie möchten, dass die Elementdimensionen flexibel sind (und sich nicht um ältere Browser kümmern), lesen Sie die Antwort von XwipeoutX .


1
Dies ist die sauberste und einfachste Antwort und ist mobil freundlich zu. +1
Rust

22

Es funktioniert für jedes Objekt. Auch wenn Sie die Größe nicht kennen:

.centered {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

17

Mit HTML 5 und CSS 3 ist das jetzt einfacher:

<!DOCTYPE html>
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style>
            body > div {
                position: absolute;
                top: 0;
                bottom: 0;
                left: 0;
                right: 0;
                display: flex;
                justify-content: space-around;
                align-items: center;
                flex-wrap: wrap;
            }
        </style>
    </head>
    <body>
        <div>
            <div>TODO write content</div>
        </div>
    </body>
</html>

12

Wenn Sie eine feste, divnur absolute Position haben, liegt diese bei 50% von oben und 50% links und am negativen Rand oben und links von der Hälfte der Höhe bzw. Breite. Passen Sie sich Ihren Bedürfnissen an:

div {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 500px;
    height: 300px;
    margin-left: -250px;
    margin-top: -150px;
}

9

Verwenden Sie Flex . Viel einfacher und funktioniert unabhängig von Ihrer divGröße:

.center-screen {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  text-align: center;
  min-height: 100vh;
}
 <html>
 <head>
 </head>
 <body>
 <div class="center-screen">
 I'm in the center
 </div>
 </body>
 </html>


3

Ich würde dies in CSS tun:

div.centered {
  position: fixed; 
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

dann in HTML:

<div class="centered"></div>

0

Versuche dies

<table style="height: 100%; left: 0; position: absolute; text-align: center; width: 100%;">
 <tr>
  <td>
   <div style="text-align: left; display: inline-block;">
    Your Html code Here
   </div>
  </td>
 </tr>
</table>

Oder dieses

<div style="height: 100%; left: 0; position: absolute; text-align: center; width: 100%; display: table">
 <div style="display: table-row">
  <div style="display: table-cell; vertical-align:middle;">
   <div style="text-align: left; display: inline-block;">
    Your Html code here
   </div>
  </div>
 </div>
</div>

0

Wenn jemand nach einer Lösung sucht,

Ich habe das gefunden,

Es ist die beste Lösung, die ich bisher gefunden habe!

div {
  width: 100px;
  height: 100px;
  background-color: red;
  position: absolute;
  top:0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
}

http://dabblet.com/gist/2872671

Ich hoffe dir gefällt es!


0

Ein weiterer einfacher, flexibler Ansatz zum Anzeigen des Blocks in der Mitte: Verwenden der nativen Textausrichtung mit line-heightund text-align.

Lösung:

.parent {
    line-height: 100vh;        
    text-align: center;
}

.child {
    display: inline-block;
    vertical-align: middle;
    line-height: 100%;
}

Und HTML-Beispiel:

<div class="parent">
  <div class="child">My center block</div>
</div>

Wir machen div.parentVollbild und sein einzelnes Kind div.childrichtet sich als Text aus display: inline-block.

Vorteile:

  • Flexibilität, keine absoluten Werte
  • Unterstützung Größe ändern
  • funktioniert gut auf dem Handy

Einfaches Beispiel für JSFiddle: https://jsfiddle.net/k9u6ma8g


0

Alternative Lösung, bei der keine absolute Position verwendet wird:
Ich sehe viele absolute Antworten auf die Position. Ich konnte Position absolut nicht verwenden, ohne etwas anderes zu brechen. Für diejenigen, die dies nicht konnten, habe ich
Folgendes getan: https://stackoverflow.com/a/58622840/6546317 (als Antwort auf eine andere Frage veröffentlicht).

Die Lösung konzentriert sich nur auf die vertikale Zentrierung, da meine untergeordneten Elemente bereits horizontal zentriert waren. Dies kann jedoch angewendet werden, wenn Sie sie nicht auf andere Weise horizontal zentrieren können.


-2

Versuche dies:

width:360px;
height:360px;
top: 50%; left: 50%;
margin-top: -160px; /* ( ( width / 2 ) * -1 ) */
margin-left: -160px; /* ( ( height / 2 ) * -1 ) */
position:absolute;

2
Dies ist
praktisch

Ja, aber hier erkläre ich die Funktionsweise des Randes oben und links ... jemand weiß das nicht ....
user3423956

1
Dann ist es
praktisch
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.