Margin - Propriété CSS

Cette page concerne aussi les propriétés physiques :
- margin-top
Définit la marge au dessus de l'élément.
- margin-right
Définit la marge à droite de l'élément.
- margin-bottom
Définit la marge en dessous de l'élément.
- margin-left
Définit la marge à gauche de l'élément.
Et les propriétés logiques :
- margin-block-start
Définit la marge de début de bloc, compte-tenu du mode d'écriture du texte pour cet élément.
- margin-block-end
Définit la marge de fin de bloc, compte-tenu du mode d'écriture du texte pour cet élément.
- margin-inline-start
Définit la marge avant le début des lignes de texte, compte-tenu du mode d'écriture.
- margin-inline-end
Définit la marge après la fin de ligne, compte-tenu du mode d'écriture.
margin
margin-block-start
margin-block-end
margin-inline-start
margin-inline-end

Résumé des caractéristiques de la propriété margin

Description rapide
Résumé des quatre marges.
Statut
Standard
Utilisable sur
HTML
Valeurs prédéfinies
auto
Pourcentages
Calculés par rapport à la largeur du bloc parent.
Valeur initiale
0
Héritée par défaut
Non.
Computed value : lors d'une animation, la propriété margin passe progressivement d'une valeur à une autre.
Module W3C
Module CSS - Modèle de blocs
 🡇  
 🡅  
Statut du document: WD (document de travail)

Statut du document: WD (document de travail)

Statut du document: CR (document candidat à la recommandation)

Statut du document: REC (recommandation)

Statut du document: DEPR (Ancienne spécification, déclarée obsolète)

Schéma syntaxique de margin..

Margin property - Syntax diagramSyntax diagram of the margin CSS property. See stylescss.free.fr for details. auto auto length / % length / % {1,4} {1,4}margin:;margin:;
Schéma syntaxique de la propriété margin..
Les liens du schéma donnent accès à plus de détails. .

Description des termes utilisés sur le schéma :

Description de la propriété margin.

margin définit la taille des marges, c'est à dire l'espace réservé tout autour de l'élément, à l'extérieur de sa bordure. Ne pas confondre avec les marges intérieures qui sont gérées par la propriété padding.

margin est une propriété résumée qui permet de définir en une seule écriture les valeurs des quatre marges, soit les propriétés :

  • margin-top : marge du haut.
  • margin-right : marge de droite.
  • margin-bottom : marge du bas.
  • margin-left : marge de gauche.

margin accepte de 1 à 4 valeurs, mais dans tous les cas, les quatre marges sont modifiées : même si une seule valeur est spécifiée, elle sera appliquée aux quatre marges (voir les détails de syntaxe plus loin).

