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?

Dro1n2
fuente
12
Duplicado preguntado hace 2 minutos: CSS: imagen central
Pekka
1
Tema similar aquí: stackoverflow.com/questions/18516317/…
Hashem Qolami
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

Gurpreet Singh
fuente
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>
John K.
fuente
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.

Aerdman
fuente
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)

avrahamcool
fuente
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
62
img.centered {
   display: block;
   margin: auto auto;
}
Nitina
fuente
1
esto es muy similar a esta respuesta
suhailvs
32

Puede hacerlo fácilmente usando display: propiedad flex css

#over {
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}
Tanveer Ahmad Dar
fuente
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;
}
dhir
fuente
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 .

pawel7318
fuente
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>
Garconis
fuente
8

Este sería un enfoque más simple

#over > img{
    display: block;
    margin:0 auto; 
}
Sujay sreedhar
fuente
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>

LizardKG
fuente
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.

Sasha
fuente
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; 
}
Nadav
fuente
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/

Yogee
fuente
5

Archivo CSS

.over {
    display : block;
    margin : 0px auto;
Sabarish R
fuente
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;
}
luchopintado
fuente
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>

GabMic
fuente
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;"

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

HTML:

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

CSS:

#over {
  text-align: center;
}

#over img {
  vertical-align: middle;
}
Lahori
fuente
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;
        }
Sanjib Debnath
fuente
2

Esto funcionó para mí:

#image-id {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    width: auto;
    margin: 0 auto;
}
Sileria
fuente
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;
}
julian9876
fuente
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%);
}
Akshay Bande
fuente
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;
    }
ThomasAFink
fuente
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>
WDuffy
fuente
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>
fpauer
fuente
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>

KSJ10
fuente
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.

Terry Lin
fuente
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>

Intacto
fuente