Tengo el siguiente código que configura un contenedor que tiene una altura que cambia con el ancho cuando se redimensiona el navegador (para mantener una relación de aspecto cuadrado).
HTML
<div class="responsive-container">
<div class="dummy"></div>
<div class="img-container">
<IMG HERE>
</div>
</div>
CSS
.responsive-container {
position: relative;
width: 100%;
border: 1px solid black;
}
.dummy {
padding-top: 100%; /* forces 1:1 aspect ratio */
}
.img-container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
¿Cómo puedo alinear verticalmente el IMG dentro del contenedor? Todas mis imágenes tienen alturas variables y el contenedor no puede tener una altura fija / altura de línea porque responde ... ¡Por favor, ayuda!
html
css
responsive-design
vertical-alignment
usuario1794295
fuente
fuente
Respuestas:
Aquí hay una técnica para alinear elementos en línea dentro de un padre , horizontal y verticalmente al mismo tiempo:
Alineamiento vertical
1) En este enfoque, creamos un
inline-block
(pseudo-) elemento como el primer (o último) hijo del padre , y configuramos suheight
propiedad100%
para tomar toda la altura de su padre .2) Además, la suma
vertical-align: middle
mantiene los elementos en línea (bloque) en el medio del espacio de línea. Entonces, agregamos esa declaración CSS al primer hijo y a nuestro elemento (la imagen ) ambos.3) Finalmente, para eliminar el carácter de espacio en blanco entre los elementos en línea (-block) , podríamos establecer el tamaño de fuente del padre en cero por
font-size: 0;
.Nota: Utilicé la técnica de reemplazo de imagen de Nicolas Gallagher a continuación.
¿Cuales son los beneficios?
No es necesario especificar las dimensiones del elemento de imagen explícitamente.
Podemos usar fácilmente este enfoque para alinear un
<div>
elemento verticalmente también; que puede tener un contenido dinámico (alto y / o ancho). Pero tenga en cuenta que debe volver a configurar lafont-size
propiedad dediv
para mostrar el texto interior. Demo en línea .La salida
Contenedor receptivo
Esta sección no responderá la pregunta ya que el OP ya sabe cómo crear un contenedor receptivo. Sin embargo, explicaré cómo funciona.
Para hacer que la altura de un elemento contenedor cambie con su ancho (respetando la relación de aspecto), podríamos usar un valor porcentual para la
padding
propiedad superior / inferior .Un valor porcentual en el margen superior / inferior o en los márgenes es relativo al ancho del bloque contenedor.
Por ejemplo:
Aquí está la demostración en línea . Comente las líneas desde la parte inferior y cambie el tamaño del panel para ver el efecto.
Además, podríamos aplicar la
padding
propiedad a un hijo ficticio o:before
/:after
pseudo-elemento para lograr el mismo resultado. Pero tenga en cuenta que en este caso, el valor de porcentaje enpadding
es relativo al ancho de.responsive-container
sí mismo.Demo # 1 .
Demo # 2 (Usando
:after
pseudo-elemento)Agregar el contenido
El uso de la
padding-top
propiedad provoca un gran espacio en la parte superior o inferior del contenido, dentro del contenedor .Con el fin de fijar de eso, tenemos envolver el contenido por un elemento de envoltura, eliminar ese elemento de flujo normal de documentos mediante el posicionamiento absoluto , y, finalmente, expandir la envoltura (bu usando
top
,right
,bottom
yleft
propiedades) para llenar todo el espacio de su matriz, El contenedor .Aquí vamos:
Aquí está la demostración en línea .
Todos juntos
Aquí está la demostración de trabajo .
Obviamente, podría evitar el uso de
::before
pseudoelementos para la compatibilidad del navegador y crear un elemento como primer hijo de.img-container
:DEMO ACTUALIZADA .
Usando
max-*
propiedadesCon el fin de mantener el interior la imagen de la caja de ancho menor, podría configurar
max-height
ymax-width
propiedad en la imagen:Aquí está la DEMO ACTUALIZADA .
fuente
font-size: 0;
!Con flexbox esto es fácil:
VIOLÍN
Simplemente agregue lo siguiente al contenedor de imágenes:
fuente
-webkit-
prefijo de uso de safari , o pruebe una biblioteca como prefixfree.js :)Use este CSS, ya que tiene el marcado para ello:
Aquí hay un JsBin en funcionamiento: http://jsbin.com/ihilUnI/1/edit
Esta solución solo funciona para imágenes cuadradas (porque un valor de margen superior de porcentaje depende del ancho del contenedor, no de la altura). Para imágenes de tamaño aleatorio, puede hacer lo siguiente:
Solución de trabajo de JsBin: http://jsbin.com/ihilUnI/2/edit
fuente
Puede centrar una imagen, tanto horizontal como verticalmente, utilizando
margin: auto
un posicionamiento absoluto. También:fuente
Prueba este
fuente
.img-container
está absolutamente posicionado, esto es necesario para mantener la relación de aspecto cuadrado / altura dinámica.¡Aquí hay una técnica que le permite centrar CUALQUIER contenido tanto vertical como horizontalmente!
Básicamente, solo necesita dos contenedores y asegúrese de que sus elementos cumplan con los siguientes criterios.
El otro contenedor:
display: table;
El contenedor interior:
display: table-cell;
vertical-align: middle;
text-align: center;
El cuadro de contenido:
display: inline-block;
Si utiliza esta técnica, simplemente agregue su imagen (junto con cualquier otro contenido que desee utilizar) al cuadro de contenido.
Demo:
Ver también este violín !
fuente
Encontré este hilo en busca de una solución que:
Al probar algunas de las soluciones publicadas anteriormente, no encontré una que cumpla con todos estos criterios, por lo que armé esta simple que podría ser útil para otras personas que necesitan hacer lo mismo:
Ejemplo de trabajo en JSFiddle
fuente
Tratar
HTML
CSS
fuente
código HTML
<div class="image-container"> <img src=""/> </div>
código css
fuente
Haga otro div y agregue 'dummy' y 'img-container' dentro del div
Hacer HTML y CSS como sigue
En lugar del 100% para el 'contenedor receptivo', puede dar la altura que desee.
fuente