No necesita javascript para esto. Puedes usar CSS puro.
Un porcentaje de relleno se interpreta en relación con el bloque contenedor ancho. Combínelo con la posición: absoluta en un elemento secundario, y puede colocar casi cualquier cosa en una caja que conserve su relación de aspecto.
HTML:
<div class="aspectwrapper">
<div class="content">
</div>
</div>
CSS:
.aspectwrapper {
display: inline-block; /* shrink to fit */
width: 100%; /* whatever width you like */
position: relative; /* so .content can use position: absolute */
}
.aspectwrapper::after {
padding-top: 56.25%; /* percentage of containing block _width_ */
display: block;
content: '';
}
.content {
position: absolute;
top: 0; bottom: 0; right: 0; left: 0; /* follow the parent's edges */
outline: thin dashed green; /* just so you can see the box */
}
El display: inline-block
deja un poco de espacio extra debajo del borde inferior de la caja .aspectwrapper
, por lo que otro elemento a continuación no se ejecutará al ras contra ella . El uso de display: block
lo eliminará.
Gracias a this post por la punta!
Otro enfoque se basa en el hecho de que los navegadores respetan la relación de aspecto de una imagen al cambiar el tamaño sólo su anchura o altura. (Voy a dejar que Google generar una imagen transparente de 16x9 con fines de demostración, pero en la práctica se iba a usar su propia imagen estática.)
HTML:
<div class="aspectwrapper">
<img class="aspectspacer" src="http://chart.googleapis.com/chart?cht=p3&chs=160x90" />
<div class="content">
</div>
</div>
CSS:
.aspectwrapper {
width: 100%;
position: relative;
}
.aspectspacer {
width: 100%; /* let the enlarged image height push .aspectwrapper's bottom edge */
}
.content {
position: absolute;
top: 0; bottom: 0; right: 0; left: 0;
outline: thin dashed green;
}
proporcioné la solución para esto aquí: http: // stackoverflow.com/questions/643500/html-ie-stretch-image-to-fit-preserve-aspect-ratio/19390489 # 19390489 – tommybananas
¿Puede aceptar una respuesta a continuación? Parece una pena que algunas buenas respuestas no sean aceptadas – gillytech
Ninguna de las respuestas a esta pregunta logra el resultado deseado. Preservar la relación de aspecto es trivial, pero obtener la relación de aspecto correcta Y siempre ajustado o más pequeño que el área visible en ambas direcciones es más complicado. – atomless