2010-12-16 27 views
32

Quiero colocar div que tenga una posición absoluta en el centro de la vista de pantalla (desplazado o no desplazado).Div. Absoluta de posición en el centro de la vista de pantalla

Tengo esto pero se coloca div en medio del documento y no a mitad de la vista actual.

#main { 
    width: 140px; 
    height:100px; 
    border: 1px solid Black; 
    text-align: left; 
    position: absolute; 
    top: 50%; 
    left: 50%; 
    margin-left:-70px; 
    margin-top:-50px; 
} 

Respuesta

39

Cambio position:absolute a position: fixed y usted debe ser bueno para ir!

Cuando dice posición - absoluta, la div de referencia es la div principal que tiene una posición - relativa. Sin embargo, si dices posición -fixed, la referencia es la ventana del navegador. que es lo que quieres en tu caso.

En el caso de IE6 Creo que se tienen que utilizar CSS Expresión

+1

Excepto en IE6 y navegadores móviles. – mercator

+0

tiene que funcionar en todos los navegadores, se acepta la solución javascript – asker

+1

u no tiene que preocuparse demasiado por ie6 ... se ha considerado muerto hace mucho tiempo – Kasturi

8

Desde CSS de calc() está soportado por todos los navegadores ahora, aquí una solución utilizando calc().

#main { 
    width: 140px; 
    height:100px; 
    border: 1px solid Black; 
    text-align: left; 
    position: absolute; 
    top: calc(50vh - (/* height */100px/2)); 
    left: calc(50vw - (/* width */140px/2)); 
} 
+0

No estaba enterado de esto y era exactamente lo que necesitaba para este caso - gran sugerencia @Robert Hahn. – kyleturner

18

Utilice el siguiente CSS:

.centered { 
    position: fixed; 
    top: 50%; 
    left: 50%; 
    /* bring your own prefixes */ 
    transform: translate(-50%, -50%); 
} 
+0

La solución más elegante hasta ahora ... funciona en todas las cajas de todos los tamaños y proporciones y no requiere personalización. ¿Es cross browser compatible? – Gautam

+0

Esto tiene un efecto extraño en el tamaño del elemento y el contenido en él. Por ejemplo, sin izquierda: el 50% del elemento ocupará tanto espacio de ancho como sea necesario, pero con el izquierdo: 50% obtiene un tamaño mágico y divide el contenido en múltiples líneas. – momomo

0

Un poco de manera más compleja es utilizar múltiples cajas exteriores. Este método funciona bien con o sin disco anchura/altura codificada del cuadro central (colores de fondo añaden sólo para mostrar lo que hace cada casilla):

/* content of this box will be centered horizontally */ 
 
.boxH 
 
{ 
 
    background-color: rgba(0, 127, 255, 0.2); 
 
    width: 100%; 
 
    height: 100%; 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    display: flex; 
 
    flex-direction: column; 
 
    align-items: center; 
 
} 
 

 
/* content of this box will be centered vertically */ 
 
.boxV 
 
{ 
 
    background-color: rgba(255, 0, 0, 0.2); 
 
    height: 100%; 
 
    display: flex; 
 
    flex-direction: row; 
 
    align-items: center; 
 
} 
 

 
/* content of this box will be centered horizontally and vertically */ 
 
.boxM 
 
{ 
 
    background-color: lightblue; 
 
    padding: 3em; 
 
}
<div> 
 
    some text in the background 
 
</div> 
 
<div class="boxH"> 
 
    <div class="boxV"> 
 
    <div class="boxM"> 
 
     this div is in the middle 
 
    </div> 
 
    </div> 
 
</div>

https://jsfiddle.net/vanowm/7cj1775e/

Si desea muestre div en el medio independientemente de la posición de desplazamiento, luego cambie position a fixed

Cuestiones relacionadas