【问题标题】:iframe's frameborder attribute - html5iframe 的 frameborder 属性 - html5
【发布时间】:2014-11-22 09:54:50
【问题描述】:

我正在阅读我的 HTML 书籍,它指出 HTML5 不支持 iframe 的滚动和 frameborder 属性。书中声明如下代码:

<iframe
    src="http://maps.google.co.uk/maps?q=moma+new+york&amp;output=embed"
    width="450"
    height="350"
    frameborder="0"
    scrolling="no">
</iframe>

如果 HTML5 不支持 frameborder,frameborder 怎么还能工作?如果我不放入该 frameborder="0" 行,浏览器会在图像周围加载一个框架,而 frameborder="0" 行则取出该框架。我认为 HTML5 不支持此属性?

同时,滚动似乎遵循 HTML5 不支持它的规则,因为该行根本没有区别(无论我将其设置为 0 还是 1)。滚动条也不显示。

我现在正在学习 HTML,但这对我来说太奇怪了。有人可以帮助我澄清一下吗?我在 Firefox 和 Chrome 中都对此进行了测试。

【问题讨论】:

  • 我在 Firefox 和 chrome 中都测试过
  • 你能分辨出哪个版本吗?
  • 如果您正在寻找如何进行滚动,我认为这两个链接可能会有所帮助......如果有帮助请告诉我

标签: html iframe doctype


【解决方案1】:

这本书弄错了。规范(或者,在这种情况下,草案规范)不“支持”元素或属性;浏览器可以。规范定义元素和属性,它们提出了一致性条款,说明符合标准的浏览器必须支持某某元素和属性。这通常不排除符合标准的浏览器也支持其他元素和属性的可能性。此外,浏览器可能不符合要求;事实上,严格来说,可能没有浏览器符合任何 HTML规范或草案(尽管一致性可能“足够好”)。

frameborder 和HTML5 的情况下,HTML5 提议的建议规定浏览器期望支持该属性。第 10.4.3 条Attributes for embedded content and images 说,某些 CSS 规则“应作为表示性提示应用”,它们包括以下内容:

iframe[frameborder=0], iframe[frameborder=no i] { border: none; }

这意味着如果iframe 元素的frameborder 属性值为0no(不区分大小写),则这对应于该元素上的CSS 设置border: none(定义为具有特异性0,因此元素上的任何显式 CSS 设置 border 都会覆盖它)。

如果这听起来很奇怪,请参阅Conformance requirements 部分。 HTML5 有双重标准,它禁止作者/文档使用某些结构,但要求或推荐浏览器(和其他用户代理)支持它们。所以如果你使用frameborder,你的文档是不合格的。然而,它“预计”会以特定方式得到支持。

情况原则上与scrolling 属性类似。它的expected effect 是值onscrollyes 导致滚动条(如overflow: scroll),值offnoscrollno 阻止滚动条;和值 auto 在内容不适合时会导致滚动条(默认值)。但是,Firefox、Chrome、IE 似乎都没有无条件支持导致滚动条的值,只有 Firefox 支持所有阻止滚动条的值,而 Chrome 和 IE 仅支持 no

这是可以理解的,因为scrolling=no 是浏览器传统上支持的属性。其他值或多或少是 HTML5 草案中的一项发明,可能应该涵盖一些实际使用或支持的值。

这样做的底线是scrolling=no 有效。即使在内容不需要时也会导致滚动条,scrolling=yes 在实践中没有用(相应的 CSS 设置有效)。

【讨论】:

  • 感谢Jukka如此详细的解释,我现在明白了。所以作为代码的作者,我们在顶部声明的 DOCTYPE 声明只是说明我们的代码将坚持 html5 标准(或尽我们所能),如果我们碰巧犯了不符合 100% 的错误到它,那么我们的代码是不合格的......但是有一个不合格的代码对 html5 有惩罚或影响吗?
  • @JackJohnson,文档类型字符串仅影响 a) 验证 b) 标准选择与怪癖模式。不符合项本身没有任何影响。
  • 问题:所以浏览器;即使它们都是最新版本,它们在选择采用什么规则方面都可能存在细微差别,对吗?虽然可能允许某些操作,但对于另一种浏览器可能不是这样?即使两个浏览器版本都是最新的?有没有地方可以详细了解当前浏览器之间的差异?以及 Web 开发人员如何解决所有这些问题? :\
  • @JackJohnson,是的,浏览器存在差异,甚至是奇怪的差异。没有最终参考,但经常引用caniuse.com,这是有充分理由的;但它侧重于对现代功能的支持,而不是遗留的东西。 MDN 也是一个很好的资源,但是例如developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe 按照 HTML 4 描述 scrolling,而不描述浏览器支持。
  • 知道了。你的回答更有意义
【解决方案2】:

HTML5 不支持 frameborder 属性。使用 CSS 而是。

frameborder 属性指定是否显示边框 一个。

提示:最好不要指定边框,并使用 CSS 改为应用边框。

http://www.w3schools.com/tags/att_iframe_frameborder.asp

HTML5 and frameborder

HTML5 : Iframe No scrolling?

http://www.maxdesign.com.au/2011/03/10/iframe-scrollbars-and-html5/

【讨论】:

  • 这似乎根本无法回答问题。
  • 是的,你的答案似乎更可靠....无论如何,我在尝试为他回答时,我自己在这里学到了一些关于 frameborder 的新东西...
【解决方案3】:

如果HTML5不支持frameborder,frameborder怎么还能工作?

因为 HTML 4 定义了 frameborder 并且浏览器并没有停止支持它。

不过,您仍然应该使用 CSS。

【讨论】:

  • 样式元素不属于与标记混合。从长远来看,它们比单独的样式表更难维护。
  • 是的,我知道样式应该在 css 中完成。关于这个问题......我想如果我将我的代码声明为 html5,那么浏览器只会将 html5 规则应用于它:\ 另外,如果浏览器仍然支持 html4,这就是 frameborder 仍然有效的原因,滚动不不过。太奇怪了。
猜你喜欢
  • 1970-01-01
  • 2014-12-04
  • 2011-06-15
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 2012-11-04
  • 2016-08-19
  • 1970-01-01
相关资源
最近更新 更多