Esto es realmente posible sin JS!
La clave es hacer uso de un <img>
, que es un replaced element, y por lo tanto, si solo configura la altura, su ancho se establecerá automáticamente para preservar la relación de aspecto intrínseca de la imagen.
Por lo tanto puede hacer lo siguiente:
<style>
.container {
position: relative;
display: inline-block; /* shrink wrap */
height: 50%; /* arbitrary input height; adjust this */
}
.container > img {
height: 100%; /* make the img's width 100% of the height of .container */
}
.contents {
/* match size of .container, without influencing it */
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
</style>
<div class="container">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">
<div class="contents">
Put contents here.
</div>
</div>
Si quería .contents
tener una proporción de 4: 3, entonces sería en lugar ajustar la altura de la img a 133%, por lo que la anchura de la img y por lo tanto de .contents
sería 133% de la altura de .container
.
en vivo de demostración de 1: 4 Formato: http://jsbin.com/afecej/1/edit (con comentarios adicionales de código)
En caso de que se esté preguntando, los datos img URI es un 1x1 px transparent gif). Si la imagen no tiene una relación de aspecto 1: 1, deberá ajustar los valores de altura que configure de forma correspondiente.
Véase la respuesta de @ Josh continuación. Es posible. –