Alinee la imagen en el centro y en el medio dentro de div


302

Tengo siguiente div

<div id="over" style="position:absolute; width:100%; height:100%>
 <img src="img.png">
</div>

¿Cómo alinear la imagen para ubicarla en el centro y centro de div?


12
Duplicado preguntado hace 2 minutos: CSS: imagen central
Pekka


Considere seleccionar una respuesta como correcta.
McSonk

Respuestas:


406

body {
  margin: 0;
}

#over img {
  margin-left: auto;
  margin-right: auto;
  display: block;
}
<div id="over" style="position:absolute; width:100%; height:100%">
  <img src="http://www.garcard.com/images/garcard_symbol.png">
</div>

JSFiddle


44
display: block;Fue mi trampa. TnX
Ujjwal Singh

2
Seguir no funciona. ¿Cuál es el error que estoy haciendo? <html> <head> <style> #over img {display: block; margen izquierdo: auto; margen derecho: auto; } </style> </head> <body> <div id = "over" style = "position: absolute; width: 100%; height: 100%"> <img src = " img8a.flixcart.com/image/ tablet / f / k / t /… "> </div> </body> </html>
nizam.sp

1
Si no utilizamos, display: blockel valor predeterminado es display: inlinesegún w3schools.com/cssref/pr_class_display.asp . ¿Por qué necesitamos usar block? Trabajé para mí, pero no estoy seguro de por qué el bloque centrará el img y en línea no.
user3731622

porque en línea no se mueve en la línea, es, de hecho, en línea. entonces el margen automático es ineficaz.
netalex

12
Esto no se alinea verticalmente
alpadev

170
<div style="display:table-cell; vertical-align:middle; text-align:center">
<img src="img.png">
</div>

66
respuesta superior, muy útil!
Ilian Andreev

1
Solución muy corta y fácil, pero parece que solo funciona con un ancho y una altura fijos, sin porcentaje Sin embargo, funciona con flotadores, por lo que +1 para eso. - jsfiddle.net/2s2nY/2
magnetronnie

1
pero esto solo hace la alineación vertical pero no la horizontal ¿verdad?
V-SHY

1
No funcionará si el ancho de la imagen es mayor que el ancho del div.
Davuz

55
Si eliminamos display: table-cell; Funciona perfectamente.
Ahesanali Suthar

103

Esto también se puede hacer usando el diseño de Flexbox:

TAMAÑO ESTÁTICO

.parent {
    display: flex;
    height: 300px; /* Or whatever */
    background-color: #000;
}

.child {
    width: 100px;  /* Or whatever */
    height: 100px; /* Or whatever */
    margin: auto;  /* Magic! */
}
<div class="parent">
    <img class="child" src="https://i.vimeocdn.com/portrait/58832_300x300"/>
</div>

TAMAÑO DINÁMICO

html, body {
  width: 100%;
  height: 100%;
  display: flex;
  background-color: #999;
}

* {
  margin: 0;
  padding: 0;
}

.parent {
  margin: auto;
  background-color: #000;
  display: flex;
  height: 80%;
  width: 80%;
}

.child {
  margin: auto;  /* Magic! */
  max-width: 100%;
  max-height: 100%;
}
<div class="parent">
  <img class="child" src="https://i.vimeocdn.com/portrait/58832_300x300"/>
</div>

Encontré el ejemplo en este artículo , que hace un gran trabajo explicando cómo usar el diseño.


En el tamaño estático, no hay necesidad de ancho y alto para el niño (al menos en mi versión de Firefox).
Rodrigo

91

Me parece que también querías que esa imagen estuviera centrada verticalmente dentro del contenedor. (No vi ninguna respuesta que lo proporcionara)

Violín de trabajo:

  1. Solución CSS pura
  2. No interrumpir el flujo de documentos (sin flotantes ni posicionamiento absoluto)
  3. Compatibilidad cruzada con el navegador (incluso IE6)
  4. Completamente receptivo

HTML

