如何在不损害HTML有效性的情况下消除FRAME之间的差距?

时间:2009-09-15 18:15:20

标签: html frame

我知道帧很糟糕。但是我必须再坚持一下。我的问题来自“frameset”元素的非标准“border”属性:

<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);

2 个答案:

答案 0 :(得分:2)

使用{strong> frame 标记上的frameborder属性,而不是border标记上的frameset。 {h}来自border标签的frameborderframeset}属性。{事实上,所有W3C的页面都在According值得一试。 frames可能有助于您查看。您还需要确保使用正确的DOCTYPE
在示例中:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">

答案 1 :(得分:2)

根据我的测试,这些应该有效:

对于Opera(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);