如何使iframe可调整大小?

ami*_*pez 34 css iframe css3 resizable

我们有这个小组项目,我被指派做一个iframe可调整大小.自上周以来,我一直在阅读很多论坛帖子,我发现iframe自己无法调整大小.

有没有办法让我的iframe可调整大小?

Nic*_*van 50

这可以在纯CSS中完成,如下所示:

iframe {
  height: 300px;
  width: 300px;
  resize: both;
  overflow: auto;
}
Run Code Online (Sandbox Code Playgroud)

将高度和宽度设置为您想要的最小尺寸,它似乎只是增长,而不是缩小.

实例:https://jsfiddle.net/xpeLja5t/

该技术除了IE的所有主流浏览器很好的支持.

  • 这个解决方案仍然有效吗?我没有运气。 (5认同)
  • 这不适用于Firefox 53.0. (4认同)
  • 我测试了通过[iframify](https://github.com/edenspiekermann/iframify)创建的`iframe [srcdoc]:与Chr 54一起工作(它可以增长但不缩小,+ 1)但不适用于Fx 49: (相关[关于Bugzilla @ Mozilla的请求功能](https://bugzilla.mozilla.org/show_bug.cgi?id=680823) (2认同)
  • 这适用于 Chrome 和 Safari。不适用于 Internet Explorer、Edge 或 Firefox(即使 Firefox 支持调整大小属性)。 (2认同)
  • 感谢新的 flexbox 功能 [现在有一个纯 CSS 解决方案](/sf/answers/4256244191/),它适用于 Firefox 和 Chrome。 (2认同)

小智 14

请按照以下步骤调整iframe的大小:

  1. 创建一个可调整大小的div.例如:

    <div class="resizable"></div>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为div样式应用样式标记.

    .ui-resizable-helper {
        border: 1px dotted gray;
    }
    .resizable {
        display: block;
        width: 400px;
        height: 400px;
        padding: 30px;
        border: 2px solid gray;
        overflow: hidden;
        position: relative;
    }
    iframe {
        width: 100%;
        height: 100%;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 包括jQuery和jQuery UI

    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/start/jquery-ui.css"rel="stylesheet" />
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 执行 Resizable

    $(function () {
        $(".resizable").resizable({
            animate: true,
            animateEasing: 'swing',
            animateDuration: 500
        });
    });
    
    Run Code Online (Sandbox Code Playgroud)


Bri*_*and 9

使用jQuery UI ...

HTML:

<div class="resizable" style="width: 200px; height: 200px;">
    <iframe src="http://www.example.com/" style="width: 100%; height: 100%;"></iframe>
</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

$(".resizable").resizable({
    start: function(event, ui) {
        ui.element.append($("<div/>", {
            id: "iframe-barrier",
            css: {
                position: "absolute",
                top: 0,
                right: 0,
                bottom: 0,
                left: 0,
                "z-index": 10
        }
        }));
    },
    stop: function(event, ui) {
        $("#iframe-barrier", ui.element).remove();
    },
    resize: function(event, ui) {
        $("iframe", ui.element).width(ui.size.width).height(ui.size.height);
    }
});
Run Code Online (Sandbox Code Playgroud)

jsFiddle:http://jsfiddle.net/B5vHQ/97/

说明:

由于jQuery UI的resizable插件无法直接在iframe上运行,因此将iframe包装在div中并调整div的大小.resize上面代码中的事件可确保iframe调整大小以匹配div.

但是这个方法还有一个问题 - iframe不会将鼠标移动事件传递给它们的父元素.要解决这个问题,在调整大小期间start,stop事件会使用另一个元素覆盖iframe,以便resizable插件可以正确地跟踪鼠标移动.

出于某种原因,为了调整大小工作,必须给包装器div一个明确的大小.在大多数情况下,这意味着iframe需要相同的大小集,以便从一开始就匹配div的大小.


Sth*_*the 7

如果您还没有找到解决方案,我已经取得了成功:

jQuery的:

$("#my-div-frame-wrapper").resizable({
    alsoResize : '#myframe'
});
Run Code Online (Sandbox Code Playgroud)

HTML:

<div id="my-div-frame-wrapper">
    <iframe id="myframe"></iframe>
</div>
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助


Tin*_*ino 7

花了一个多小时才找到使我找到可行解决方案的东西:

  • 纯 CSS 应有的样子
  • 适用于所有具有完全 flexbox 支持的现代浏览器,如 Firefox、Chrome 等。
  • 但不适用于 IE10 及以下的旧浏览器

.resizer { display:flex; margin:0; padding:0; resize:both; overflow:hidden }
.resizer > .resized { flex-grow:1; margin:0; padding:0; border:0 }

.ugly { background:red; border:4px dashed black; }
Run Code Online (Sandbox Code Playgroud)
<div class="resizer ugly">
  <iframe class="resized" src="https://wikipedia.org/"></iframe>
</div>
Run Code Online (Sandbox Code Playgroud)

在 Chrome 中,这个解决方案在我这边仍然存在一些问题。使用运行代码片段,然后使用整(因此如果IFRAME嵌入在其他IFRAMEs 中,它似乎不起作用)。此外,调整大小手柄(在右下角)显示得有点微妙,调整大小通常会停止跟随鼠标。

在 Firefox 中,您也可以iframe使用纯 CSS调整now 的大小。

维基百科是我发现的唯一一个没有针对iframe-embedding 的CSP 的 URL 。如果他们添加了一个,则iframe变空并且您的浏览器的控制台将记录 CSP 错误。在这种情况下,请使用一些有效的 URL 更新我的答案。谢谢。


uad*_*ive 2

我发现的最佳解决方案是将 iframe 的宽度和高度设置为 100% 并将 iframe 放在 div 标签内。这是使用 CKEditor 等工具看到的基本解决方案。

例如,我在Utah's Disclosures Site上有一些 jQuery 对话框可以执行此操作。如果您单击 or 的报告或声明,您将看到一个弹出的对话框,其中包含一个 iframe。希望能帮助到你。