<div id="over">
    <span class="Centerer"></span>
    <img class="Centered" src="http://th07.deviantart.net/fs71/200H/f/2013/236/d/b/bw_avlonas_a5_beach_isles_wallpaper_image_by_lemnosexplorer-d6jh3i7.jpg" />
</div>

CSS

*
{
    padding: 0;
    margin: 0;
}
#over
{
    position:absolute;
    width:100%;
    height:100%;
    text-align: center; /*handles the horizontal centering*/
}
/*handles the vertical centering*/
.Centerer
{
    display: inline-block;
    height: 100%;
    vertical-align: middle;
}
.Centered
{
    display: inline-block;
    vertical-align: middle;
}

Nota: esta solución es buena para alinear cualquier elemento dentro de cualquier elemento. para IE7, cuando aplique la .Centeredclase en elementos de bloque, deberá usar otro truco para que inline-blockfuncione. (eso porque IE6 / IE7 no funciona bien con bloque en línea en elementos de bloque)


En lugar de tener más span, puede usar el pseudo-elemento :before: jsfiddle.net/xaliber/cj6zhtp0
deathlock

@deathlock es bien conocido. pero estaba apuntando a navegadores IE antiguos (que no admitían pseudo elementos).
avrahamcool

1
No lo es, pero HTML solo debe usarse para estructura, no para presentación. Ese trabajo se deja para CSS, de ahí el pseudo-elemento.
deathlock

1
¿Qué quiere decir "No interrumpir el flujo de documentos (sin flotantes o posicionamiento absoluto)"? ¿Qué es el #over { position:absolute; width:100%; height:100%;?
Rodrigo

1
@Rodrigo, de hecho, si no necesita apuntar a navegadores antiguos, este es el enfoque recomendado.
avrahamcool


32

Puede hacerlo fácilmente usando display: propiedad flex css

#over {
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

Este es el que trabaja para mí. Imagen profundamente anidada en PUG / SCSS. Gracias.
Mogens TrasherDK

29
#over {position:relative; text-align:center; 
       width:100%; height:100%; background:#CCC;}

#over img{
    position: absolute;
    margin: auto;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

Esta es la respuesta correcta, que en realidad se centra tanto vertical como horizontalmente.
Alexander Kim

La mejor respuesta hasta ahora.
kiran puppala

13

Todavía tenía algunos problemas con otra solución presentada aquí. Finalmente esto funcionó mejor para mí:

<div class="parent">
    <img class="child" src="image.png"/>
</div>

css3:

.child {
 display: block;
 position: absolute;
 top: 50%;
 left: 50%;
 transform: translate(-50%, -50%);
 -webkit-transform: translate(-50%, -50%); /* Safari and Chrome */
 -moz-transform: translate(-50%, -50%); /* Firefox */
 -ms-transform: translate(-50%, -50%); /* IE 9 */
 -o-transform: translate(-50%, -50%); /* Opera */
 // I suppose you may like those too:
 // max-width: 80%;
 // max-height: 80%;
}

Puede leer más sobre ese enfoque en esta página .


También tuve que agregar CSS principal, ¡pero su código funcionó perfectamente! posición: relativa; ancho: 100%; flotador izquierdo; desbordamiento: oculto; altura mínima: 189 px;
user2593040

10

Básicamente, establecer el margen derecho e izquierdo en automático hará que la imagen se alinee en el centro.

<div id="over" style="position:absolute; width:100%; height:100%>
<img src="img.png" style="display: block; margin: 0 auto;">
</div>

8

Este sería un enfoque más simple

#over > img{
    display: block;
    margin:0 auto; 
}

7

La respuesta de Daaawx funciona, pero creo que sería más limpio si eliminamos el CSS en línea.

body {
	margin: 0;
}

#over img {
	margin-left: auto;
	margin-right: auto;
	display: block;
}
div.example {
  position: absolute;
  width: 100%;
  height: 100%;
}
<div class="example" id="over">
	<img src="http://www.garcard.com/images/garcard_symbol.png">
</div>


6

configurando el img para mostrar: inline-block mientras configura el div superior para text-align: center también hará el trabajo

