我要问这个问题,只是因为我想更好地理解这个问题。
我正在处理一个页面,该页面包含一堆生成大量 HTML 表单的遗留 JSP 代码,使用表格来保存可见的输入字段。但是,在许多情况下,JSP 会在任何无效的 HTML 结构内部<table>
而不是在任何内部呈现隐藏的输入。<td>
这些类型的 HTML 结构错误在此页面中随处可见。
这个页面的 JSP 代码已经存在了大约 10 年,没有出现过这个无效 HTML 的问题,开发人员很清楚这个问题,但从来没有任何理由去修复它。现在我们正试图让页面看起来更现代,我正在使用的东西之一是位置:固定。
无论如何 - 为了演示这里的问题是一个非常简单的 HTML 页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
<html>
<head><style>.fixedTable { position: fixed; background-color:red; } </style></head>
<body>
<!-- this table gets an invalidly placed hidden input tag outside of the row -->
<table class="fixedTable" style="top:100px;left:100px;">
<input type="hidden" name="value" value="test">
<tr><td>Test 1</td></tr>
</table>
<!-- this table is properly structured -->
<table class="fixedTable" style="top:130px;left:100px;">
<tr><td><input type="hidden" name="value" value="test">Test 2</td></tr>
</table>
</body>
</html>
所有浏览器(IE 7 除外)都在顶部显示 2 个小红框,距离顶部 100 像素,距离左侧 100 像素。
IE 7 将第一个表(测试 1)的位置完全错误,并将其放在页面的左上角。IE 8 没问题。
这里发生了什么?
好的——当然,我可以修复 HTML 结构——但我仍然想知道发生了什么,然后也许我可以找到一个解决方法,而不必重构大量的 JSP 代码。
为了增加混乱......
对样式进行一点小改动:
.fixedTable td { position: relative }
现在文本“Test 1”出现在正确的位置......但红色背景仍在左上角......
也可能看起来很疯狂,但我们公司确实正式支持 IE 7,并且很大一部分人仍在使用它。不幸的是,我们与许多采用过时的 IT 政策的大型企业客户打交道。