Lorsque vous créez un site Web, une grande partie du travail consiste à placer les dif­fé­rents éléments. La mise en page doit être in­té­res­sante, mais en même temps être fa­ci­le­ment com­pré­hen­sible et claire. Les feuilles de style en cascade (CSS) cons­ti­tuent un outil in­té­res­sant pour rendre les sites Web at­trac­tifs. Alors que le HTML attribue des ca­rac­té­ris­tiques ru­di­men­taires au contenu, les web­mas­ters utilisent le CSS pour les con­cep­tions complexes. La tech­no­lo­gie du Web étant en constante évolution, le CSS3 comprend de nouvelles tech­niques qui rendent le langage de balisage uti­li­sable pour la na­vi­ga­tion mobile et le design responsif.

Pourquoi a-t-on besoin d’un layout de grille CSS ?

L’Internet mobile re­pré­sente aujourd’hui un grand défi pour les con­cep­teurs de sites Web : en raison de la multitude d’appareils mobiles, on ne peut en effet pas toujours savoir quel est le format de l’écran sur lequel le site Web doit être affiché. C’est pourquoi il est important que les dif­fé­rents objets (boîtes de texte, gra­phiques, éléments in­te­rac­tifs) soient répartis à fois de façon in­dé­pen­dante et clai­re­ment agencée, tout en tenant compte des par­ti­cu­la­ri­tés d’affichage des dif­fé­rents appareils mobiles.

Pendant plusieurs années il fallait se contenter de ce que l’on appelait les floats. Mais tra­vail­ler avec cette technique était complexe et pouvait provoquer des erreurs. Depuis, il existe deux méthodes pour réaliser une mise en page dynamique : Outre la grille CSS, on peut également utiliser flexbox pour réaliser une con­cep­tion in­tel­li­gente. Mais les deux tech­niques diffèrent sur certains points.

La flexbox est uni­di­men­sion­nelle, ce qui signifie qu’en principe, les éléments ne sont déplacés que sur un axe. Une grille CSS offre au con­cep­teur deux di­men­sions pour le placement des objets. Au lieu d’un seul axe, la grille CSS permet une grille avec des lignes et des colonnes.

Grille CSS : tutoriel avec exemples

Ceux qui ont déjà eu une ex­pé­rience avec le CSS n’auront aucun problème avec les grilles. Le tutoriel suivant vous présente les fonctions les plus im­por­tantes pour démarrer.

Note

Le tutoriel fonc­tionne avec un seul fichier : le code CSS est écrit di­rec­te­ment dans l’en-tête du fichier HTML. Mais bien sûr, il est également possible de créer une feuille de style séparée et de l’appeler uni­que­ment dans le fichier HTML .

Création de con­te­neurs et d’objets

La grille CSS comprend deux unités dif­fé­rentes : les con­te­neurs et les objets. Le conteneur constitue le niveau supérieur : vous y dé­fi­nis­sez des pro­prié­tés qui sont ensuite trans­mises à tous les éléments. Un objet se trouve à l’intérieur d’un conteneur. En outre, vous avez toujours besoin de HTML pour le layout de la grille CSS. Dans la partie HTML du code source, les dif­fé­rents objets (texte, gra­phiques, ...) sont créés puis repris dans la grille CSS et placés à la bonne position.

<!DOCTYPE html>
<html>
<head>
<style>
.grid-container {
    display: grid;
}
</style>
</head>
<body>
<div class="grid-container">
    <div class="grid-item1">1</div>
    <div class="grid-item2">2</div>
    <div class="grid-item3">3</div>
    <div class="grid-item4">4</div>
    <div class="grid-item5">5</div>
    <div class="grid-item6">6</div>
</div>
</body>
</html>

Nous avons main­te­nant créé six éléments, défini chacun comme des « objets de grille » et les avons tous placés dans le « conteneur de grille ». Pour rendre la grille CSS active, vous devez lancer la fonction dans le conteneur avec « display: grid ». Jusqu’à présent, le code ne génère que 6 chiffres, qui ap­pa­rais­sent les uns sous les autres. Une fois qu’ils ont été créés, vous pouvez placer ces éléments re­la­ti­ve­ment librement sur l’écran.

Grilles, colonnes et lignes

Avec les grilles CSS, vous tra­vail­lez avec des lignes et des colonnes pour créer une grille. Les dif­fé­rents objets peuvent être disposés dans la grille. Cette grille peut ou doit être choisie librement : L’uti­li­sa­teur décide lui-même de la taille des lignes et des colonnes. Pour ce faire, vous ajoutez deux dé­cla­ra­tions au conteneur.

.grid-container {
    display: grid;
    grid-template-rows: 100px 100px;
    grid-template-columns: 100px 100px 100px;
}

