Come centrare il div assoluto in orizzontale usando i CSS?


177

Ho un div e voglio che sia centrato orizzontalmente - anche se lo sto dando non margin:0 auto;è centrato ...

.container {
    position: absolute;
    top: 15px;
    z-index: 2;
    width:40%;
    max-width: 960px;
    min-width: 600px;
    height: 60px;
    overflow: hidden;
    background: #fff; 
    margin:0 auto;
}


@LoganMzz non è perché questa domanda ha la sua larghezza nota.
Davbog,

Risposte:


409

È necessario impostare left: 0e right: 0.

Questo specifica quanto lontano compensare i bordi del margine dai lati della finestra.

Come 'top', ma specifica quanto lontano il bordo del margine destro di una scatola è spostato rispetto al [sinistro / destro] del bordo [destro / sinistro] del blocco contenente la scatola.

Fonte: http://www.w3.org/TR/CSS2/visuren.html#position-props

Nota: l'elemento deve avere una larghezza inferiore alla finestra, altrimenti occuperà l'intera larghezza della finestra.

Se è possibile utilizzare le query multimediali per specificare un margine minimo , quindi passare a autodimensioni dello schermo più grandi.


.container {
  left:0;
  right:0;

  margin-left: auto;
  margin-right: auto;

  position: absolute;
  width: 40%;

  outline: 1px solid black;
  background: white;
}
<div class="container">
  Donec ullamcorper nulla non metus auctor fringilla.
  Maecenas faucibus mollis interdum.
  Sed posuere consectetur est at lobortis.
  Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.
  Sed posuere consectetur est at lobortis.
</div>


38
Nota: widthè un must!
Ijas Ameenudeen,

2
Sì. Questo è corretto ... usando un "text-align: center;" e un "left: 0; right: 0;" ti permetterà di posizionare in modo assoluto un div mantenendolo centrato orizzontalmente.
Sterling Bourne,

3
@AlexG Ho appena caricato il violino in IE11 e funziona. Puoi chiarire?
Brian Webster,

1
@AlexG funziona in IE11, tuttavia non funzionerà se non dichiari una larghezza . Ho avuto lo stesso problema. Devi usare una larghezza come mostrato nell'esempio.
Panama Jack,

1
necessario anche margin: autoperché funzioni nel nostro caso
Crashalot,

124

Questo non funziona in IE8 ma potrebbe essere un'opzione da considerare. È utile soprattutto se non si desidera specificare una larghezza.

.element
{
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

Ciò dipenderebbe probabilmente dalle esigenze del suo progetto.
Kris Selbekk,

3
A questo punto, ci sarebbe anche bisogno di una regola con un prefisso -webkit- affinché funzioni in Safari.
Shikkediel,

Purtroppo in qualche modo applica la trasparenza del div circostante anche al testo all'interno ..
dnl.re

1
Questa è sicuramente la risposta. Per me, avere la larghezza impostata in modo specifico è assolutamente impossibile.
Mike

14

Sebbene le risposte di cui sopra siano corrette ma per renderlo semplice per i principianti, tutto ciò che devi fare è impostare il margine, sinistro e destro. il seguente codice lo farà a condizione che sia impostata la larghezza e che la posizione sia assoluta:

margin: 0 auto;
left: 0;
right: 0;

demo:

.centeredBox {
    margin: 0 auto;
    left: 0;
    right: 0;
   
   
   /** Position should be absolute */
    position: absolute;
    /** And box must have a width, any width */
    width: 40%;
    background: #faebd7;
   
   }
<div class="centeredBox">Centered Box</div>


1
Questo ha funzionato perfettamente per le immagini assolute in una fila di colonne bootstrap
ZachNag

5

Flexbox? Puoi usare flexbox.

.box {
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  
  -webkit-justify-content: center;
  justify-content: center;

}

.box div {
  border:1px solid grey;
  flex: 0 1 auto;
  align-self: auto;
  background: grey;
}
<div class="box">
  <div class="A">I'm horizontally centered.</div>
</div>


In realtà ha funzionato magnificamente per il mio caso unico. left: 0; right: 0;esteso al 100%, che non era un'opzione poiché l'elemento figlio aveva un colore di sfondo e left: 50%; transform: translateY(-50%);non funzionava perché ciò limitava la larghezza del bambino al 50%. Questa era l'unica soluzione che conservava dimensioni flessibili del bambino (limitatamente al supporto del browser). Grazie!
Ben Dyer,

3
.centerDiv {
    position: absolute;
    left: 0;
    right: 0;
    margin: 0 auto;
    text-align:center;
}


0

Ecco un link per favore usa questo per rendere il div al centro se la posizione è assoluta.

HTML:

<div class="bar"></div>

CSS:

.bar{
  width:200px;
  border-top:4px solid red;
  position:absolute;
  margin-left:auto;
  margin-right:auto;
  left:0;
  right:0;
}

Esempio jsfiddle


-1

Non puoi utilizzarlo margin:auto;sugli position:absolute;elementi, rimuovilo se non ti serve, tuttavia, se lo fai, potresti usare left:30%;((100% -40%) / 2) e query multimediali per i valori massimo e minimo:

.container {
    position: absolute;
    top: 15px;
    left: 30%;
    z-index: 2;
    width:40%;
    height: 60px;
    overflow: hidden;
    background: #fff;
}

@media all and (min-width:960px) {

    .container {
        left: 50%;
        margin-left:-480px;
        width: 960px;
    }

}

@media all and (max-width:600px) {

    .container {
        left: 50%;
        margin-left:-300px;
        width: 600px;
    }

}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.