Les marges sont comptées à partir de l'élément parent si l'élément est fils unique (pas d'autres éléments dans ce parent), ou à partir des éléments précédent et suivant lorsqu'il y a d'autres éléments dans le parent.

Les marges en CSS   Les marges en CSS

Fusion des marges.

Les marges haute et basse entre les blocs successifs ne s'ajoutent pas : le navigateur applique celle des marges qui est la plus grande. Ce mécanisme de fusion ne se produit que pour les marges dans le sens vertical : si des blocs sont affichés côte à côte, leurs marges gauche et droite ne fusionnent pas.

Fusion des marges en CSS
Si les marges s'ajoutaient
Fusion des marges en CSS
Avec la fusion des marges

Reportez-vous également à la propriété margin-trim pour des compléments d'information sur la gestion des marges entre éléments du même type.

Centrage d'un élément du type block.

Lorsque les marges droite et gauche sont fixées à la valeur auto, elles ont pour conséquence le centrage de l'élément dans la largeur de son parent.

Prise en charge de la langue.

Si du texte en langue non latine est envisagé (arabe ou CJK par exemple), il vaut mieux raisonner avec les propriétés dites "logiques", c'est à dire celles qui prennent en compte la direction et le sens d'écriture. Par exemple, les langues arabes s'écrivent de la droite vers la gauche, ce qui est le contraire des langues latines (européennes) qui s'écrivent de la gauche vers la droite. Les propriétés logiques relatives aux marges sont les suivantes :

  • margin-block-start : marge au début du bloc, équivalente à margin-top pour les langues européennes.
  • margin-block-end : marge à la fin du bloc, équivalente à margin-bottom pour les langues européennes.
  • margin-inline-start : marge au début des lignes, équivalente à margin-left pour les langues européennes.
  • margin-inline-end : marge en fin des lignes, équivalente à margin-right pour les langues européennes.

Il faut ajouter deux propriétés résumées :

  • margin-block : accepte deux valeurs qui correspondent à margin-block-start et à margin-block-end.
  • margin-inline : accepte deux valeurs qui correspondent à margin-inline-start et à margin-inline-end.

Remarque : la propriété résumée margin ne traite que les marges physiques : son effet sera donc indépendant de la direction et du sens d'écriture.

Le simulateur ci-dessous donne les équivalences pour les principales familles de langues.

margin-top
margin-left
La direction et le sens d'écriture de ce texte s'adaptent à la langue choisie.
margin-right
margin-bottom

Valeurs pour margin.

  • margin: auto;

    Les marges sont déterminées par le navigateur. Elles peuvent être différentes suivant le type d'élément (p, div...).
    Particularité : lorsque les marges droite et gauche sont fixées toutes les deux à la valeur auto, elles ont pour conséquence le centrage horizontal de l'élément. Cette particularité n'est pas valable dans le sens vertical.

  • margin: 15px 10px 10px 0px; a b c d

    De un à quatre nombres qui définissent la taille des marges.

    Ce sont des nombres positifs ou négatifs, suivis d'une unité de dimension (voir les unités de dimension) et séparés par des espaces.
    Remarque : les valeurs négatives peuvent décaler l'élément en dehors de la zone visible.

    Les pourcentages sont calculés par rapport à la largeur du parent, ce qui est logique pour les marges horizontales (margin-left et margin-right), mais peut surprendre dans le cas des marges verticales (margin-top et margin-bottom).
    Calculer les marges verticales par rapport à la hauteur de l'élément parent conduirait à un calcul circulaire insoluble. En effet, la hauteur d'un bloc est déterminée par son contenu (à moins qu'elle ne soit fixée avec la propriété height). Or la hauteur du contenu dépend des marges des éléments internes. Si celles-ci dépendaient également de la hauteur du parent on aurait un gros problème de calcul circulaire.

    En fait l'utilisation de pourcentages pour les marges verticales est généralement peu intéressante.

    Voici comment sont attribuées les valeurs en fonction du nombre de valeurs indiquées :

    1. Si une seule valeur est précisée, elle s'applique aux quatre marges.
    2. Si deux valeurs sont précisées,
          - la première définit les marges haute et basse,
          - la deuxième valeur définit les marges gauche et droite.
    3. Lorsque trois valeurs sont indiquées, elle définissent
          - la marge du haut,
          - les marges gauche et droite,
          - la marge du bas.
    4. Enfin, si les quatre valeurs sont précisées, elles définissent chacune des marges, dans l'ordre suivant :
          - marge du haut,
          - marge de droite,
          - marge du bas,
          - marge de gauche.
    Propriété margin avec une seule valeur
    margin:a;
    Une seule valeur.
    Propriété margin avec deux valeurs
    margin:a b;
    Deux valeurs.
    Propriété margin avec trois valeurs
    margin:a b c;
    Trois valeurs.
    Propriété margin avec quatre valeurs
    margin:a b c d;
    Quatre valeurs.
  • margin: initial; (0) margin: inherit; margin: revert; margin: revertLayer; margin: unset;

    Ces valeurs sont décrites plus en détail sur leur page respective : initial, inherit, revert, revert-layer, unset.

Animation de la propriété margin.

L'animation des marges est souvent utilisées pour donner l'impression d'un bloc qui se déplace sur l'écran.

Démonstration

Manipulation de la propriété margin par programme.

Les codes donnés ci-après sont donnés pour margin-top mais seront facilement modifiables pour s'adapter aux autres propriétés relatives aux marges.

Avec Javascript, modifier la valeur de margin.

Javascript accepte deux syntaxes pour modifier la valeur de margin-top. La première syntaxe utilise la notation typique de CSS (le kebab-case : un tiret pour séparer les mots), tandis que la deuxième syntaxe est plus proche de la syntaxe habituelle de Javascript, avec la notation en camel-case (une majuscule pour séparer les mots).

Javascript
let el = document.getElementById('id'); el.style['margin'] = '2cm'; // ou let el = document.getElementById('id'); el.style.margin = '2cm';

Avec Javascript, lire la valeur de margin.

Relire la valeur de margin-top en Javascript peut également se faire suivant deux syntaxes. La propriété doit avoir été affectée directement à l'élément lui-même par son attribut style et non pas à une classe ou via un autre sélecteur CSS.

Javascript
let el = document.getElementById('id'); let value = el.style['margin']; // ou let el = document.getElementById('id'); let value = el.style.margin;

Avec Javascript, lire la valeur calculée de margin.

Pour lire la valeur calculée de margin-top, utilisez le code suivant. La marge est retournée en pixels ou en pourcentages, quelque soit l'unité qui a été utilisée pour la définir dans la feuille de styles.

Javascript
let el = document.getElementById('id'); let value = window.getComputedStyle(el).getPropertyValue('margin');

Avec JQuery, modifier la valeur de margin.

Avec JQuery, deux syntaxes sont également possibles pour modifier la valeur de la propriété margin-top de l'élément el :

JQuery

$('#id').css('margin', '2cm');

Avec JQuery, lire la valeur calculée de margin.

Comme en Javascript, la marge est retournée en pixels ou en pourcentages.

JQuery
let value = $('#id').css('margin');

Testez vous-même.

Les boutons ci-dessous affichent soit la valeur telle qu'elle a été appliquée pour le premier bouton, soit la valeur calculée pour le deuxième bouton. Cette deuxième option permet de voir comment est mémorisée (sérialisée) la valeur de margin. On constate en particulier que les pourcentages sont bien mémorisés en tant que pourcentages (voir le chapitre sur l'héritage). Toutes les autres unités sont converties en pixels.

Simulateur avec la propriété margin.

Le simulateur ci-dessous vous aidera à vous familiariser avec la notion de début de bloc, début de ligne, etc. en fonction de la langue. Les marges sont matérialisées en bleu.


Mode d'écriture :

margin-block-start :
margin-block-end :
margin-inline-start :
margin-inline-end :

Voici comment on parle des marges dans les manuels de typographie traditionnelle.

« Les marges sont un fondement esthétique de la mise en pages, qui ancre la place du texte en le cerclant d’un espace silencieux. Elles font ressortir le texte pour lui donner toute son épaisseur et installent une quiétude propice à la lecture. Les marges ont aussi un rôle ergonomique ; les grands fonds permettent aux pouces de se poser, les petits fonds évitent au texte d’aller se perdre dans la reliure. »

Prise en charge de margin par les navigateurs.

margin est sans doute une des propriétés les plus anciennes de CSS : elle est reconnue par tous les navigateurs. Les propriétés logiques (prenant en compte le mode d'écriture de la langue) sont plus récentes mais sont maintenant bien reconnues également.

Colonne 1
Support des propriétés physiques margin, margin-top, margin-right, margin-bottom et margin-left.
Colonne 2
Support des propriétés logiques margin-inline, margin-inline-start et margin-inline-end qui définissent les marges par rapport au mode d'écriture de la langue.
Colonne 3
Support des propriétés logiques margin-block, margin-block-start et margin-block-end qui définissent les marges par rapport au mode d'écriture de la langue.
1
Propriété
margin
2
Propriété
margin-inline
3
Propriété
margin-block
Estimation de la prise en charge globale.
97%
95%
95%

Navigateurs sur ordinateurs :

Navigateurs sur mobiles :

Navigateurs obsolètes ou marginaux :

Internet Explorer

QQ Browser

Safari sur IOS

Firefox pour Androïd

Opéra Mobile

Baidu Browser

KaiOS Browser

UC Browser pour Androïd

Opéra

Safari

Firefox

Chrome pour Androïd

Samsung Internet

Chrome

Edge

Androïd Brower

Opéra mini

Prise en charge de margin par les navigateurs.

La définition des marges était déjà prévue dans la toute première spécification de langage CSS. Elle a peu évolué depuis. La plus grosse modification est l'ajout des propriétés logiques, qui prennent en compte le mode d'écriture en fonction de la langue margin-block..., et margin-inline....

Voir aussi, au sujet du calcul des marges.

Les marges (intérieures et extérieures) sont décrites dans ce module de la spécification CSS : CSS Box Model Module. Les définitions suivantes sont également décrites dans ce même module.

Propriétés :

margin
Résumé des quatre marges.
margin-block-end
Définit la marge de fin de bloc, compte-tenu du mode d'écriture du texte pour cet élément.
margin-block-start
Définit la marge de début de bloc, compte-tenu du mode d'écriture du texte pour cet élément.
margin-bottom
Définit la marge en dessous de l'élément.
margin-inline-end
Définit la marge après la fin de ligne, compte-tenu du mode d'écriture.
margin-inline-start
Définit la marge avant le début des lignes de texte, compte-tenu du mode d'écriture.
margin-left
Définit la marge à gauche de l'élément.
margin-right
Définit la marge à droite de l'élément.
margin-top
Définit la marge au dessus de l'élément.
margin-trim
Définit la gestion des marges successives au sein d'un même container.
padding
Marges intérieures des quatre cotés.
padding-block-end
Définit la marge intérieure à la fin du bloc, compte-tenu du mode d'écriture.
padding-block-start
Définit la marge intérieure au début du bloc, compte-tenu du mode d'écriture.
padding-bottom
Définit la marge intérieure en dessous de l'élément.
padding-inline-end
Définit la marge intérieure du côté de la fin des lignes de texte, compte-tenu du mode d'écriture.
padding-inline-start
Définit la marge intérieure du côté du début des lignes de texte, compte-tenu du mode d'écriture.
padding-left
Définit la marge intérieure à gauche de l'élément.
padding-right
Définit la marge intérieure à droite de l'élément.
padding-top
Définit la marge intérieure au dessus de l'élément.