EDITAR: para aquellas personas que están jugando con display: inline-block >>> no olviden que, por ejemplo, dos divs como

<div>Div1 content</div>NOSPACEHERE<div>Div2 content</div>

Realmente no tienen espacios entre ellos (como se ve aquí).

Simplemente básico para evitar estas brechas (inherentes al bloque en línea) entre ellos. ¡Estas brechas se pueden ver entre cada dos palabras que estoy escribiendo en este momento! :-) Entonces ... espero que esto ayude a algunos de ustedes.


6

SENCILLO. 2018. FlexBox. Para verificar la compatibilidad del navegador: ¿puedo usar una

solución mínima?

div#over { 
   display: flex; 
   justify-content: center; 
   align-items: center; 
}


Para obtener el soporte de navegador más amplio posible:

div#over { 
   display: -webkit-flex;
   display: -ms-flex; 
   display: flex; 
   justify-content: center; 
   -ms-align-items: center; 
   align-items: center; 
}

5

He intentado muchos enfoques, pero solo este funciona para múltiples elementos en línea dentro de un contenedor div. Aquí hay un código para alinear todo en div en el medio.

CSS

.divContainer
{
    vertical-align: middle;
    text-align: center; <!-- If you want horizontal center alignment -->
}
.divContainer > *
{
    vertical-align: middle;
}

HTML

<div class="divContainer">
    <span>Middle Text</span>
    <img src="test.png"/>
</div>

El código de muestra está aquí: https://jsfiddle.net/yogendrasinh/2vq0c68m/



3

Prueba este código mínimo:

<div class="outer">
    <img src="image.png"/>
</div>

Y CSS:

.outer{
  text-align: center;
}
.outer img{
  display: inline-block;
}

3

Bueno, estamos en 2016 ... ¿por qué no usar flexbox? También es receptivo. Disfrutar.

#over{
display:flex;
align-items:center;
justify-content:center;
}
<div id="over">
	<img src="http://www.garcard.com/images/garcard_symbol.png">
</div>


1
Amor css3! Gracias. Sin embargo, es bueno tener en cuenta que esto solo funcionará en los navegadores modernos (excepto IE). Todos los demás navegadores no tendrán efecto.
Neel

2

muchas respuestas sugieren usar, margin:0 autopero esto funciona solo cuando el elemento que intenta centrar no está flotando a la izquierda o la derecha, es decir, el floatatributo css no está configurado. Para hacer esto, aplique el displayatributo table-celly luego aplique el margen de izquierda y derecha a automático para que su estilo se vea comostyle="display:table-cell;margin:0 auto;"


2
    <div>
    <p style="text-align:center; margin-top:0px; margin-bottom:0px; padding:0px;">
    <img src="image.jpg" alt="image"/>
    </p>    
    </div>

2

HTML:

<div id="over">
    <img src="img.png">
</div>

CSS:

#over {
  text-align: center;
}

#over img {
  vertical-align: middle;
}

Es mejor si agrega algún comentario y no solo arroja código.
Parkash Kumar

2

Para el centro horizontalmente Solo pon

#over img {
    display: block;
    margin: 0 auto;
    clear:both;
}

Otro método:

#over img {
    display: inline-block;
    text-align: center;
}

Para el centro verticalmente Solo ponga:

   #over img {

           vertical-align: middle;
        }

2

Esto funcionó para mí:

#image-id {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    width: auto;
    margin: 0 auto;
}

2

Esto hizo el truco para mí.

<div class="CenterImage">
         <asp:Image ID="BrandImage" runat="server" />
</div>

'Nota: en este caso, no tengo una clase css asociada a' BrandImage '

CSS:

.CenterImage {
    position:absolute; 
    width:100%; 
    height:100%
}

.CenterImage img {
    margin: 0 auto;
    display: block;
}

2

Esto funcionó para mí cuando tienes que centrar la imagen de alineación y tu div padre a la imagen cubre toda la pantalla. es decir, altura: 100% y ancho: 100%

#img{
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%,-50%);
}

1