Avec ces deux commandes, nous avons créé une grille de 2 par 3. La taille de chaque ligne et de chaque colonne peut être ajustée en fonction des besoins spé­ci­fiques. Les entrées sont sim­ple­ment saisies l’une après l’autre (séparées par un espace). En plus des in­for­ma­tions exactes sur les pixels, vous pouvez également utiliser un pour­cen­tage ou d’autres tailles qui sont courantes dans le CSS. Avec les spé­ci­fi­ca­tions « max-content » et « min-content », vous pouvez également créer la grille en fonction du contenu.

La formule « grid-gap » crée également un espace.

.grid-container {
    display: grid;
    grid-template-rows: 100px 100px;
    grid-template-columns: 100px 100px 100px;
    grid-gap: 5px;
}

Les cellules sont ainsi séparées les unes des autres de façon uniforme Si vous ne souhaitez pas un es­pa­ce­ment spé­ci­fique, vous pouvez également utiliser les fonctions « grid-column-gap » et « grid-row-gap » pour concevoir les espaces selon vos besoins.

Les fractions sont une ca­rac­té­ris­tique par­ti­cu­lière. Avec cette unité de mesure, l’écran peut être divisé de façon per­son­na­li­sée, sous forme de pour­cen­tages. Par exemple, pour diviser une zone en 7 unités ho­ri­zon­tales, avec une seule colonne qui doit être deux fois plus grande que les autres, il faut utiliser le code suivant :

.grid-container {
    display: grid;
    grid-template-rows: 100px 100px;
    grid-template-columns: 1fr 2fr 1fr 1fr 1fr;
    grid-gap: 5px;
}

L’avantage de tra­vail­ler avec des tailles relatives au lieu de spé­ci­fi­ca­tions statiques est le suivant : la grille peut s’adapter au­to­ma­ti­que­ment à la taille de l’écran. Même si les colonnes doivent être plus petites, la deuxième colonne (dans notre exemple) reste toujours deux fois plus grande que les autres. Si vous souhaitez fixer une ligne, c’est-à-dire ne pas l’adapter à la taille de l’écran, il vous suffit de lui attribuer une valeur statique.

Placement des objets

Après avoir défini la grille, vous pouvez placer les dif­fé­rents objets. Pour ce faire, vous devez créer des objets et spécifier des valeurs de début et de fin. Mais chaque élément ne doit pas né­ces­sai­re­ment occuper une seule cellule de la grille.

<!DOCTYPE html>
<html>
<head>
<style>
.grid-container {
    display: grid;
    grid-template-rows: 100px 100px 100px 100px;
    grid-template-columns: 100px 100px 100px 100px;
    grid-gap: 5px;
}
.grid-item1 {
    background: blue;
    text-align: center;
    border: black 5px solid;
    grid-column-start: 1; 
    grid-column-end: 5; 
    grid-row-start: 1; 
    grid-row-end: 3;
}
.grid-item2 {
    background: grey;
    text-align: center;
    border: black 5px solid;
}
</style>
</head>
<body>
<div class="grid-container">
    <div class="grid-item1">1</div>
    <div class="grid-item2">2</div>
    <div class="grid-item2">3</div>
    <div class="grid-item2">4</div>
    <div class="grid-item2">5</div>
    <div class="grid-item2">6</div>
</div>
</body>
</html>

