2011-01-27 94 views
0

这是一个奇怪的问题,那已经耗费了我很多小时的时间。这里有一张照片,因为我只能放1个链接:http://www.screencast.com/t/byVmPE6H。接下来的解释。IE8中的CSS填充消失/ jquery

基本上,我需要实现的是照片中的第1点。

请注意,左侧填充大于右侧填充。初始填充属性为:

padding: 12px 15px;(即12px垂直填充,15px水平)。

然后,通过jQuery,在页面加载时,我设置了左填充一些值,像这样:

$(links[0]).attr("style","padding-left : "+padding+"px;");(我可能已经使用的CSS(),效果和问题保持不变)

这在所有浏览器中都能很好地工作,除IE之外,你猜对了。我不是在谈论版本6或7,但只有IE 8.所以,在IE 8中,在页面加载时,我从上面的照片中获得第2点。

请记住,这只发生在页面加载。当我将鼠标指针放在链接上时(即触发mouseover事件),正确的填充将跳回原位并且看起来很完美,就像在第一个链接中一样(实际上第一张图片来自IE8!)。

消除上面的jquery行不会触发相同的行为,15px填充是好的。在链接上没有注册“鼠标悬停”的事件处理程序。这里只有这个CSS属性的鼠标悬停:

#navigation li.first:hover a{

background: transparent url(../images/menu_on_left.png) left top no-repeat;

}

(即只背景图像的变化,绝对没有别的)

所以,当页面加载,如果我使用jquery来改变左边的填充,右边的消失。在鼠标悬停时,正确的填充将弹出回到视图中。我无法解释为什么会发生这种情况。如果我找不到解决方案,我实际上正在考虑计算所有菜单项的位置并将其排列在绝对位置。听起来真的很糟糕,我知道。

任何人都可以启发我吗?

回答

0

我终于解决了它,并小心:IE浏览器是如此愚蠢,如果你有一个浮动元素的列表,并且你改变了第一个的正确填充,另一个不会通过向右移动做出反应,他们只是站在那里。所以我所做的就是:

  1. 删除所有其他菜单项(通过克隆(),然后删除()不幸的是,我没有的jQuery 1.4提供否则我就已经使用了分离(),但它的工作原理就好),

  2. 改变填充通过CSS()

  3. 重新插入其他菜单项。现在他们感觉到第一个项目上的新填充并正确定位。

疯了,不是吗?只是另一个IE对我的仇恨原因...

我希望这可以帮助任何人,祝你有美好的一天!