Iframe réactif utilisant Bootstrap

100

J'utilise Bootstrap.

J'ai un texte qui contient 2 ou 3 vidéos d'intégration basées sur des iframes.

Ces données sont extraites de la base de données.

Comment puis-je rendre ces iframes réactifs?

Exemple de code:

<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>

Il s'agit d'une donnée dynamique. Comment puis-je le rendre réactif?

New Co
la source
duplication possible de Making an iframe responsive
mpgn
1
Il est bon de noter quelle version de Bootstrap. J'ai répondu à cela avec deux options.
Christina

Réponses:

215

Option 1

Avec Bootstrap 3.2, vous pouvez envelopper chaque iframe dans le wrapper responsive-embed de votre choix:

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>

Option 2

Si vous ne souhaitez pas envelopper vos iframes, vous pouvez utiliser FluidVids https://github.com/toddmotto/fluidvids . Voir la démo ici: 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>
Christina
la source
2
impossible de diminuer la hauteur de iframe. J'ai changé de 100%la 80%classe .embed-responsive iframe. Mais donne un espace vide. après la vidéo. Comment éviter cet espace.
SatyaTNV
ENFIN cela fonctionne parfaitement! Cela pourrait être bien d'inclure l'obligation <p>Your browser does not appear to support iframes</p>entre les iframebalises, mais je me demande si c'est encore pertinent de nos jours ... merci encore, de nombreuses solutions (hacky) étaient proches, mais c'est parfait!
svenevs
1
à l'option 1: l'URL de la documentation a été modifiée pour getbootstrap.com/docs/3.3/components/#responsive-embed
Alexander Schmidt
utilisez un format d'image et incluez-le pour le faire fonctionner - >> <meta charset = "utf-8"> <meta name = "viewport" content = "width = device-width, initial-scale = 1"> <link rel = "stylesheet" href = " maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css "> <script src = " maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/… > et dans la balise iframe -> frameborder = "0" style = "overflow: hidden; overflow-x: caché; overflow-y: caché; hauteur: 100%; largeur: 100%; position: absolue; haut: 0px; gauche: 0px; droite: 0px; bas: 0px; "height =" 100% "width =" 100% "
krishna
24

S'il vous plaît, vérifiez ceci, j'espère que cela vous aidera

<div class="row">
 <iframe class="col-lg-12 col-md-12 col-sm-12" src="http://www.w3schools.com">
 </iframe>
</div>
Mohamed
la source
Je vous remercie! Ugh enfin quelque chose de simple qui fonctionne réellement.
Fatimaezzahra Rarhibou
13

La meilleure solution qui a très bien fonctionné pour moi est celle que j'ai trouvée dans le lien ci-dessous: https://bootstrapmaster.com/implement-responsive-youtube-vimeo-embed-iframe-twitter-bootstrap-3/

Vous devez: Copier ce code dans votre fichier 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%;
}

puis placez votre vidéo intégrée dans

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

C'est tout! Vous pouvez désormais utiliser des vidéos réactives sur votre site.

coup de soleil
la source
1
padding-bottom: 56.25%;faire des trucs bizarres
Emidomenge
9

Ainsi, YouTube donne la balise iframe comme suit:

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

Dans mon cas, je l'ai juste changé en width = "100%" et laissé le reste tel quel. Ce n'est pas la solution la plus élégante (après tout, dans différents appareils, vous obtiendrez des ratios étranges) Mais la vidéo elle-même ne se déforme pas, juste le cadre.

Julien
la source
Est-ce réactif de cette façon? Si c'est le cas, conservera-t-il le rapport hauteur / largeur?
Csaba Toth
Sympa et simple. A travaillé pour moi! Merci!
Joe
Fonctionne aussi pour moi. Gardez la hauteur suggérée (dans votre cas 315), mais changez la largeur en "100%". S'adapte de manière réactive et fonctionne bien avec les classes de colonnes bootstrap.
BAERUS
4

Option 3

Pour mettre à jour l'iframe actuelle

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

Travailler en août 2020

utilisez ceci

<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>

utiliser un seul rapport hauteur / largeur

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

dans les options d'utilisation d'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>
Krishna
la source