2477 votes

Quand utiliser margin et padding en CSS

Lors de l'écriture de CSS, existe-t-il une règle ou une ligne directrice particulière qui devrait être utilisée pour décider quand utiliser margin et quand utiliser padding ?

3 votes

Utilisez padding sur <a> lorsque vous souhaitez augmenter le zone focale .

1700voto

pavon Points 2218

TL;DR : Par défaut, j'utilise la marge partout, sauf lorsque j'ai une bordure ou un arrière-plan et que je veux augmenter l'espace à l'intérieur de cette boîte visible.

Pour moi, la plus grande différence entre le remplissage et la marge est que les marges verticales se réduisent automatiquement, alors que le remplissage ne le fait pas.

Considérons deux éléments l'un au-dessus de l'autre, chacun avec un rembourrage de 1em . Ce remplissage est considéré comme faisant partie de l'élément et est toujours préservé.

Vous vous retrouverez donc avec le contenu du premier élément, suivi par le remplissage du premier élément, suivi par le remplissage du second, suivi par le contenu du second élément.

Ainsi, le contenu des deux éléments se résume à 2em à part.

Remplacez maintenant ce padding par 1em margin. Les marges sont considérées comme étant à l'extérieur de l'élément, et les marges des éléments adjacents se chevaucheront.

Ainsi, dans cet exemple, vous vous retrouverez avec le contenu du premier élément suivi de 1em de la marge combinée suivie du contenu du deuxième élément. Ainsi, le contenu des deux éléments est seulement 1em à part.

Cela peut être vraiment utile lorsque vous savez que vous voulez dire 1em d'espacement autour d'un élément, quel que soit l'élément à côté duquel il se trouve.

Les deux autres grandes différences sont que le remplissage est inclus dans la zone de clic et la couleur/image d'arrière-plan, mais pas la marge.

div.box > div { height: 50px; width: 50px; border: 1px solid black; text-align: center; }
div.padding > div { padding-top: 20px; }
div.margin > div { margin-top: 20px; }

<h3>Default</h3>
<div class="box">
  <div>A</div>
  <div>B</div>
  <div>C</div>
</div>

<h3>padding-top: 20px</h3>
<div class="box padding">
  <div>A</div>
  <div>B</div>
  <div>C</div>
</div>

<h3>margin-top: 20px; </h3>
<div class="box margin">
  <div>A</div>
  <div>B</div>
  <div>C</div>
</div>

56 votes

+1 Pour styliser la typographie et abriter les séquences de paragraphes, les titres et les listes, il est important de tenir compte de l'évolution de la situation. presque toujours Il est préférable d'espacer les éléments avec des marges en raison du comportement de rabattement des marges adjacentes.

21 votes

Pourquoi les marges verticales se réduisent-elles alors que les marges horizontales ne le font pas ? Cela pourrait perturber beaucoup de gens.

19 votes

Les marges verticales ne se réduisent que pour les éléments de bloc. Pour les éléments de bloc en ligne, les marges sont ajoutées à la fois verticalement et horizontalement. Je ne suis donc pas sûr que le fait que les marges horizontales ne se réduisent pas sur les éléments de type bloc soit un problème, car elles remplissent de toute façon leur conteneur.

1540voto

John Boker Points 36308

La marge se trouve à l'extérieur des éléments du bloc, tandis que le rembourrage se trouve à l'intérieur.

  • Utilisez la marge pour séparer le bloc des éléments extérieurs.
  • Utilisez le remplissage pour éloigner le contenu des bords du bloc.

enter image description here

66 votes

Pourtant, la réponse correcte est celle de @pavon ci-dessous. les marges des éléments adjacents se chevauchent alors que le remplissage ne se chevauche pas. autrement dit, la séparation totale est de padding(A) + padding(B) + max(margin(A), margin(B))

10 votes

Voici une bonne pratique : utilisez bordure rouge solide pour vérifier le padding et la marge. Parfois, on peut faire des erreurs comme <a> qui contient du texte, entouré d'une marge et d'un padding. Utilisez cette astuce pour vérifier l'espace que nous pouvons cliquer.

605voto

Scott Points 8090

Le meilleur exemple que j'ai vu pour expliquer cela avec des exemples, des diagrammes et même une vue "essayez vous-même" est le suivant ici .

Je pense que le diagramme ci-dessous permet de comprendre instantanément la différence.

enter image description here

Il faut garder à l'esprit que les navigateurs conformes aux normes ( Les bizarreries d'IE sont une exception ) ne rendent que la partie contenu à la largeur donnée, il faut donc en tenir compte dans les calculs de mise en page. Notez également que la boîte de bordure voit un peu de Retour avec Bootstrap 3 qui le soutiennent.

4 votes

115voto

stvnrynlds Points 363

Il existe des explications plus techniques à votre question, mais si vous voulez un moyen de réfléchir margin et padding, cette analogie peut vous aider.

Imaginez les éléments du bloc comme des cadres de photos accrochés à un mur :

  • La photo est le contenu .
  • La natte est le rembourrage .
  • La moulure du cadre est le frontière .
  • Le mur est le fenêtre d'observation .
  • L'espace entre deux cadres est le marge .

En gardant cela à l'esprit, une bonne règle de base est d'utiliser marge lorsque vous voulez espacer un élément par rapport aux autres éléments du mur, et rembourrage lorsque vous ajustez l'apparence de l'élément lui-même. La marge ne modifie pas la taille de l'élément, mais le remplissage l'agrandit. 1 .


1 Vous pouvez modifier ce comportement avec l'option box-sizing attribut .

0 votes

En fait, je ne suis pas d'accord sur box-sizing: border-box rendant "l'espace pour le contenu plus petit". Voici une manipulation avec 2 boîtes où, si je gardais le même padding et ajoutais "Actif", puis "Désactiver" au survol, cela n'avait pas d'importance si j'utilisais box-sizing . La boîte s'agrandissait quand même. J'ai dû maximiser le rembourrage jusqu'à la longueur maximale à laquelle la boîte pouvait s'étendre, puis faire des essais et des erreurs pour trouver une combinaison correspondante pour les autres mots entrant dans la boîte afin de conserver la même largeur pour chaque mot : jsfiddle.net/navyjax2/ngzqqjah

3 votes

Hey vapcguy, merci pour votre contribution. Ma déclaration est généralement vraie, lorsque la largeur ou la hauteur est déclarée pour un élément, tandis qu'un élément avec des dimensions non déclarées n'est pas vraiment affecté par border-box (voir : jsfiddle.net/8yravLmL/1 ). Je vais nuancer ma réponse pour éviter toute confusion.

77voto

Blair Points 1643

Voici un excellent article publié récemment sur le site de Smashing Magazine, qui donne la meilleure description que j'ai vue (avec de belles photos) :

Marge et remplissage

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X