2

我知道框架很糟糕。但是,我必须再坚持一段时间。我的问题来自“框架集”元素的非标准“边框”属性:

<frameset border="0">
...
</frameset>

如果我不使用该属性,浏览器会在每帧之间放置一个间隙。如果我使用该属性,HTML 验证器会抛出有关“不支持的属性”的错误。

现在我听到你说“使用它并忽略验证器”,这很好。我想我可以忍受一个验证器警告,而且浏览器似乎也不太担心:)

我的问题主要是关于 HTML 诡计。如何将边框设置为 0 并保持浏览器兼容?将此视为未来类似问题的练习。例如我试过:

<frameset onload="this.border='0'">

它没有用。

我尝试在内部框架中使用样式表来设置“border:0;margin:0;padding:0”,它也不起作用。差距似乎来自一个未知的来源。

我想过用 Javascript 编写,例如:

document.write('<frameset border="0">');

但我有一种预感,它无论如何都不会验证。

你能想出一个替代的解决方案吗?


其他不起作用的解决方案:

  • @Donut:“frame”或“frameset”元素上的“frameborder”属性
  • @kangax: frameSetObj.setAttribute('border', 0);
4

2 回答 2

2

使用标签上的frameborder属性frame而不是标签border上的属性frameset根据HTML 规范,没有为标签定义border(或frameborder)属性。事实上,所有关于框架的 W3C 页面都值得一试。在那里找到的示例可能有助于查看。您还需要确保使用正确的. 在示例中:frameset
DOCTYPE

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
于 2009-09-15T18:17:28.307 回答
2

根据我的测试,这些应该可以工作:

对于歌剧(10):

frameSetObj.setAttribute("framespacing", "0");

对于 IE8:

frameSetObj.setAttribute("framespacing", "0");
//set rows and cols attributes again if the frameset already had them.
frameSetObj.setAttribute("rows", rows);
frameSetObj.setAttribute("cols", cols);

适用于 FireFox 3.5 和 Chrome 3

frameSetObj.setAttribute("frameborder", "0");
//same idea as IE8
frameSetObj.setAttribute("rows", rows);
frameSetObj.setAttribute("cols", cols);

总而言之,这段代码应该适用于所有浏览器:

frameSetObj.setAttribute("framespacing", "0");
frameSetObj.setAttribute("frameborder", "0");
frameSetObj.setAttribute("rows", rows);
frameSetObj.setAttribute("cols", cols);
于 2009-10-24T10:06:56.370 回答