Mise en page en colonnes

Index général
Introduction au Web Page Web de base Introduction à HTML Introduction à CSS Les tableaux
Les images Les listes Les hyperliens Les couleurs Les attributs ID et CLASS
Les éléments DIV et SPAN Éléments structurants Mise en page en colonnes Éléments de types block et inline Le modèle de boîte CSS
Les unités de mesures CSS Les sélecteurs CSS Les grilles CSS Introduction aux formulaires Suppléments pour PFI

Dernière mise à jour le 23 octobre 2022

Afficher un élément comme un tableau

La propriété display:table permet d'afficher un élément HTML comme s'il s'agissait d'un tableau.

On parle ici de la "propriété" display:table, tout en sachant que pour être rigoureux on devrait dire la valeur "table" de la propriété "display".

display:table est surtout utilisé sur des éléments div :

  <div style="display: table;">
    <!-- il manque les rangées et les cellules -->
  </div>

Deux autres valeurs possibles de la propriété display permettent de représenter les rangées (table-row) et les cellules (table-cell).

L'exemple suivant montre comment il est possible de réaliser un "faux" tableau uniquement avec des div :

Exemple
  <style>
    .tableau {
      display: table;
    }
    .rangee {
      display: table-row;
    }
    .cellule {
      display: table-cell;
      padding: 50px;
      background-color: powderblue;
      border: solid black 1px;
    }
  </style>

  ...
  
  <div class="tableau">
    <div class="rangee">
      <div class="cellule">gauche</div>
      <div class="cellule">droite</div>
    </div>
  </div>
Je teste

Notez que, si le faux tableau n'a qu'une seule rangée, l'utilisation d'un conteneur avec la propriété display:table-row n'est pas nécessaire.

Afficher en colonnes

Bien sûr il n'y a aucun avantage à utiliser des div pour construire un tableau si le but est seulement de présenter des données sous forme tabulaire, puisqu'il existe déjà l'élément table.

Le réel bénéfice de la propriété display:table est la possibilité de réaliser facilement une mise en page en colonnes.

Dans l'exemple suivant, les div et la propriété display:table sont mis à profit pour créer une page Web classique avec en-tête, pied de page et partie centrale sur trois colonnes.


Exemple
  <style>
    #entete {
      padding: 20px;
      background-color: #ccf;
      text-align: center;
    }
    #conteneur {
      display: table;
    }
    #gauche {
      display: table-cell;
      width: 20vw;
      padding: 20px;
      background-color: #fcc;
    }
    #centre {
      display: table-cell;
      width: 60vw;
      padding: 20px;
      background-color: #fff;
    }
    #droite {
      display: table-cell;
      width: 20vw;
      padding: 20px;
      background-color: #ffc;
    }
    #pieddepage {
      padding: 20px;
      background-color: #cff;
      text-align: center;
    }
  </style>
</head>
<body>
  <div id="entete">
    En-tête
  </div>
  <div id="conteneur">
    <div id="gauche">
      Barre latérale gauche
    </div>
    <div id="centre">
      Contenu
    </div>
    <div id="droite">
      Barre latérale droite
    </div>
  </div>
  <div id="pieddepage">
    Pied de page
  </div>
</body>
</html>
Je teste

Utiliser les bons éléments

Nous avons vu comment il est possible de créer un tableau sans faire appel à l'élément table.

Nous venons de voir aussi comment on peut créer une mise en page sur plusieurs colonnes avec en-tête et pied de page uniquement avec des div.

La faiblesse de cette approche est que l'élément div n'est qu'un conteneur et n'est pas un élément sémantique.

Pour un logiciel qui manipule un document HTML, rien ne garantit que le premier élément rencontré est un en-tête ou que le n-ème élément est le contenu principal.

Il est hautement préférable d'utiliser des éléments structurants comme header, nav, main, section, etc.

L'utilisation de la propriété display:table nous permettra alors quand même de créer une mise en page en colonnes, tout en préservant le sens de chacun des éléments.

  <main style="display: table;">
    <aside style="display: table-cell; width: 25vw; ...   <!-- barre latérale -->
    <section style="display: table-cell; width: 75vw; ... <!-- contenu -->
      ...