【问题标题】:Responsive iframe with max width and height具有最大宽度和高度的响应式 iframe
【发布时间】:2014-02-08 15:34:49
【问题描述】:

我有一个包含图像和 iframe 的固定高度容器。为了使图像响应并防止垂直和水平溢出,我可以设置以下 CSS:

img {
    max-width: 100%;
    max-height: 100%;
}

这样可以确保纵向图像不会垂直溢出,而横向图像不会水平溢出。

对于 iframe,我使用“填充比率”technique,将包装元素的填充设置为 iframe 的纵横比(例如 56.25% 用于 16:9 视频):

.iframe-wrapper {
    position: relative;
    height: 0;
    padding-top: 56.25%;
    overflow: hidden;
}

.iframe-wrapper iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

虽然这意味着 iframe 会随着视口的宽度缩放,但如果我更改视口的高度,它的工作原理就会不同。本质上,我希望 iframe 模仿图像的工作方式。

【问题讨论】:

  • 我正在尝试完成几乎相同的工作,但是我没有固定的高度。我有图像和 iframe,我希望 iframe 能够模拟 max-width 对图像的作用。这段时间你找到解决办法了吗?

标签: css iframe responsive-design


【解决方案1】:

对于我的用途(在响应式网站上嵌入来自 Vimeo 的视频),这在我测试过的浏览器中效果很好:

@media screen and (max-width: 750px) {
    iframe {
        max-width: 100% !important;
        width: auto !important;
        height: auto !important;
    }
}

它不需要图像占位符,因此简单得多。

【讨论】:

  • 太棒了!
  • 我错过了什么吗?这对我不起作用。 iframe 不会像图像或视频标签那样保持 100% 宽度
【解决方案2】:

这段代码对我有用:

<div class="video-container"><iframe.......></iframe></div>

.video-container {
    position:relative;
    padding-bottom:56.25%;
    padding-top:30px;
    height:0;
    overflow:hidden;
}

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

来源:https://www.h3xed.com/web-development/how-to-make-a-responsive-100-width-youtube-iframe-embed

【讨论】:

  • 如果您不希望视频为 100% 宽度,这会出现各种问题,但例如50%
【解决方案3】:

这是我认为它可能对您有用的修复程序,但您必须在“填充率”技术上做出妥协,因为这不是必需的 ;)

HTML如下:

<div class="embeded-video">
      <img class="ratio-img" src="http://placehold.it/16x9" alt="16:9 Image" />
      <iframe src="//www.youtube.com/embed/I_dN9IpmOZU" frameborder="0" allowfullscreen align="center"></iframe>
    </div>

CSS如下:

.embeded-video {
    position: relative
}

.embeded-video .ratio-img {
    display: block;
    width: 100% !important;
    height: auto !important;
}

.embeded-video IFRAME {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

演示:http://codepen.io/anon/pen/MYbqgp?editors=110

【讨论】:

  • 如果视口“太短”(或视口太宽),该演示会溢出视口。
【解决方案4】:

我不确定是否可以让高度仅增长到最大高度,但可以限制高度并仍然保持纵横比。这是使它工作的聪明技术......我没有编写这段代码,但我使用了它,它似乎工作得很好:

https://codepen.io/shshaw/pen/uzlfh

在此处复制并粘贴(稍作修改)代码以供后代使用...(我的主要修改是使用vh 单位而不是百分比。)

/* Adapted from https://codepen.io/shshaw/pen/uzlfh - thanks Shaw! */

.responsive-embed {
  height: 45vh; /* Set height here */
  display: inline-block; /* Must be inline-block */
  position: relative; /* Keep the child element contained */
  
  /* min/max-width will break the aspect ratio, but otherwise work as expected */
  /*
  min-height: 200px;
  max-height: 400px;
  */
}

.responsive-embed .ratio {
  height: 100%; /* Our ratio canvas is expanded to as tall as the height set above. */
  width: auto; /* Allows the width to adjust based in the height, keeping the aspect ratio */
  visibility: hidden; /* Prevents non-transparent image or alt text from showing up */
  text-align: left;
}

.responsive-embed iframe {
  /* Force the child block to be same size as parent */
  position: absolute !important;
  top: 0 !important; left: 0 !important;
  width: 100% !important;
  height: 100% !important;
}
<div class="responsive-embed">
  <img class="ratio" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAJCAAAAAAeQfPuAAAAC0lEQVQYGWMYrAAAAJkAAWzZLOIAAAAASUVORK5CIIA=" alt="16x9">
  <iframe src="https://player.vimeo.com/video/20732587/?api=0&amp;portrait=0&amp;autoplay=0&amp;color=21abb9" width="100%" height="100%" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
</div>

【讨论】:

    【解决方案5】:

    以防万一这里有人使用(或考虑)UIkit,您只需添加 uk-responsive 属性即可解决此问题:

       <iframe uk-responsive src="...">
    

    就这么简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多