2011-10-22 31 views
0

我有一个网站,我开始布局。问题出在footer_internal_boxfooter_box_bottom。尽管box_bottom位于internal_box后​​面的独立div部分,但它位于internal_box的底部。如果我改变footer_box_bottom的高度,它也会改变footer_internal_box的大小。IE 7/8/9上奇怪的CSS问题

它在Firefox中工作,但我找到了解决方法,我只是不明白为什么。

如果我把<div></div>放在​​ 行之前,那么它一切都按预期工作。现在我可以把它留在那里,但我想知道为什么会发生这种情况。 footer_box_bottom div应该对internal_box没有影响。

下面是代码reset.css和layout.css。目前text.css是空白的。

非常感谢!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title></title> 
<link href="styles/reset.css" rel="stylesheet" type="text/css" /> 
<link href="styles/layout.css" rel="stylesheet" type="text/css" media="screen" /> 
<link href="styles/text.css" rel="stylesheet" type="text/css" media="screen" /> 
</head> 

<body> 
<div id="container"> 
    <div id="header_box"> 
     <img src="images/logo.png" width="172" height="174" border="0" id="header_logo" /> 
     <div id="header_details_box"> 
     </div> 
     <div id="menu_box"> 
     </div> 
    </div> 
    <div id="mainpage_box"> 
     <div id="mainpage_content"> 
      blah<br/> 
     </div> 
     <div id="mainpage_box_bottom">&nbsp;</div> 
    </div> 
    <div id="footer_box"> 
     <div id="footer_box_top">&nbsp;</div> 
     <div id="footer_internal_box"> 
      <div id="footer_fade"> 
       <div id="footer_content"> 
        blah<br/> 
       </div> 
      </div> 
     </div> 
     <div id="footer_box_bottom">&nbsp;</div> 
    </div> 
</div> 
</body> 
</html> 

的reset.css如下

@charset "utf-8"; 

html, body, div, span, 
applet, object, iframe, 
h1, h2, h3, h4, h5, h6, p, blockquote, pre, 
a, abbr, acronym, address, big, cite, code, 
del, dfn, em, font, img, ins, kbd, q, s, samp, 
small, strike, strong, sub, sup, tt, var, 
dd, dl, dt, li, ol, ul, 
fieldset, form, label, legend, 
table, caption, tbody, tfoot, thead, tr, th, td { 
margin: 0; 
border: 0; 
font-weight: inherit; 
font-style: inherit; 
font-size: 100%; 
line-height: 1; 
font-family: inherit; 
text-align: left; 
vertical-align: baseline; 
-moz-box-sizing:border-box; 
box-sizing:border-box; 
padding:0; 
} 
a img, :link img, :visited img { 
     border: 0; 
} 
table { 
    border-collapse: collapse; 
    border-spacing: 0; 
} 
ol, ul { 
    list-style: none; 
} 
q:before, q:after, 
blockquote:before, blockquote:after { 
    content: ""; 
} 

而且layout.css中是

body 
{ 
background-image:url(../images/header_bg.jpg); 
background-repeat:repeat-x; 
background-color: #F2F2F2; 
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; 
} 

.clear 
{ 
clear:both; 
} 

#container 
{ 
width: 970px; 
margin: auto; 
position: relative; 
top: 0px; 
left: 0px; 
} 

#header_box 
{ 
width: 100%; 
position: relative; 
top: 0px; 
left: 0px; 
} 

#header_details_box 
{ 
width: 100%; 
height: 165px; 
} 

#header_logo 
{ 
position: absolute; 
top: 17px; 
left: 0px; 
} 

#menu_box 
{ 
width: 100%; 
height: 38px; 
} 

#mainpage_box 
{ 
width: 100%; 
} 

#mainpage_content 
{ 
padding-left: 20px; 
padding-right: 20px; 
background-image:url(../images/mainbox_mid.png); 
background-repeat: repeat-y; 
background-position: top left; 
} 

