2010-06-30 7 views
4

Je comprends que la hauteur d'une boîte en CSS est la hauteur du contenu, excluant la marge et le remplissage, mais pourquoi avec cet exemple, si vous décommentez la bordure: ligne dans la div contenant, fait la couleur de fond de la div étendre au-dessus du premier paragraphe tandis que si vous n'avez pas de frontière, il ne le fait pas?Pourquoi la bordure affecte-t-elle la taille du bloc conteneur dans CSS?

<html> 
<head> 
    <LINK REL=StyleSheet HREF="style.css" TYPE="text/css" MEDIA=screen> 
    <title></title> 
    <style type="text/css"> 
     #container { 
      background-color: green; 
      /* border: black solid 1px; */ 
     } 

     p { background-color: red; 
      margin-top:50px; 
      margin-bottom: 0px; 
      border: black dotted 3px; 
      } 
    </style> 
</head> 
<body> 
<div id="container"> 
    <p>first paragraph</p> 
    <p>second paragraph</p> 
</div> 
</body> 
</html> 

Répondre

2

Je comprends que la hauteur d'une boîte en CSS est la hauteur du contenu, à l'exclusion de la marge et le rembourrage

Faux: il comprend rembourrage et la bordure (sauf dans Microsoft Internet Explorer en raison d'un bug et maintenant pour des raisons de compatibilité (si vous utilisez le mode de rendu quirks)). Lire sur les CSS box model:

Le bord contenu entoure le rectangle donné par la largeur et la hauteur de la boîte

où le bord contenu est le bord de roulement autour de l'extérieur de la frontière.

+0

@Konrad Rudolph, il n'a pas la largeur et la hauteur de jeu à l'élément #container ainsi tailles sont inutiles . – eugeneK

+0

Mais pourquoi la présence ou l'absence de la bordure seule modifie-t-elle la quantité de vert d'arrière-plan visible au-dessus du premier paragraphe. Je veux comprendre le pourquoi ici - je n'essaie pas d'obtenir un résultat particulier. Merci! – user342492

+0

@aizuchi, vous avez beaucoup d'erreurs dans le code CSS. Il est difficile de dire pourquoi, sauf si vous corrigez une erreur. Le modèle de boîte (la façon dont le navigateur calcule la taille de certains éléments) est différent pour IE.6 (et ci-dessous) et d'autres navigateurs. Cela signifie que si vous donnez une largeur et une hauteur spécifiques, puis que vous appliquez une marge, en remplissant une bordure, chaque navigateur affichera différemment. Puisque vous ne nous avez pas fourni d'informations sur le navigateur que vous utilisez, nous ne pouvons pas vous aider autant que – eugeneK

0

La marge est à l'extérieur d'une bordure et le remplissage est à l'intérieur d'une bordure, de sorte que votre marge supérieure entraînerait l'existence de la marge au-dessus de la bordure. Si vous voulez le remplissage entre votre paragraphe et l'utilisation de bordure, pas de marge. La taille de la div sera déterminée par la marge, le remplissage et la bordure. Ils contribueront tous à la taille de la div.

1

@aizuchi,

Le premier de vos CSS comporte une erreur. Vérifiez pour "pic" droit à "marge-bas". Deuxièmement, ajoutez "overflow: hidden;" Pour l'élément #container, une fois que vous n'avez pas défini siez de l'élément parent, vous devez avoir cette balise pour dire à la parent quelle taille utiliser. #container utilisera la hauteur de l'élément enfant (#container), ce qui est probablement le problème dans votre CSS en plus de "pic". En troisième lieu, Google bug modèle dans IE6 pour comprendre la différence entre notre "bien-aimé" ie6 et d'autres navigateurs.

Quatrième de tous

il est préférable d'utiliser

<LINK rel="StyleSheet" href="style.css" type="text/css" media="screen" /> 

au lieu de

<LINK REL=StyleSheet HREF="style.css" TYPE="text/css" MEDIA=screen> 
+0

Erreur corrigée - merci! Mais je ne comprends toujours pas pourquoi la présence ou l'absence de la bordure modifie la quantité d'arrière-plan vert dans le conteneur div .... – user342492

+0

Avez-vous défini overflow: hidden; sur #container? – eugeneK

Questions connexes