如何使用Twitter Bootstrap实现响应式的Youtube嵌入iframe?

29

目前我在一个基于 Twitter Bootstrap 的网站中使用以下 HAML 代码嵌入 YouTube 视频:

.row
  .span12
    %iframe.span11{ :height => "720", :frameborder => "0", :allowfullscreen => nil, :src => v.video_url }

很遗憾,由于高度固定,当浏览器调整大小或在移动设备上进行操作时,这种方法的响应效果并不理想。

有什么更好的(更具动态性和响应性)实现嵌入Youtube iframe的方式吗?

6个回答

78

尝试使用这个“响应式视频CSS”,它对我来说非常完美:https://gist.github.com/2302238

<section class="row">
  <div class="span6">
    <div class="flex-video widescreen"><iframe src="https://www.youtube-nocookie.com/embed/..." frameborder="0" allowfullscreen=""></iframe></div>
  </div>
  <div class="span6">
    ...
  </div>
</section>

谢谢Bart!在一个响应式的WP博客中运行得非常好。 - Giulio Prisco
1
这个脚本没有起作用,但是这个jQuery插件为我完成了工作:https://github.com/marclarr/FitVids.js - Michael Osl
这个很好用啊,我希望能够把它作为 Bootstrap 的默认功能。 - alexander7567
我已经添加了一个答案,提供了一个简单的Javascript片段,可以自动添加@Bart所述的代码。请参见https://dev59.com/Bmct5IYBdhLWcg3wV8Ck#20585329 - Caumons

12

我实现了一个纯CSS的解决方案,效果非常好。

这里是我的视图中使用从YouTube生成的iframe代码的示例。

<div class="video-container">
  <iframe width="300" height="168" src="http://www.youtube.com/embed/MY__5O1i2a0" frameborder="0" allowfullscreen></iframe>
</div>

这里是另一个视图中的代码示例,它不使用iframe而是使用从AutoHtml gem生成的body字段,该字段可用于将不同类型的视频链接嵌入网页。如果您有一个模型需要将链接动态嵌入同一网页中,则这很有用。

<div class="video-container">         
  <span style="text-align: center;"><%= @livevideo.body_html %></span>
</div>

这是 CSS 代码:

.video-container { 
   position: relative; /* keeps the aspect ratio */ 
   padding-bottom: 56.25%; /* fine tunes the video positioning */ 
   padding-top: 60px; overflow: hidden;
}

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

这里是YouTube视频,详细解释了代码的工作原理,并提供了一两篇博客文章进行查看。

http://www.youtube.com/watch?v=PL_R3zEjqEc


虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Matt

3

Bootstrap 3.2.0有许多改进和大量的错误修复。Bootstrap是用于构建具有响应式设计的网站的框架,但它缺少对响应式

一个响应式YouTube 16:9视频的HTML代码,根据所显示页面的宽度自动调整其大小,如下所示:

在您的容器(可能是DIV)上添加class="embed-responsive embed-responsive-16by9"

1
如果使用Bootstrap,以下方法无疑是实现响应式嵌入的最简单方式:
<!-- 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>

文档可以在这里找到:http://getbootstrap.com/components/#responsive-embed


1

为了自动化@Bart的回答,我创建了一个简单的Javascript片段,它会自动将iframe元素包装在<div class="flex-video">中。

$(document).ready(function() {
  $('iframe').each(function() {
    $(this).wrap('<div class="flex-video"></div>');
  });
}); 

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接