#mainpage_box_bottom 
{ 
width: 970px; 
height: 11px; 
background-image:url(../images/mainbox_bottom.png); 
background-repeat: no-repeat; 
background-position: bottom left; 
} 

#footer_box 
{ 
width: 100%; 
} 

#footer_internal_box 
{ 
padding-left: 10px; 
padding-right: 10px; 
background-image:url(../images/mainbox_mid.png); 
background-repeat: repeat-y; 
background-position: top left; 
} 

#footer_box_top 
{ 
height: 11px; 
background-image:url(../images/mainbox_top.png); 
background-repeat: no-repeat; 
background-position: top left; 
} 

#footer_box_bottom 
{ 
height: 11px; 
background-image:url(../images/mainbox_bottom.png); 
background-repeat: no-repeat; 
background-position: bottom left; 
} 

#footer_fade 
{ 
background-image: url(../images/bottombox_fade.png); 
background-repeat: repeat-x; 
background-position: bottom left; 
background-color: #ffffff; 
} 

#footer_content 
{ 
padding: 10px; 
} 
+0

虽然这也许是真的,但它是主要的之一,所以我确实需要确保网站的作品。我有兴趣看看它是一个渲染错误还是与我的CSS问题。 –

+0

和jsfiddle呢? – SergeS

回答

1

这样做的原因很简单,其实。一个<div>应该是一个页面上的一个部门,一个单独的内容演示部分。这实际上在W3C标准中描述了什么是<div>。然而,这是一个模棱两可的描述。当W3C指示正确使用图形元素来进行图形显示时,情况更是如此。后来,W3C最终澄清说,内容呈现不一定需要其中的内容,但仍然认为内容呈现是分离的。基于定义,IE不正确。

每个浏览器都以自己的方式处理不明确的规范,同时尝试将自己的价值添加为浏览器。微软处理含糊不清的定义的方法是要求<div>中的某些内容要呈现。这是基于它对元素的W3C规范的极端字面解释。根据开发人员的需求,IE不正确。处理IE的解决方案是放置一个不间断的空间,因为它不是空白空间,而是隐形内容。

目前,W3C将<div>定义为grouping element。这意味着它可以将其他元素绑定在一起,形成一个有吸引力或逻辑结构。标准中使用<div>与W3C定义相矛盾。因此,这意味着任何用户代理(浏览器)都可以在他们认为合适的时候处理这​​个问题,包括不渲染它,这可能会完全影响DOM布局,尤其是对于其兄弟姐妹。这里的真正问题在于,关于W3C标准合规性,两者都是可行的解决方案。关于开发者标准,IE可能想重新思考他们如何解决这个问题。

重要提示:

这个答案只是解决了“为什么”,而不是支持或反对上述任何组织实体。答案并不是主张一种技术或对另一种技术的解释,只是简单地介绍事实。请不要使用这个答案来引起与我,提问者或任何其他贡献者对此问题的争论。

+0

你必须喜欢标准没有被定义的方式。也许我误解了,但我可以看到div组是如何构成一个逻辑结构的,我没有看到如何基于对标准的任何解释,两个div部分没有联系在一起,一个是另一个的孩子,可以互相影响。鉴于目前我基本上有两个

stuff 1
stuff2
东西的div如何改变东西1的大小等? –

+0

我上次编辑有一个说明。他们是兄弟姐妹......是兄弟姐妹,它们本质上是相关的,特别是当所有事情都静止不动时。根据他们描述的关系来完成页面的渲染。由于默认定位是静态的,这意味着兄弟之前和兄弟之后会影响当前节点的属性。 –

+0

他们是兄弟姐妹,我不知道兄弟姐妹,静态定位,会重叠(没有使用CSS设置即时消息不使用)。我想不幸,我把它归结为一种解释怪癖。它奇怪如何让另一个兄弟姐妹可以解决这种情况。 –