2011-10-22 55 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設置即時消息不使用)。我想不幸,我把它歸結爲一種解釋怪癖。它奇怪如何讓另一個兄弟姐妹可以解決這種情況。 –