2011-10-22 4 views
0

J'ai un site web que j'ai commencé à mettre en page. Le problème est dans les footer_internal_box et footer_box_bottom. Même si le box_bottom se trouve dans une section div distincte après le internal_box, il se trouve au bas de la . Si je modifie la hauteur du footer_box_bottom, il modifie également la taille de footer_internal_box.Strange CSS sur IE 7/8/9

Cela fonctionne dans Firefox, mais j'ai trouvé un moyen de le réparer, je ne comprends tout simplement pas pourquoi. Si je mets <div></div> avant la ligne <div id="footer_box_bottom">&nbsp;</div> , alors tout fonctionne comme prévu. Maintenant, je peux laisser cela là, mais j'aimerais savoir pourquoi cela arriverait. Le div footer_box_bottom ne devrait avoir aucun effet sur le internal_box.

Voici le code, reset.css et layout.css. Le fichier text.css est vide à l'heure actuelle.

Merci beaucoup!

<!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> 

Le reset.css est la suivante

@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: ""; 
} 

Et le layout.css est

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

Bien que ce soit peut-être vrai, c'est l'un des principaux, je dois donc faire en sorte que le site fonctionne. Je suis intéressé de voir si c'est un bug de rendu ou un problème avec mon css. –

+0

et qu'en est-il de jsfiddle? – SergeS

Répondre

1

La raison est simple, en fait. Un <div> est censé être une division sur une page, une section distincte de la présentation du contenu. Ceci est en fait décrit dans les normes W3C pour ce que <div> représente. Ceci, cependant, était une description ambiguë. Ceci est devenu encore plus le cas lorsque W3C a indiqué qu'une utilisation appropriée consistait à utiliser des éléments graphiques pour la présentation graphique. Plus tard, le W3C a finalement clarifié que la présentation de contenu n'exigeait pas nécessairement du contenu, mais maintenait qu'un <div> est une séparation de la présentation du contenu. Basé sur la définition, IE n'est pas incorrect.

Chaque navigateur a traité des spécifications ambiguës à sa manière tout en essayant d'ajouter sa propre valeur en tant que navigateur. L'approche de Microsoft vis-à-vis de la définition ambiguë consistait à exiger qu'un certain niveau de contenu figure dans le <div> pour qu'il soit rendu. Cela était basé sur leur interprétation extrêmement littérale de la spécification W3C sur l'élément. Basé sur le besoin du développeur, IE est incorrect. La solution pour traiter l'IE est de placer un espace insécable, car ce n'est pas un espace blanc, mais un contenu invisible.

Actuellement, le W3C définit le <div> comme grouping element. Cela signifie qu'il peut lier d'autres éléments pour créer une structure attrayante ou logique. Votre utilisation du <div>, bien que standard, contredit la définition du W3C. Par conséquent, cela signifie que tout agent utilisateur (navigateur) peut traiter ce problème comme il le juge approprié, y compris ne pas le rendre, ce qui peut affecter la mise en page DOM, en particulier en ce qui concerne ses frères et sœurs. Le vrai problème ici est que, en ce qui concerne la conformité aux normes du W3C, les deux sont des solutions viables. En ce qui concerne les normes de développement, IE pourrait vouloir repenser comment ils abordent ce problème.

Note importante:

Cette réponse porte simplement le « pourquoi » et n'est pas pour ou contre l'une des entités organisationnelles mentionnées ci-dessus. La réponse ne préconise pas une technique ou une interprétation plutôt qu'une autre et présente simplement les faits.S'il vous plaît, n'utilisez pas cette réponse pour susciter un débat avec moi, le demandeur ou tout autre contributeur sur cette question.

+0

Vous devez aimer la façon dont les normes n'étaient pas assez définies. Peut-être que je me méprends, mais je peux voir comment la div divise les éléments en une struc- ture logique, je ne vois pas comment s'appuyer sur une interprétation des standards, deux divisés qui ne sont pas liés entre eux, l'un étant un enfant de l'autre, peut affecter l'autre. Étant donné que pour l'instant je ai essentiellement deux

stuff 1
stuff2
comment le div de stuff2 modifie la taille etc de choses 1? –

+0

Il y a une clarification dans ma dernière édition. Ils sont frères et soeurs ... étant frères et soeurs, ils sont intrinsèquement liés, surtout quand tout est positionné de façon statique. Le rendu d'une page est fait en fonction de leur relation décrite. Comme le positionnement par défaut est statique, cela signifie que le frère avant et le frère après affectent les attributs du noeud actuel. –

+0

Ils sont frères et soeurs, je n'étais pas au courant que les frères et sœurs, positionnés statiquement, se chevaucheraient toujours (sans utiliser les paramètres css im ne pas utiliser). Je suppose que je l'ai mis au point d'interprétation. C'est étrange comment juste avoir un autre frère peut résoudre la situation. –