高度为 100% 的全屏 iframe

IT技术 javascript html css iframe html-frames
2021-01-24 20:27:51

所有浏览器都支持 iframe height=100% 吗?

我使用 doctype 作为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

在我的 iframe 代码中,如果我说:

<iframe src="xyz.pdf" width="100%" height="100%" />

我的意思是它实际上会占用剩余页面的高度(因为顶部有另一个固定高度为 50px 的框架)所有主要浏览器(IE/Firefox/Safari)都支持吗?

另外关于滚动条,即使我说scrolling="no",我可以在 Firefox 中看到禁用的滚动条...如何完全隐藏滚动条并自动设置 iframe 高度?

6个回答

您可以使用框架集作为先前的答案状态,但如果您坚持使用 iFrames,则以下 2 个示例应该有效:

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.youraddress.com" frameborder="0" style="overflow:hidden;height:100%;width:100%" height="100%" width="100%"></iframe>
</body>

替代:

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.youraddress.com" 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>
</body>

要使用 2 个选项隐藏滚动,如上所示:

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.youraddress.com" frameborder="0" style="overflow:hidden;height:150%;width:150%" height="150%" width="150%"></iframe>
</body>

使用第二个示例进行破解:

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.youraddress.com" frameborder="0" style="overflow:hidden;overflow-x:hidden;overflow-y:hidden;height:150%;width:150%;position:absolute;top:0px;left:0px;right:0px;bottom:0px" height="150%" width="150%"></iframe>
</body>

为了隐藏 iFrame 的滚动条,父级被设置overflow: hidden为隐藏滚动条,并且 iFrame 被设置为 150% 的宽度和高度,这迫使滚动条在页面之外,并且由于主体没有滚动条人们可能不希望 iframe 超出页面的边界。这会隐藏全宽 iFrame 的滚动条!

@Boris Zbarsky 是的,谢谢你让我知道!我现在更新了帖子!!@hmthr 你关于双标签的第一个问题是因为早期的浏览器确实采用了“高度”和“宽度”标签,但不能很好地与样式标签配合使用!关于 IE 错误,我希望您坚持使用该案例的第一个代码。
2021-03-11 20:27:51
要使 iframe 正确使用 100%,父级需要为 100%。在较新的文档类型中,html 和 body 标签不会自动 100%。当我为 html 和 body 添加 height:100% 然后它完美地工作。所以,我认为这个问题的正确答案是 rudie 的答案,只是我必须保留我的 xhtml 文档类型。另外,请注意溢出规则不是必需的。然后滚动条按预期工作 - 自动。
2021-03-18 20:27:51
仅供参考“HTML <frameset> 标签。在​​ HTML5 中不受支持。” - 参考。w3schools.com/tags/tag_frameset.asp
2021-03-22 20:27:51
也只有 IE 没有占用 100% 的高度(需要大约 200px 的高度)...FF 和 Safri 占用所有剩余的高度..
2021-03-23 20:27:51
听起来不错..不过只有一个问题......为什么我们需要使用 style="height:100%;width:100%;" 当我们说 iframe height="100%" width="100%"
2021-04-04 20:27:51

创建全屏的 3 种方法iframe


  • 方法 1 -视口百分比长度

    支持的浏览器中,您可以使用视口百分比长度,例如height: 100vh.

    其中100vh表示视口的高度,同样100vw表示宽度。

    示例在这里

    body {
        margin: 0;            /* Reset default margin */
    }
    iframe {
        display: block;       /* iframes are inline by default */
        background: #000;
        border: none;         /* Reset default border */
        height: 100vh;        /* Viewport-relative units */
        width: 100vw;
    }
    <iframe></iframe>


  • 方法 2 - 固定定位

    这种方法相当直接。只需设置的定位fixed元素,并添加height/width100%

    示例在这里

    iframe {
        position: fixed;
        background: #000;
        border: none;
        top: 0; right: 0;
        bottom: 0; left: 0;
        width: 100%;
        height: 100%;
    }
    <iframe></iframe>


  • 方法三

    对于这最后的方法,只设置height了的body/ html/iframe元素100%

    示例在这里

    html, body {
        height: 100%;
        margin: 0;         /* Reset default margin on the body element */
    }
    iframe {
        display: block;       /* iframes are inline by default */
        background: #000;
        border: none;         /* Reset default border */
        width: 100%;
        height: 100%;
    }
    <iframe></iframe>

添加display: block可以防止出现双滚动条
2021-03-17 20:27:51
我最终使用了选项 1 的变体……我使用了宽度:100% 和高度:100vh,因为我拉的源非常宽,而且 iframe 包含在 div 中。优秀的解决方案。谢谢你。
2021-03-25 20:27:51
可以在这里找到另一种方法(使用 padding-top: 100%; /* 1:1 Aspect Ratio */):w3schools.com/howto/howto_css_responsive_iframes.asp
2021-03-31 20:27:51

1. 将您的 DOCTYPE 更改为不那么严格的内容。不要使用 XHTML;这很愚蠢。只需使用 HTML 5 doctype 就可以了:

<!doctype html>

2. 您可能需要确保(取决于浏览器)iframe 的父级具有高度。和它的父母。和它的父母。等等:

html, body { height: 100%; }
仅设置 body 在 Chrome 中有效,但在其他浏览器中无效。
2021-03-10 20:27:51
2021-03-26 20:27:51
对我来说,重要的部分是 html 和 body 标签需要高度:100%。谢谢。
2021-03-29 20:27:51

我遇到了同样的问题,我正在将一个 iframe 拉入一个 div。试试这个:

<iframe src="http://stackoverflow.com/" frameborder="0" scrolling="yes" seamless="seamless" style="display:block; width:100%; height:100vh;"></iframe>

高度设置为 100vh,代表视口高度。此外,宽度可以设置为 100vw,但如果源文件具有响应性(您的框架将变得非常宽),您可能会遇到问题。

在花了比我愿意承认的更多时间来解决这个问题之后,这正是我所需要的。除了网站,我使用了另一个 HTML 文件,它需要对视口高度进行微调,现在可以开始了。谢谢!
2021-03-12 20:27:51
据我所知,任何浏览器都不支持无缝
2021-03-19 20:27:51
我使用这个解决方案得到了一个双滚动条,但否则它就起作用了
2021-03-26 20:27:51

这对我来说非常有效(仅当 iframe 内容来自同一域时):

<script type="text/javascript">
function calcHeight(iframeElement){
    var the_height=  iframeElement.contentWindow.document.body.scrollHeight;
    iframeElement.height=  the_height;
}
</script>
<iframe src="./page.html" onLoad="calcHeight(this);" frameborder="0" scrolling="no" id="the_iframe" width="100%" ></iframe>
花了一点时间在 Wordpress 中完成这项工作,我只是在我的插件中添加了一个短代码。奇迹般有效。
2021-03-19 20:27:51
这仅iframe src在 与父页面位于同一域时才有效,否则您将在 上收到权限被拒绝错误contentWindow.document
2021-03-27 20:27:51
有用。但问题是它不会重新计算每个内部 iframe 回发的高度。有什么解决方法吗?
2021-04-02 20:27:51