1

我有一堆绝对定位的元素通过javascript生成到一个div中。每个元素的位置在垂直方向上相差 2px。然而,IE 每 3 个元素添加一个额外的垂直像素,然后每 2 个元素添加一个,然后每 3 个元素返回。

等等,一张图片解释了它:

IE 做什么

我把后面的行为块涂成红色,正确的涂成绿色。Chrome 正确呈现它(Firefox 也是如此):

Chrome 做什么

当我使用 IE 开发者工具时,我可以看到 CSS 设置正确:

CSS

我试过添加zoom:1元素,但这似乎没有什么区别。

添加元素的代码是这样的:

var element = document.createElement("a");
element.style.fontSize = "6pt";
element.style.width = "20px";
element.style.height = "20px";
element.style.position = "absolute";
element.style.backgroundColor = "red";
element.style.zoom = "1";
element.style.display = "block";
var tofs = (columns * 2 + r * 20 - (c * 2));
var lofs = (c * 14 + (r + offset) * 9);
trace(c + "," + r + ": " + lofs + "," + tofs);
element.style.top = tofs + "px";
element.style.left = lofs + "px";
element.style.textIndent = "-10000px";
element.style.overflow = "hidden";
element.innerText = t;
element.selectable = "no";
setBackgroundForSeat(t, element);
target.append(element);

当检测到 IE 时,我尝试每 3 个然后 2 个元素调整偏移量,但这不起作用:与下一个元素的实际视觉差异变为1px而不是所需的2px(没有 hack 的地方3px)。

我已经没有想法了。有人吗?

更新:这是一个描述行为的 JS fiddle。http://jsfiddle.net/uGHDh/5/

4

1 回答 1

0

我知道 IE 工具栏告诉您它正确设置了 CSS,但它可能对实际值撒谎。从您的代码看来,您将获得浮点值,并且 IE 在提取对象时似乎会产生舍入错误。

您可以在使用它们之前尝试将像素值转换为整数,但这可能会在所有浏览器中产生不需要的结果。

于 2013-01-11T15:42:29.253 回答