Contact

c/ Orquídeas, 19,

Maracena, Granada

CSS: Haciendo cualquier elemento escalable (proporcionalmente)
09/08/2017 by Capy

Hola! hoy les vengo con un caso de bastante común en estos días de mobile en el que tenemos un vídeo, div, iframe o algun otro tag HTML que necesitamos que a medida que el espacio en el que se encuentra se reduzca o agrande, dicho elemento se expanda pero manteniendo su proporción inicial.

Un típico ejemplo es el de incrustar un vídeo de Youtube. Nos piden que al incrustar un vídeo en un editor de texto como por ejemplo CKeditor, que se expanda al 100% del área de texto.

Problema

El problema es que los vídeos de Youtube vienen con el tamaño ya definido. Les pongo un ejemplo de un vídeo embebido:

<iframe width="560" height="315" src="https://www.youtube.com/embed/jNQXAC9IVRw" frameborder="0" allowfullscreen></iframe>

Como todos sabemos solo las imágenes (<img/>) son capaces de mantener su aspect ratio a medida que la agrandamos, pero un iframe como el de youtube no va a hacerlo. Si le das un width de 100% y un height auto, se va a estirar al 100% del espacio disponible pero no va a crecer a lo alto de forma proporcional.

Solución

Hay una técnica muy extendida que se basa en meter dicho iframe dentro de un div y jugando con la propiedad padding, posiciones y alguna cosita mas llegamos a convertir el vídeo en un elemento que crece de forma proporcional. 

Mira este ejemplo (redimensiona la ventana para verlo en acción o entra a Codepen para probarlo)

See the Pen Example pure youtube iframe keeping aspect ratio via CSS by Front.id (@frontid) on CodePen.

Ves como uno de los dos vídeos ya se estira de forma proporcional? Pues esa es la solución en acción.

PERO

Como el cálculo hay que hacerlo a mano y también tienes que andar poniendo nuevo CSS para cada cosa que quieras hacer escalable me hice un JS que ya se encarga de hacerlo por nosotros usando la técnica comentada anteriormente:

See the Pen jQuery Aspect Ratio Keeper by Front.id (@frontid) on CodePen.

Uso

Instala el plugin:

// O NPM
npm install jquery-aspect-ratio-keeper --save
// O Yarn
yarn add jquery-aspect-ratio-keeper
// O Bower
bower install jquery-aspect-ratio-keeper

Y úsalo

$('iframe').aspectRatioKeeper()

Y ya el JS se encarga de crear un wrapper con todo el CSS necesario ;)

Chau!