Iframe receptivo usando Bootstrap


100

Estoy usando Bootstrap.

Tengo un texto que contiene 2 o 3 videos incrustados basados ​​en iframes.

Estos datos se obtienen de la base de datos.

¿Cómo puedo hacer que estos iframes respondan?

Código de ejemplo:

<div class="row">

   <div class="col-lg-12 col-md-12 col-sm-12">

     SOME TEXT SOME TEXT SOME TEXT SOME TEXT
     SOME TEXT SOME TEXT SOME TEXT SOME TEXT

     <iframe src="http://youtube.com/...."></iframe>

     SOME TEXT SOME TEXT SOME TEXT SOME TEXT
     SOME TEXT SOME TEXT SOME TEXT SOME TEXT

     <iframe src="http://youtube.com/...."></iframe>


     SOME TEXT SOME TEXT SOME TEXT SOME TEXT
     SOME TEXT SOME TEXT SOME TEXT SOME TEXT

     <iframe src="http://youtube.com/...."></iframe> 

   </div>

</div>

Este es un dato dinámico. ¿Cómo puedo hacer que responda?


posible duplicado de hacer que un iframe sea receptivo
mpgn

1
Es bueno saber qué versión de Bootstrap. He respondido a esto con dos opciones.
Christina

Respuestas:


215

Opción 1

Con Bootstrap 3.2, puede envolver cada iframe en el contenedor de inserción de respuesta de su elección:

http://getbootstrap.com/components/#responsive-embed

<!-- 16:9 aspect ratio -->
<div class="embed-responsive embed-responsive-16by9">
  <iframe class="embed-responsive-item" src="…"></iframe>
</div>

<!-- 4:3 aspect ratio -->
<div class="embed-responsive embed-responsive-4by3">
  <iframe class="embed-responsive-item" src="…"></iframe>
</div>

opcion 2

Si no desea ajustar sus iframes, puede usar FluidVids https://github.com/toddmotto/fluidvids . Vea la demostración aquí: http://toddmotto.com/labs/fluidvids/

   <!-- fluidvids.js -->
    <script src="js/fluidvids.js"></script>
    <script>
    fluidvids.init({
      selector: ['iframe'],
      players: ['www.youtube.com', 'player.vimeo.com']
    });
    </script>

2
incapaz de disminuir la altura de iframe. He cambiado de 100%a 80%clase .embed-responsive iframe. Pero está dando espacio vacío. después del video. Cómo evitar este espacio.
SatyaTNV

¡FINALMENTE esto funciona perfectamente! Podría ser bueno incluir el obligatorio <p>Your browser does not appear to support iframes</p>entre las iframeetiquetas, pero me pregunto si eso es relevante en estos días ... gracias de nuevo, muchas soluciones (hacky) estuvieron cerca, ¡pero esto es perfecto!
svenevs

1
a la Opción 1: la URL de los documentos cambió a getbootstrap.com/docs/3.3/components/#responsive-embed
Alexander Schmidt

use una relación de aspecto e inclúyala para que funcione - >> <meta charset = "utf-8"> <meta name = "viewport" content = "width = device-width, initial-scale = 1"> <enlace rel = "stylesheet" href = " maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css "> <script src = " maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/… > y dentro de la etiqueta iframe -> frameborder = "0" style = "overflow: hidden; overflow-x: oculto; overflow-y: oculto; altura: 100%; ancho: 100%; posición: absoluta; arriba: 0px; izquierda: 0px; derecha: 0px; abajo: 0px; "altura =" 100% "ancho =" 100% "
krishna

24

Por favor, mira esto, espero que te sea de ayuda

<div class="row">
 <iframe class="col-lg-12 col-md-12 col-sm-12" src="http://www.w3schools.com">
 </iframe>
</div>

¡Gracias! Ugh, finalmente algo simple que realmente funciona.
Fatimaezzahra Rarhibou

13

La mejor solución que funcionó muy bien para mí es la que encontré en el siguiente enlace: https://bootstrapmaster.com/implement-responsive-youtube-vimeo-embed-iframe-twitter-bootstrap-3/

Tienes que: Copiar este código en tu archivo CSS principal,

.responsive-video {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 60px; overflow: hidden;
}

.responsive-video iframe,
.responsive-video object,
.responsive-video embed {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

y luego coloque su video incrustado en

<div class="responsive-video">
    <iframe ></iframe>
</div>

¡Eso es! Ahora puede usar videos receptivos en su sitio.


1
padding-bottom: 56.25%;hacer cosas raras
Emidomenge

9

Entonces, youtube emite la etiqueta iframe de la siguiente manera:

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

En mi caso, lo cambié a width = "100%" y dejé el resto como está. No es la solución más elegante (después de todo, en diferentes dispositivos obtendrás proporciones extrañas) Pero el video en sí no se deforma, solo el marco.


¿Responde de esa manera? Si es así, ¿mantendrá la relación de aspecto?
Csaba Toth

Agradable y sencillo. ¡Trabajó para mi! ¡Gracias!
Joe

Funciona para mí también. Manteniendo la altura sugerida (en su caso 315), pero cambie el ancho a "100%". Escala de forma responsable y funciona bien con las clases de columna de arranque.
BAERUS

4

Opción 3

Para actualizar el iframe actual

$("iframe").wrap('<div class="embed-responsive embed-responsive-16by9"/>');
$("iframe").addClass('embed-responsive-item');

0

Trabajando durante agosto de 2020

utilizar este

<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

usar una relación de aspecto

<div class="embed-responsive embed-responsive-4by3">
  <iframe class="embed-responsive-item" src="…"></iframe>
</div>

dentro de las opciones de uso de iframe

 <iframe class="embed-responsive-item" src="..."
  frameborder="0"
    style="
      overflow: hidden;
      overflow-x: hidden;
      overflow-y: hidden;
      height: 100%;
      width: 100%;
      position: absolute;
      top: 0px;
      left: 0px;
      right: 0px;
      bottom: 0px;
    "
    height="100%"
    width="100%"
  ></iframe>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.