Usar posicionamiento. Lo siguiente funcionó para mí ...

Con zoom al centro de la imagen (la imagen llena el div):

div{
    display:block;
    overflow:hidden;
    width: 70px; 
    height: 70px;  
    position: relative;
}
div img{
    min-width: 70px; 
    min-height: 70px;
    max-width: 250%; 
    max-height: 250%;    
    top: -50%;
    left: -50%;
    bottom: -50%;
    right: -50%;
    position: absolute;
}

Sin acercar al centro de la imagen (la imagen no llena el div):

   div{
        display:block;
        overflow:hidden;
        width: 100px; 
        height: 100px;  
        position: relative;
    }
    div img{
        width: 70px; 
        height: 70px; 
        top: 50%;
        left: 50%;
        bottom: 50%;
        right: 50%;
        position: absolute;
    }

1

La respuesta marcada para esto no alineará verticalmente la imagen. Una solución adecuada para los navegadores modernos es flexbox. Se puede configurar un contenedor flexible para alinear sus elementos tanto horizontal como verticalmente.

<div id="over" style="position:absolute; width:100%; height:100%; display: flex; align-items: center; justify-content: center;">
    <img src="img.png">
</div>

Esta solución responde a la pregunta y funciona, a diferencia de la respuesta marcada. ¿Quizás el votante negativo podría detallar su decisión de votar a favor?
WDuffy

66
De la cola de revisión : ¿Puedo solicitarle que agregue algo de contexto alrededor de su código fuente? Las respuestas de solo código son difíciles de entender. Ayudará tanto al autor de la pregunta como a los futuros lectores si puede agregar más información en su publicación.
RBT

1
Eso no justifica el voto negativo. La respuesta es técnicamente correcta y ayudaría a los futuros lectores. He actualizado el cuerpo de respuestas para cumplir con las reglas de la casa, pero quizás el equipo central debería implementar una solución más directa, ya que identificar las respuestas de solo código es una tarea trivial.
WDuffy

0

Puedes echar un vistazo a esta solución:

Centrar horizontal y verticalmente una imagen en un cuadro

<style type="text/css">
.wraptocenter {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
    width: ...;
    height: ...;
}
.wraptocenter * {
    vertical-align: middle;
}
.wraptocenter {
    display: block;
}
.wraptocenter span {
    display: inline-block;
    height: 100%;
    width: 1px;
}
</style>
<!--[if lt IE 8]-->
<style>
.wraptocenter span {
    display: inline-block;
    height: 100%;
}
</style>
<!--[endif]-->

<div class="wraptocenter"><span></span><img src="..." alt="..."></div>

0

Una manera simple sería crear estilos separados tanto para el div como para la imagen y luego posicionarlos de forma independiente. Digamos que si quiero establecer la posición de mi imagen al 50%, tendría un código similar al siguiente ...

#over{
  position:absolute;
  width:100%;
  height:100%;
}
#img{
  position:absolute;
  left:50%;
  right:50%;
}
<div id="over">
 <img src="img.png" id="img">
</div>


Solo dígame si funciona con todo tipo de navegadores, a pesar de que esto es algo básico que todos los navegadores deben admitir (de lo contrario, no lo llame un navegador)
KSJ10

0
#over {
    display: table-cell; 
    vertical-align: middle; 
    text-align: center;
    height: 100px;
}

Modifique el valor de altura para su necesidad.


0

Esto debería funcionar.

IMPORTANTE PARA LA PRUEBA: para ejecutar el fragmento de código, haga clic en el botón izquierdo EJECUTAR fragmento de código , luego enlace derecho Página completa

#fader{
position:fixed;z-index: 10;
top:0;right:0;bottom:0;left:0;
opacity: 0.8;background: black;
width:100%;height:100%;
text-align: center;
}
.faders{display:inline-block;height:100%;vertical-align:middle;}
.faderi{display:inline-block;vertical-align:middle;}
<div id="fader">
<span class="faders"></span>
<img class="faderi" src="https://i.stack.imgur.com/qHF2K.png" />
</div>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.