Nous avons main­te­nant introduit deux types d’objets. Alors que les six derniers éléments n’ont au­to­ma­ti­que­ment que la taille d’une cellule, le premier s’étend sur quatre colonnes et deux lignes. (Pour une meilleure com­pré­hen­sion, nos exemples incluent également d’autres con­cep­tions visuelles. Cependant, les couleurs, les bordures et le centrage du texte ne sont en fait pas définis par la grille CSS.

Les valeurs du début et de la fin des objets ne se réfèrent qu’in­di­rec­te­ment aux lignes et aux colonnes. Elles font en fait référence à la ligne de grille cor­res­pon­dante. Dans l’exemple, la quatrième colonne se termine par la cinquième ligne. Cependant, vous disposez de plusieurs options pour spécifier les four­chettes.

  • Nu­mé­ro­ta­tion : vous comptez les lignes de gauche à droite et de haut en bas.
  • Noms : dans les « grid-template-rows » et les « grid-template-columns », vous pouvez donner des noms aux lignes (entre crochets) et vous référer ensuite à ces noms.
  • Span : avec « span », vous pouvez spécifier combien de cellules l’objet doit contenir dans la direction cor­res­pon­dante.

Au lieu de définir les points de départ et d’arrivée dans une seule dé­cla­ra­tion, les con­cep­teurs de sites Web peuvent combiner les deux sous une seule commande. Le code suivant conduit au même résultat que l’exemple précédent.

<style>
.grid-container {
    display: grid;
    grid-template-rows: 100px [Line1] 100px [Line2] 100px [Line3] 100px [Line4];
    grid-template-columns: 100px 100px 100px 100px;
    grid-gap: 5px;
}
.grid-item1 {
    background: blue;
    text-align: center;
    border: black 5px solid;
    grid-column: 1 / span 4;
    grid-row: 1 / Line2; 
}
.grid-item2 {
    background: grey;
    text-align: center;
    border: black 5px solid;
}
</style>

Ré­par­ti­tion des zones

Avec une grille CSS, il est possible de combiner des cellules en zones et de leur attribuer un nom. De cette façon, il est beaucoup plus facile de répartir les dif­fé­rents éléments dans la grille. Les réglages sont effectués dans le conteneur. Pour ce faire, utilisez le champ « zones de grille » et inscrivez ensuite les noms des zones sou­hai­tées dans les cellules ligne par ligne. Si vous ne voulez pas attribuer une cellule et la laisser vide, vous pouvez insérer un point. Chaque ligne est mise entre guil­le­mets.

.grid-container {
    display: grid;
    grid-template-rows: 100px 100px 100px;
    grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
    grid-gap: 5px;
    grid-template-areas:
    "area1 area1 area1 area1 area1"
    "area2 area2 . area3 area3"
    "area2 area2 area4 area4 area4";
}

Dans cet exemple de grille CSS, nous avons défini 4 zones dif­fé­rentes. Une cellule est laissée vide. Si vous dé­fi­nis­sez ensuite les éléments, il n’est plus né­ces­saire de spécifier les valeurs : il suffit de se référer à la zone cor­res­pon­dante.

.grid-item1 {
    background: blue;
    text-align: center;
    border: black 5px solid;
    grid-area: area1;
}
.grid-item2 {
    background: red;
    text-align: center;
    border: black 5px solid;
    grid-area: area2;
}
.grid-item3 {
    background: green;
    text-align: center;
    border: black 5px solid;
    grid-area: area3;
}
.grid-item4 {
    background: yellow;
    text-align: center;
    border: black 5px solid;
    grid-area: area4;
}

Ajuster l’alig­ne­ment des éléments

Comment les dif­fé­rents éléments de la grille CSS s’alignent-ils ? Le principe est le suivant : les éléments sont étirés de façon à s’insérer exac­te­ment dans la grille, ce qui signifie que la taille de l’objet n’a pas d’im­por­tance. Elle n’a pas été spécifiée dans les exemples jusqu’à présent, car nous avons plutôt renseigné les cellules sur les­quelles l’objet doit être réparti. Mais il est également possible d’attribuer une taille fixe à l’objet que vous souhaitez intégrer dans la grille.

Les Web­de­sig­ners ont le choix de définir l’alig­ne­ment de tous les objets de façon globale à travers le conteneur, ou d’attribuer aux objets sé­lec­tion­nés un alig­ne­ment propre. Pour la variante globale, il faut utiliser les termes « justify-items » et « align-items ». Le premier contrôle l’alig­ne­ment ho­ri­zon­tal, le second l’alig­ne­ment vertical. Si vous ne souhaitez aligner qu’un seul élément, utilisez les options « justify-self » et « align-self ». Toutes ces commandes con­tien­nent les options ci-dessous.

  • Stretch : la taille de l’objet est adaptée à la taille des cellules sé­lec­tion­nées.
  • Start : l’objet est aligné à gauche ou en haut.
  • End : l’objet est aligné à droite ou en bas.
  • center : l’objet est centré.
.grid-container {
    display: grid;
    grid-template-rows: 100px 100px 100px 100px;
    grid-template-columns: 100px 100px 100px 100px;
    grid-gap: 5px;
    justify-items: center;
    align-items: center;
}
.grid-item1 {
    background: grey;
    text-align: center;
    border: black 5px solid;
    width: 50px;
    height: 50px;
}
.grid-item2 {
    background: blue;
    text-align: center;
    border: black 5px solid;
    width: 50px;
    height: 50px;
    justify-self: start;
    align-self: start;
}

Vous pouvez également rac­cour­cir les ins­truc­tions en utilisant les termes « place-items » ou « place-self ». Les deux in­for­ma­tions (verticale et ho­ri­zon­tale) peuvent être placées sur une seule ligne : place-items : <align-items> / justify-items>.

place-items: center / end;

Il est donc possible d’aligner les objets dans la grille, mais aussi de déplacer l’ensemble de la grille à l’intérieur du conteneur. Si vous tra­vail­lez avec des spé­ci­fi­ca­tions de taille statique pour la grille CSS, celle-ni peut ne pas avoir la même taille que le conteneur entier. Vous pouvez ensuite utiliser les fonctions « justify-content » et « align-content » pour aligner la grille dans le conteneur, donc dans l’affichage également. Ici aussi, il existe dif­fé­rentes pos­si­bi­li­tés d’alig­ne­ment :

  • start : aligné à gauche ou aligné vers le haut
  • end : aligné à droite ou orienté vers le bas
  • center : centré
  • stretch : grille étirée
  • space-around : ré­par­ti­tion uniforme de l’espace autour des cellules
  • space-between : ré­par­ti­tion uniforme de l’espace entre les cellules
  • space-evenly : ré­par­ti­tion uniforme de l’espace autour des cellules, y compris la frontière
.grid-container {
    display: grid;
    width: 800px;
    height: 800px;
    background: yellow;
    grid-template-rows: 100px 100px 100px 100px;
    grid-template-columns: 100px 100px 100px 100px;
    grid-gap: 5px;
    justify-content: space-evenly;
    align-content: center;
}

Il existe également une version courte : place-content: <align-content> / <justify-content>.

place-content: center / space-evenly;

Ajus­te­ments au­to­ma­tiques pour le design responsif

L’un des prin­ci­paux avantages de la grille CSS est sa flexi­bi­lité. Vous pouvez pa­ra­mé­trer la grille CSS pour qu’elle s’ajuste au­to­ma­ti­que­ment. Ceci facilite non seulement l’affichage sur dif­fé­rents appareils, mais les au­to­ma­tismes fa­ci­li­tent également le travail avec le CSS.

« repeat() » est une fonction très utile : au lieu de définir chaque ligne ou colonne de façon in­di­vi­duelle, vous pouvez spécifier la taille et la fréquence à laquelle ce schéma doit être répété. C’est encore plus facile en com­bi­nai­son avec les options « auto-fill » et « auto-fit ». Ici, la grille CSS est laissée pour créer des lignes et des colonnes. Avec la première option, la grille CSS insère autant de cellules que possible sans dépasser les limites du conteneur. Cependant, il peut arriver que l’espace reste inutilisé. L’option « auto-fit », en revanche, ajuste la taille des cellules de sorte que l’espace soit utilisé jusqu’au bord.

.grid-container {
    display: grid;
    width: 800px;
    height: 800px;
    grid-template-rows: repeat(auto-fit, 100px);
    grid-template-columns: repeat(auto-fit, 100px);
    grid-gap: 5px;
}

Les deux fonctions « grid-auto-columns » et « grid-auto-rows » sont également très pratiques. Grâce à ces deux ins­truc­tions, vous avez plus de liberté dans la création des objets. Si, par exemple, une grille avait les di­men­sions de 4 x 4 cellules et que vous créiez main­te­nant un élément qui ne devrait commencer que dans la cinquième colonne, cela poserait des problèmes. En créant au­to­ma­ti­que­ment un nombre suffisant de lignes et de colonnes, vous pouvez éviter ce genre de problèmes.

.grid-container {
    display: grid;
    grid-auto-rows: 100px;
    grid-auto-columns: 100px;
    grid-gap: 5px;
}

Même si la taille de la grille et des objets doit s’adapter à la taille de l’affichage, les con­cep­teurs de sites Web aiment entrer des valeurs minimales et maximales. Vous pouvez utiliser la dé­cla­ra­tion « minmax() » pour vous assurer qu’un objet ne devient pas trop petit ou trop grand. Entrez d’abord la plus petite valeur entre pa­ren­thèses, puis la plus grande.

.grid-container {
    display: grid;
    grid-template-rows: 100px 100px 100px;
    grid-auto-columns: minmax(50px, 150px);
    grid-gap: 5px;
}

En combinant plusieurs de ces fonctions, vous pouvez fa­ci­le­ment créer un design responsif.

<!DOCTYPE html>
<html>
<head>
<style>
.grid-container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
    grid-gap: 5px;
    justify-items: center;
    align-items: center;
}
.grid-item1 {
    background: grey;
    text-align: center;
    border: black 5px solid;
    width: 100px;
    height: 100px;
}
</style>
</head>
<body>
<div class="grid-container">
    <div class="grid-item1">1</div>
    <div class="grid-item1">2</div>
    <div class="grid-item1">3</div>
    <div class="grid-item1">4</div>
    <div class="grid-item1">5</div>
    <div class="grid-item1">6</div>
    <div class="grid-item1">7</div>
    <div class="grid-item1">8</div>
    <div class="grid-item1">9</div>
    <div class="grid-item1">10</div>
</div>
</body>
</html>
En résumé

La grille CSS offre aux con­cep­teurs de sites Web la pos­si­bi­lité de créer fa­ci­le­ment des mises en page at­trayantes. Grâce à la grille, vous avez toujours le contrôle sur le placement des objets, même avec un design responsif.

Aller au menu principal