2011-04-12 1 views
2

J'ai un div qui contient un lien:Quelqu'un pourrait-il expliquer les marges qui s'effondrent? Je les trouve extrêmement ennuyeux

<div id="like_bar"><a href="#" onclick="return false;" id="like"></a></div> 

Avec un peu de CSS:

#like_bar{ 
    width:140px; 
    height:26px; 
    background:url('bar.jpg'); 
} 
#like{ 
    display:block; 
    width:20px; 
    height:20px; 
    margin:3px 36px; 
    background:url('mini_img.png'); 
} 

Le lien est placé en haut de la barre et les marges sur le lien sont appliqués à la barre.
C'est embêtant.


Quelqu'un pourrait-il expliquer ces marges d'effondrement, comment les éviter et à quoi elles servent?

+0

Je ne suis pas sûr de ce que vous voulez dire par l'effondrement des marges. Avez-vous une capture d'écran de la façon dont il semble s'il vous plaît? Est-ce Padding votre après au lieu de Margin sur le #like? – Pete

+0

Référence: http://www.w3.org/TR/CSS21/box.html # collapsing-margins – BoltClock

+0

Lisez-les ici: http://www.w3.org/TR/CSS21/box.html#collapsing-margins –

Répondre

3

Il y a plusieurs façons de résoudre ce problème.

Peut-être le plus facile pour vous serait ceci:

#like_bar { 
    overflow: hidden 
} 

Autres façons suivantes:

  • Ajouter une padding
  • Ajouter un border (même border: 1px solid transparent est suffisant)
  • float la élément
  • position: absolute
  • Et, comme dans l'extrait ci-dessus, définissez overflow à une valeur autre que la valeur par défaut visible.

Vous avez également demandé:

ce qu'ils sont utilisés pour

Un cas d'utilisation commune est la balise <p>.

Voir: http://jsfiddle.net/thirtydot/tPaTY/

Sans marge effondrements, certaines choses deviendraient ennuyeux.

+0

Excellente réponse! Merci! –

1

Parce que je suis paresseux, je vais juste faire un lien vers quelques ressources:

My answer here explique pourquoi le modèle de boîte est la façon dont il est, ce qui est lié à la marge de l'effondrement étant inclus.

Le w3c css spec définit le comportement de réduction des marges. C'est un comportement attendu pour plus de commodité étant donné le modèle de boîte. Vous n'avez pas besoin de vous soucier des doubles marges entre les blocs de contenu. Qu'est-ce que cela ressemble à vous veut réellement quelque padding autour de #like, plutôt que des marges.

Pensez à CSS comme un contenu centré → approche de style, plutôt que d'un → approche en approche.

Questions connexes