IE8 CSS 相对定位会产生额外空白

3
我遇到了一个问题,就是当我给一个 div 添加 Position:relative; 属性时,它会出现类似白色边框或额外的空白区域,如下图所示:enter image description here 如果我移除该属性,边框会移到父元素上,而父元素也有 Position:relative;,这种情况只在IE8中出现。相关代码如下:
<div class="content clearfix">
    Some content goes here
         <div class="block">
               <div class="block_content" style="display: block;">
                 Some content goes here
              </div>
          </div>
 </div>

CSS(层叠样式表):
.content {
min-height: 100%;
height: 100%;
position: relative;
width:100%;
background-color:#ebebeb;
}
.block_content {
display:none;
position:relative;
margin: 25px 20px 15px 20px;
}
.block{
      overflow:hidden;
    width:58%;
    padding-bottom:60px;
float:right;
position:relative;
margin-right:10%;
background: rgb(222,222,222); /* Old browsers */
background: -moz-linear-gradient(top,  rgba(222,222,222,1) 0%, rgba(255,255,255,1) 0%, rgba(222,222,222,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(222,222,222,1)), color-stop(0%,rgba(255,255,255,1)), color-stop(100%,rgba(222,222,222,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top,  rgba(222,222,222,1) 0%,rgba(255,255,255,1) 0%,rgba(222,222,222,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top,  rgba(222,222,222,1) 0%,rgba(255,255,255,1) 0%,rgba(222,222,222,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top,  rgba(222,222,222,1) 0%,rgba(255,255,255,1) 0%,rgba(222,222,222,1) 100%); /* IE10+ */
background: linear-gradient(to bottom,  rgba(222,222,222,1) 0%,rgba(255,255,255,1) 0%,rgba(222,222,222,1) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#dedede',GradientType=0 ); /* IE6-9 */

            box-shadow: 6px 6px 14px #333333;
        -moz-box-shadow:6px 6px 14px #333333;
    -webkit-box-shadow: 6px 6px 14px #333333;
    }

演示链接: http://bank.benseno.com.tr/Sunus.html 任何帮助都将不胜感激


你尝试过使用 clear:both 吗?不确定是否有帮助,但可能是问题所在。 - DiederikEEn
我想我做了,会再试一次以确保。 - ImadBakir
是的,还是一样,没有帮助 :-( - ImadBakir
1
.content 的 z-index 值为负数,原因不明。它在 ie.css 中定义。当我禁用它时,就不会出现白色边框了。但是我只能在 IE8 模式下测试 IE10,而不能使用原始的 IE8。 - a better oliver
1
这很奇怪...如果(调试中),我取消选中/重新选中此内容:'body * {visibility:hidden;}',整个页面都会消失并被黑色背景替换,但白色“边框”仍然存在。到底是怎么回事。但是行为取决于所选的DIV...(?)仍在寻找解决方法,希望我们能帮助您解决这个奇怪的问题... - Arkana
显示剩余7条评论
3个回答

3

嗯,嗯,嗯,我想我知道那个奇怪的边框是从哪里来的了。

它来自于这个元素:

.maroon:before {
    border: 4px solid #FFFFFF;
    bottom: 0;
    content: "";
    display: block;
    left: 0;
    position: absolute; 
    right: 0;
    top: 0;
    z-index: -1;
}

如果您删除content:"";,则不再看到该边框。
似乎IE8会对父元素造成一些混乱。因此,如果您更改父元素的position:relative或删除它,则IE8会将此样式应用于前一个relative元素。我不知道这是否可能是由于您应用于实现旋转和其他效果的filter造成的问题...抱歉信息不完整,至少我们可以确定问题所在...我会继续研究,但现在也许您或其他用户可以帮助解决它。

老兄,这个操作真是太顺利了 :-) 非常感谢你的努力,期待你完整的“答案”能够获得声誉 :D - ImadBakir
我很高兴能够帮忙!和“那个不可命名的人”浏览器相关的 CSS 问题真的是让人噩梦连连!;) - Arkana
是的,我通常不支持低于IE 9的浏览器,我讨厌它,但我不得不这样做。 - ImadBakir

1
问题出在layout.css文件中的这一行(第480行):
.maroon:before{
    border: 4px solid #FFF;
    bottom: 0;
    content: "";
    display: block;
    left: 0;
    position: absolute;
    right: 0;
    top: 0;
    z-index: -1;
}

移除边框和内容,或者更改类名。


请问...我的答案有什么不同吗? - Arkana
@Arkana 不算太重要。我们两个差不多同时找到答案。我不知道你已经回答了。 - Dom

1

由于Web浏览器以非常独特的方式处理默认CSS属性,因此在开始开发之前重置您的CSS始终是一个好习惯。在我的测试中,我能够通过应用Eric Meyers的重置CSS技术来解决问题,但重要的是要注意它仅适用于提供的代码是文档中唯一存在的环境。

从您提供的示例网站中可以看出,您已经使用了CSS重置解决方案,但您没有使用专为HTML 5页面设计的CSS重置(例如该网站)。因此,我的建议是您使用HTML5 Doctor CSS Reset。它基于Eric Meyer的解决方案,您可以在此处获取:http://www.cssreset.com/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接