HTML iframe-禁用滚动


84

我的网站上有以下iframe:

<iframe src="<<URL>>" height="800" width="800" sandbox="allow-same-origin allow-scripts allow-forms" scrolling="no" style="overflow: hidden"></iframe>

它具有滚动条。
如何摆脱它们?


5
赫尔曼-我认为scrolling="no"应该起作用。是HTML5吗?
Yagnesh Agola

@Yagnesh我已将iframe的样本发布给您,但它无法正常工作。
米哈尔赫尔曼

我已经尝试过使用您的代码,并且无需滚动即可正常工作。请检查iframe是否在任何div下。
Yagnesh Agola

也许iframe中的<body>是添加滚动条,而不是<iframe>?
oriadam

Answers:


162

不幸的是,我认为仅通过HTML和CSS属性完全符合HTML5是不可能的。幸运的是,大多数浏览器仍然支持该scrolling属性(该属性已从HTML5规范中删除)。

overflow并不是HTML5的解决方案,因为唯一错误地支持HTML5的现代浏览器是Firefox。

当前的解决方案是将两者结合起来:

<iframe src="" scrolling="no"></iframe>
iframe {
  overflow: hidden;
}

但是随着浏览器的更新,这可能变得过时了。您可能需要检查一下以获取JavaScript解决方案:http : //www.christersvensson.com/html-tool/iframe.htm

编辑:我已经检查过并且scrolling="no"可以在IE10,Chrome 25和Opera 12.12中使用。


1
HTML5不支持<iframe>滚动属性。改用CSS。资料来源:w3schools.com/tags/att_iframe_scrolling.asp
Linus,

4
@LinusAn这就是我的答案的第一行。问题在于,尽管浏览器不能完全丢弃它,因为它会破坏HTML4网站,因此该scrolling属性仍然是可行的,尽管是无效的选项。
James Donnelly 2014年

没错,但是在Chrome浏览器中,这会破坏iframe中元素的scrollIntoView。请参阅code.google.com/p/chromium/issues/detail?id=137214
Peter Brand

@Linus-不幸的是,它不起作用,并且在它起作用的任何浏览器中都不合格:溢出不应应用于按钮,表单元素和iframe之类的替换元素。
Jimmy Breck-McKye 2015年

3
@DaniSpringer此解决方案旨在剪切内容。加载无法滚动的iframe不会自动调整整个子页面的大小以适合指定的iframe尺寸。
Nate

20

我用这个CSS解决了同样的问题:

    pointer-events:none;

8
它似乎阻止了实际的滚动尝试,只是阻止了视觉滚动条……
LWC 2015年

6
这将防止在iframe上触发任何鼠标事件,包括滚动。范围太广,无法成为一个可靠的解决方案
Tom McKenzie 2016年

我必须使用它来防止在foreignobjectSVG图像中嵌入的iframe中滚动(只是overflow: hidden不起作用)
蒂姆

这不会停止通过鼠标滚轮(在Chromium中)滚动。另外,我相信OP希望实际上隐藏滚动条。您应该将答案移至stackoverflow.com/questions/2712034,因为我认为这可以部分解决该问题。
EoghanM

谢谢,至少iframe滚动已禁用。
瑟伦

11

似乎使用

html, body { overflow: hidden; }

IFrame中

编辑:当然,这仅在您有权访问iframe的内容(以我为例)时才有效


1
不过,在使用iframe时,您通常无法访问其中的内容,因为它通常用于在另一个域中包含内容。
蒂姆·马隆

2

将所有内容设置为:

#yourContent{
 width:100%;
height:100%;  // in you csss
}

事实是,iframe滚动是由内容设置的,而不是由iframe本身设置的。

使用CSS和HTML中的iframe将内部内容设置为100%


1

我在当前的浏览器(Google Chrome版本60.0.3112.113(正式版本)(64位))中尝试了scrolling =“ no”,但此操作无效。但是,scroll =“ no”确实起作用。可能值得尝试

<iframe src="<<URL>>" height="800" width="800" sandbox="allow-same-origin allow-scripts allow-forms" scroll="no" style="overflow: hidden"></iframe>

1
实际上,进一步研究这个问题,我认为原因是我将height =“”更改为比我尝试加载的实际iFrame长。因此,使高度足够长以至于使滚动变得毫无意义,实际上使滚动条对我而言消失了。我正在尝试显示整个页面,这可能与您要实现的页面不同。
Zach Imholte

这更像是评论,而不是问题的实际答案。

1
谢谢JDV!我是StackOverflow的新手,所以我尝试发表评论,但没有足够的声誉点或所谓的声誉。所以我同意,应该是一条评论。感谢您的指导!
Zach Imholte

在获得必要的代表之前,您可以通过多种方式做出贡献。stackoverflow.com/help/whats-reputation

0

为您的iframe广告代码添加此样式。

overflow-x:hidden;
overflow-y:hidden;

8
Overflow在HTML5 iFrame上不起作用。唯一错误地支持此功能的浏览器是Firefox。
James Donnelly

1
@JamesDonnelly实际上他没有指定它是html5,这就是为什么我们使用溢出
sasi 2013年

0

由于“溢出:隐藏;” 属性无法在iFrame本身上正常工作,但在将其应用于iFrame的页面正文时,似乎可以提供结果,我尝试这样做:

iframe body { overflow:hidden; }

令人惊讶的是,它确实与Firefox兼容,删除了那些烦人的滚动条。

不过,在Safari中,iframe的内容和边框之间出现了一条奇怪的2像素宽的透明线。奇怪。


0

只需添加样式如下所示的iframe。我希望这可以解决问题。

第一种选择:

<iframe src="https://www.skyhub.ca/featured-listing" style="position: absolute; visibility: hidden;" onload="this.style.position='static'; this.style.visibility='visible';" scrolling="no" frameborder="0" marginheight="0px" marginwidth="0px" height="400px" width="1200px" allowfullscreen></iframe>

第二个选择:

<iframe src="https://www.skyhub.ca/featured-listing" style="display: none;" onload="this.style.display='block';" scrolling="no" frameborder="0" marginheight="0px" marginwidth="0px" height="400px" width="1200px" allowfullscreen></iframe>

0

这对我有用:

<style>
*{overflow:hidden!important;}
html{overflow:scroll!important;}
</style>

注意:如果您需要在其他任何元素中使用滚动条,也请{overflow:scroll!important;}在该元素中添加css



-1

低于html5版本

iframe {
    overflow:hidden;
}

在html5中

<iframe seamless="seamless"  ....>


iframe[seamless]{

   overflow: hidden;
}

但尚不正确支持


2
根据thisthis,该seamless属性已从规格中删除。
蒂姆·马隆

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.