HTML5和边框


82

我在HTML5文档上有一个iframe。验证时,我收到一条错误消息,告诉我上的属性iframe frameBorder已过时,请改用CSS。

我在frameBorder="0"这里具有此属性,因为这是我能弄清楚如何摆脱IE中边界的唯一方法,我border:none;在CSS中尝试了运气不好。是否有兼容的方法来解决此问题?

谢谢。

Answers:


58

HTML 5不支持诸如frameborder,scrolling,marginwidth和marginheight之类的属性(HTML 4.01支持这些属性)。相反,HTML 5规范引入了Seamless属性。Seamless属性使嵌入式框架看起来像是作为包含文档的一部分呈现的一样。例如,边框和滚动条将不会出现。

根据MDN

frameborder 自HTML5以来已过时

该值1(默认值)在此框架周围绘制边框。该值0将删除此框架周围的边框,但是您应该改用CSS属性border来控制边框。

就像上面的引言所说,您应该使用CSS删除边框;
内联(style="border: none;")或样式表(iframe { border: none; })中。

话虽如此,似乎没有一个不使用的iframe提供程序frameborder="0"。甚至YouTube仍使用该属性,甚至不提供样式属性来使iframe向后兼容,因为不再支持frameborder。可以肯定地说该属性不会很快消失。这给您留下3个选择:

  1. 继续使用frameborder,以确保它可以正常使用(目前)
  2. 使用CSS做“正确的”事情
  3. 同时使用。尽管这不能解决不兼容问题(就像选项1一样),但确实可以,并且可以在以前和将来的所有浏览器中使用

至于这个已有十年历史的答案的先前状态:

seamless很短的时间内就支持该属性(某些浏览器甚至根本不支持),因此MDN甚至没有将其列为不推荐使用的功能。不要使用它,也不要被下面的评论所迷惑。


31
那么有没有办法在CSS中产生frameBorder = 0?
JD Isaacks 2010年

1
真的很烦人,我使用的是最新版的Chrome,但它不起作用。虽然frameborder =“ 0”可以。
RGBK 2010年

1
再来看一遍,Seamless可以在chrome ff和safari上工作。像这样将其放入iframe中:<iframe
Seamless

8
您应该使用border-width: 0px;,但恐怕这也不能与跨浏览器兼容iframesseamless仍然不是所有浏览器都支持!这是您仅需接受的少数HTML5问题之一。使用frameborder="0"并进行验证!
所罗门·克洛森

2
seamless已从HTML5规范中删除,因此将不再支持它。@ForTheWatch的答案现在是最好的。
rvighne '16

48

根据此处的其他文章,最好的解决方案是使用CSS条目

style="border:0;"

6
我认为他们建议: border-width: 0pxTBH。 border: none;不管用。
所罗门·克洛森

5
@ cnotethegr8-它在IE和Opera(当前版本)中不起作用,尚未在Chrome,Safari和/或Firefox中进行测试。我测试了糟糕的浏览器,因为如果它可以在这些浏览器中工作,那么几乎可以肯定它可以在其他浏览器中工作。
所罗门·克洛森

2
@SolomonClossonI test for the crappy browsers, because if it works in them, than it is almost sure to work in the others.天哪,我的天哪。如果要确保您的应用程序可在浏览器中运行,则必须在浏览器中进行简单而简单的测试。没有保证,只有怪癖。
乔纳森·杜马因

1
快速说明是0px中的单位是多余的。我更喜欢保证金:0; 或border:0; 因为0px == 0em == 0%== 0涉及CSS。
csharpforevermore

1
现在seamless已从规格中删除,这是唯一正确的答案
rvighne '16

17

由于该frameborder属性仅对于IE才是必需的,因此还有另一种解决验证器的方法。这是一种轻量级的方式,不需要Javascript或任何DOM操作。

<!--[if IE]>
   <iframe src="source" frameborder="0">?</iframe>
<![endif]-->
<!--[if !IE]>-->
   <iframe src="source" style="border:none">?</iframe>
<!-- <![endif]-->

3
这是对所提问题的最佳答案。但是,遵守HTML5的目标(正在开发中,并且可能会并且将随时更改,恕不另行通知)没有用,特别是当它使您使用的技巧不符合此类目的而没有其他目的并且使代码更复杂时,尤其如此。 。frameBorder="0"如果您不希望在线框周围有边框,最好继续使用。
Jukka K. Korpela 2014年

千真万确。只是要注意,由于frameborder attr纯粹是表示性的,因此无论标准发生了多大变化,它都不会回到HTML标准的可能性很大。
李斯特先生,2014年


@ JukkaK.Korpela等待,什么?那为什么OP会收到验证错误?抱歉,您链接到的页面是frameframeset,不是iframe。该属性在元素上过时iframe;参见w3.org/TR/html5/obsolete.html#attr-iframe-frameborder
Lister先生,2014年

发出验证错误是因为已宣布该功能已过时,这实际上并不意味着发布消息。该属性仍在HTML5中定义,根据HTML5 CR,期望浏览器继续支持该属性。
Jukka K. Korpela 2014年


2

通过在XHTML中粘贴目标属性,如何使用相同的技术来“欺骗”带有Javascript的验证器<a onclick="this.target='_blank'">

  • onsomething =“ this.frameborder ='0'”

<iframe onload = " this.frameborder='0' " src="menu.html" id="menu"> </iframe>

还是getElementsByTagName]("iframe")1为页面上的所有iframe添加此属性?

还没有测试过,因为我做了一些事情,这意味着在IE 9中没有任何东西可以正常工作!:)因此,当我在整理... :)


0

我发现了一个很好的解决办法,这将允许它工作IE7这里。它绕过了frameBorder属性的验证器,但保留了CSS供以后的浏览器使用,如该文章所述。


使用JavaScript生成iframe?这样做会进一步延迟iframe内容的加载时间,从而消除CSS警告消息。如已接受的答案所述,建议改用seamless属性。
猛禽

是的,但是无缝的在IE7中对我不起作用,因此是我的帖子。
2014年

-5
style="border:none; scrolling:no; frameborder:0;  marginheight:0; marginwidth:0; "

11
对于它的价值:这是无效的代码。滚动,frameborder,marginheight / width不是CSS属性。
Patrik Affentranger 2013年
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.