¿Cómo se puede alinear una imagen dentro de un contenedor div
?
Ejemplo
En mi ejemplo, necesito centrar verticalmente <img>
el <div>
con class ="frame
":
<div class="frame" style="height: 25px;">
<img src="http://jsfiddle.net/img/logo.png" />
</div>
.frame
La altura es fija y la altura de la imagen es desconocida. Puedo agregar nuevos elementos en.frame
si esa es la única solución. Estoy tratando de hacer esto en Internet Explorer 7 y posterior, WebKit, Gecko.
Vea el jsfiddle aquí .
.frame {
height: 25px; /* Equals maximum image height */
line-height: 25px;
width: 160px;
border: 1px solid red;
text-align: center;
margin: 1em 0;
}
img {
background: #3A6F9A;
vertical-align: middle;
max-height: 25px;
max-width: 160px;
}
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=250 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=25 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=23 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=21 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=19 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=17 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=15 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=13 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=11 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=9 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=7 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=5 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=3 />
</div>
css
image
vertical-alignment
Arnaud Le Blanc
fuente
fuente
Respuestas:
La única forma (y la mejor entre navegadores) que conozco es usar un
inline-block
ayudante conheight: 100%
yvertical-align: middle
en ambos elementos.Entonces hay una solución: http://jsfiddle.net/kizu/4RPFa/4570/
Mostrar fragmento de código
O, si no desea tener un elemento adicional en los navegadores modernos y no le importa usar expresiones de Internet Explorer, puede usar un pseudo-elemento y agregarlo a Internet Explorer usando una expresión conveniente, que se ejecuta solo una vez por elemento , por lo que no habrá problemas de rendimiento:
La solución con
:before
yexpression()
para Internet Explorer: http://jsfiddle.net/kizu/4RPFa/4571/Mostrar fragmento de código
Cómo funciona:
Cuando tienes dos
inline-block
elementos cerca uno del otro, puedes alinearlos al lado del otro, porvertical-align: middle
lo que obtendrás algo como esto:Cuando se tiene un bloque con altura fija (en
px
,em
o de otra unidad absoluta), se puede ajustar la altura de los bloques interiores en%
.inline-block
conheight: 100%
un bloque con altura fija alinearía otroinline-block
elemento en él (<img/>
en su caso) verticalmente cerca de él.fuente
.frame
y.frame:before
. Una solución propuesta aquí es agregarmargin-left: -4px
a.frame
. Espero que esto ayude.<img src=""/>
NO está dentro del<span></span>
ayudante que se agregó. Esta afuera. Estuve a punto de tirar de cada mechón de mi cabello al no darme cuenta de esto.Esto puede ser útil:
fuente
position:fixed;
La solución de matejkramny es un buen comienzo, pero las imágenes de gran tamaño tienen una proporción incorrecta.
Aquí está mi tenedor:
Demostración: https://jsbin.com/lidebapomi/edit?html,css,output
HTML:
CSS:
fuente
top: 0;
. Esto da como resultado que solobottom: 0;
se aplique verticalmente.Una solución de tres líneas:
Esto se aplica a cualquier cosa.
A partir de aquí .
fuente
position: absolute;
porque necesitas un ancho fluido.Una solución CSS pura :
Cosas clave
fuente
Para una solución más moderna, y si no hay necesidad de admitir navegadores heredados, puede hacer esto:
Aquí hay un bolígrafo: http://codepen.io/ricardozea/pen/aa0ee8e6021087b6e2460664a0fa3f3e
fuente
align-self
para artículos individualesalign-self
es que los elementos flexibles estirarán la altura del contenedor principal.De esta manera, puede centrar una imagen verticalmente ( demostración ):
fuente
font-size: 0
paradiv
. Para contenedores bastante grandes, puede perderse, pero si sudiv
tamaño es de 100 px y el de img es de 80 px, será unos pocos píxeles más bajo.Además, puede usar Flexbox para lograr el resultado correcto:
fuente
¡Hay una solución súper fácil con flexbox!
fuente
Podría intentar configurar el CSS de PI en
display: table-cell; vertical-align: middle;
fuente
PI
"?Puedes probar el siguiente código:
fuente
Solución de imagen de fondo
Eliminé el elemento de imagen por completo y lo configuré como fondo del div con una clase de
.frame
http://jsfiddle.net/URVKa/2/
Esto al menos funciona bien en Internet Explorer 8, Firefox 6 y Chrome 13.
Lo comprobé y esta solución no funcionará para reducir imágenes de más de 25 píxeles de altura. Hay una propiedad llamada
background-size
que establece el tamaño del elemento, pero es CSS 3 lo que entraría en conflicto con los requisitos de Internet Explorer 7.Le aconsejaría que rehaga las prioridades y el diseño de su navegador para los mejores navegadores disponibles, u obtenga un código del lado del servidor para cambiar el tamaño de las imágenes si desea utilizar esta solución.
fuente
Imagina que tienes
Y css:
fuente
Podrías hacer esto:
Manifestación
http://jsfiddle.net/DZ8vW/1
CSS
JavaScript
fuente
http://jsfiddle.net/MBs64/
La propiedad clave es
display: table-cell;
para.frame
.Div.frame
se muestra en línea con esto, por lo que debe envolverlo en un elemento de bloque.Esto funciona en Firefox, Opera, Chrome, Safari e Internet Explorer 8 (y versiones posteriores).
ACTUALIZAR
Para Internet Explorer 7 necesitamos agregar una expresión CSS:
fuente
Mi solución: http://jsfiddle.net/XNAj6/2/
fuente
Esto funciona para navegadores modernos (2016 en el momento de la edición) como se muestra en esta demostración en codepen
Es muy importante que asigne una clase a las imágenes o utilice la herencia para orientar las imágenes que necesita centrar. En este ejemplo, lo usamos
.frame img {}
para que solo las imágenes envueltas por un div con una clase de.frame
sean seleccionadas.fuente
Pruebe esta solución con CSS puro http://jsfiddle.net/sandeep/4RPFa/72/
Tal vez sea el principal problema con su HTML. No está utilizando comillas cuando define c
lass
&image height
en su HTML.CSS:
Cuando trabajo con la
img
etiqueta, deja un espacio de 3 píxeles a 2 píxelestop
. Ahora disminuyoline-height
y está funcionando.CSS:
La
line-height
propiedad se representa de manera diferente en diferentes navegadores. Entonces, tenemos que definir diferentesline-height
navegadores de propiedades.Verifique este ejemplo: http://jsfiddle.net/sandeep/4be8t/11/
Verifique este ejemplo sobre
line-height
diferentes en diferentes navegadores: diferencias de altura de entrada en Firefox y Chromefuente
No estoy seguro acerca de Internet Explorer, pero en Firefox y Chrome, si tiene una
img
en undiv
recipiente, el siguiente contenido CSS debería trabajar. Al menos para mí funciona bien:fuente
display:table-cell;
no acepta% como anchosSolución usando una tabla y celdas de tabla
A veces se debe resolver visualizándolo como table / table-cell. Por ejemplo, una pantalla de título rápida. Es una forma recomendada por W3 también. Le recomiendo que consulte este enlace llamado Centrar un bloque o imagen de W3C.org.
Los consejos utilizados aquí son:
Personalmente, no estoy de acuerdo con el uso de ayudantes para este propósito.
fuente
Una manera fácil que funciona para mí:
Funciona muy bien para Google Chrome. Pruebe este en un navegador diferente.
fuente
Para centrar una imagen dentro de un contenedor (podría ser un logotipo) además de un texto como este:
Básicamente envuelves la imagen
fuente
Si puede vivir con márgenes de tamaño de píxel, simplemente agregue
font-size: 1px;
a.frame
. Pero recuerda que ahora en el.frame
1em = 1px, lo que significa que también debe establecer el margen en píxeles.http://jsfiddle.net/feeela/4RPFa/96/
Ahora ya no está centrado en Opera ...
fuente
Yo tuve el mismo problema. Esto funciona para mi:
fuente
Puedes usar esto:
fuente
El uso
table
y eltable-cell
método hacen el trabajo, especialmente porque también se dirige a algunos navegadores antiguos, creo un fragmento para que pueda ejecutarlo y verificar el resultado:fuente
He estado jugando con el uso de relleno para la alineación central. Deberá definir el tamaño del contenedor externo del nivel superior, pero el contenedor interno debe cambiar su tamaño y puede establecer el relleno en diferentes valores porcentuales.
jsfiddle
fuente
La mejor solución es que
fuente
Usa este:
Y puedes variar
font-size
.fuente
¿Desea alinear una imagen que tiene después de un texto / título y ambas están dentro de un div?
Ver en JSfiddle o Run Code Snippet.
Solo asegúrese de tener una ID o una clase en todos sus elementos (div, img, title, etc.).
Para mí funciona esta solución en todos los navegadores (para dispositivos móviles debe adaptar su código con: @media).
fuente