Du point de vue de CSS chaque élément est un box (boîte). Nous allons apprendre comment ces boîtes fonctionnent afin de pouvoir gérer leurs dimensions leur positionnement au sein d'une page HTML.
Les quatre propriétés width
, height
, padding
et border
agissent directement sur les dimensions d'un élément.
width
- la largeur de la boîte, par défaut, sa valeur estauto
(en lire plus sur MDN)height
- la hauteur de la boîte, par défaut, sa valeur estauto
(en lire plus sur MDN)
Nous allons aussi parler de la propriété margin
.
padding
- raccourcie pour padding-top
👆, padding-right
👉, padding-bottom
👇 et padding-left
👈 - les espacements (écarts) internes dans l'élément (en lire plus sur MDN)
div {
/* top, right, bottom et left à 16px */
padding: 16px;
/*
padding-top: 16px;
padding-right: 16px;
padding-bottom: 16px;
padding-left: 16px;
*/
}
div {
/* top et bottom (↕️) à 16px et right et left (↔️) à 24px */
padding: 16px 24px;
/*
padding-top: 16px;
padding-right: 24px;
padding-bottom: 16px;
padding-left: 24px;
*/
}
div {
/* top à 16px et right et left (↔️) à 24px, bottom à 32px */
padding: 16px 24px 32px;
/*
padding-top: 16px;
padding-right: 24px;
padding-bottom: 32px;
padding-left: 24px;
*/
}
div {
/* top à 16px et right à 24px, bottom à 32px et left à 48px 👆👉👇👈 */
padding: 16px 24px 32px 48px;
/*
padding-top: 16px;
padding-right: 24px;
padding-bottom: 32px;
padding-left: 48px;
*/
}
https://codepen.io/alyra/pen/XWXWRXJ
border
- une propriété raccourcie qui permet de la bordure sa largeur avecborder-width
, son styleborder-style
(solid
,dashed
,dotted
, ...) et sa couleurborder-color
.
Il existe aussiborder-top
(border-top-width
,border-top-style
,border-top-color
),border-right
,border-bottom
etborder-left
.
div {
border: 2px solid red;
/*
border-width: 2px;
border-style: solid;
border-color: red;
*/
}
div {
border-bottom: 1px solid;
/*
border-bottom-width: 1px;
border-bottom-style: solid;
*/
}
Si la couleur n'est pas spécifiée, la couleur de l'élément est utilisée.
À l'occasion nous allons parler aussi de la propriété margin
- la taille des marges sur les quatre côtés de l'élément, un raccourci pour margin-top
, margin-right
, margin-bottom
et margin-left
.
div {
/* top, right, bottom et left à 16px */
margin: 16px;
/*
margin-top: 16px;
margin-right: 16px;
margin-bottom: 16px;
margin-left: 16px;
*/
}
div {
/* top et bottom (↕️) à 16px et right et left (↔️) à 24px */
margin: 16px 24px;
/*
margin-top: 16px;
margin-right: 24px;
margin-bottom: 16px;
margin-left: 24px;
*/
}
div {
/* top à 16px et right et left (↔️) à 24px, bottom à 32px */
margin: 16px 24px 32px;
/*
margin-top: 16px;
margin-right: 24px;
margin-bottom: 32px;
margin-left: 24px;
*/
}
div {
/* top à 16px et right à 24px, bottom à 32px et left à 48px 👆👉👇👈 */
margin: 16px 24px 32px 48px;
/*
margin-top: 16px;
margin-right: 24px;
margin-bottom: 32px;
margin-left: 48px;
*/
}
Il est important de comprendre la différence entre margin
et padding
En CSS, il existe deux type de boîtes : les boîtes de type block
et les boîtes en ligne (inline
).
Un élément de type block
:
- veut remplir tout l'espace disponible son conteneur
- crée un retour à la ligne, éléments suivants passent à la ligne
- respecte les propriétés
width
etheight
, padding
,margin
etborder
repoussent des éléments autour
p, div, h1-h6, section, ...
la majorité des éléments est type block
Un élément de type inline
:
- ne crée pas de retour à la ligne, les autres éléments se suivent en ligne,
width
etheight
ne s'appliquent paspadding
,margin
etborder
sur l'axe vertical sont appliquées, mais ne provoquent pas de déplacement des éléments autour.
a, span, em, strong, i, b, ins, del ...
- ont le caractère en-ligne inline
Le comportement d'un élément peut être modifié avec la propriété display
https://codepen.io/alyra/pen/YzwKodK
Les marges verticales (margin-top
et margin-bottom
) des éléments type block
sont parfois fusionnées en une seule marge. C'est ce qu'on appelle collapsing margins.
La règle qui s'y applique est suivante :
La taille de la marge = la plus grande des deux marges fusionnées.
Ceci concerne les situations suivantes:
- des éléments voisins adjacents
- aucun contenu, bordure ou padding séparant le parent et ses descendants
- bloc vide
Vous pouvez en lire d'avantage sur MDN.
https://codepen.io/alyra/pen/QWyWprr
Par défault, pour tous les éléments, la valeur de la propriété box-sizing
est content-box
. Qu'est-ce que ça implique pour nous ?
Avec box-sizing: content-box;
, les propriétés width
et height
affectées à un élément s'applique à son contenu (son content-box
). Ni les bordures ni les paddings ne sont pas pris en compte. Ceci n'est pas très pratique pour les développeurs qui doivent ajuster la valeur de width
et height
.
Nous pouvons changer la valeur de box-sizing
pour border-box
. Pour l'appliquer pour tous les éléments nous allons utiliser le sélecteur universel (*
) comme ceci :
* {
box-sizing: border-box;
}
ou comme cela :
html {
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}