La mise en page (en cours)

Dans cette page

Les outils de mise en page sont relativement récents en CSS. Les premiers site web étaient mis en page avec des tableaux, essayez de faire une mise en page sur un tableur si un jour vous vous ennuyez.

C’est avec l’arrivée du langage CSS que des premières tentatives de ne plus utiliser de tableaux sont apparues.

Le flux HTML

En HTML (comme expliqué par ici), les éléments prennent la forme d’une boîte avec deux principaux modèles : inline  ou block.

La dimension calculée des boîtes va être conditionnée (parmi d’autres) par les paramètres suivants :

  1. Plus j’ai de contenu et plus grande sera la boîte, idem avec la dimension des éléments enfants;
  2. Si je l’affiche dans une fenêtre plus ou moins large, l’élément sera plus au moins haut pour afficher le contenu;
  3. Des propriétés qui font partie du modèle de boîte qui modifie ce calcul de dimension;
  4. Le type de boîte.
<article>
<img src="https://placekitten.com/500/200" alt="">
<h1>
Les chats
<span>Comment sont-t’ils devenus des stars d’internet ?</span>
</h1>
<p><strong>Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui consectetur ratione autem</strong>, <em>sit eveniet</em> fugit quae porro, optio, expedita dignissimos delectus voluptates! <a href="#">Nihil voluptatibus</a> eum autem facilis praesentium odio cumque!</p>
<p>Un article de <em>Antoine Hernandez</em></p>
</article>
* { outline: 2px solid #999 }

Testez cet exemple et observez le comportement des différents éléments quand vous redimensionnez la fenêtre de votre navigateur. Les différentes boîtes s’organisent d’elles-même (chaque élément pousse l’autre qui lui même en pousse le suivant et ainsi de suite).

Vous pouvez aussi constater que ces boîtes ont des comportements différents lié à leur type (inline ou block).

C’est ce principe que l’on nomme le flux HTML.

Ma première mise en page

Le flux est l’outil de base à comprendre pour faire de la mise en page avec CSS et HTML. Le flux a deux directions : inline ou block, ce qui correspond à la manière dont les boîtes se positionnent les unes par rapport aux autres.

Avec le même exemple d’HTML utilisé au début de cette page, appliquez le code CSS suivant :

body {
font-family: sans-serif;
line-height: 1.5;
font-size: 1.2rem;
}

article {
background-color: #acd;
padding: 3rem;
}

h1 {
margin: 0;
font-size: 3rem;
line-height: 1.2;
}

h1 span {
display: block;
font-size: 1.5rem;
font-weight: normal;
}

img {
display: block;
margin-bottom: 1rem;
/* L’image se redimensionne avec la fenêtre */
max-width: 100%;
height: auto;
}

p strong {
display: block;
margin-bottom: 1rem;
}

Dans cet exemple, aucune propriété avancée de mise en page n’a été utilisé, seuls des propriétés modifiant la boîte de chaque élément. En changeant le type de certaines boîtes (display: block) on peut avoir la main sur leur disposition.

Observez les différences de comportement de certains éléments avec la version précédente sans CSS.

Expérimentez, essayez de modifier les différentes propriétés de ce exemple pour en faire votre propre mise en page.

Des outils de mise en page

Si le flux permet d’avoir un premier niveau de mise en page, CSS dispose d’outils complémentaire pour la mise en page : flexbox et grid, deux modules partageant des similarités permettant chacun de fournir des solutions différentes de mise en page.

Flex

Flexbox est un mécanisme de mise en page permettant de gérer la disposition d’éléments HTML sur l’axe vertical ou horizontal et chaque élément d’une mise en page flexbox peut changer de dimension selon l’espace disponible, voici ce que permet de faire flexbox :

Aller plus loin avec flexbox

Grid

Grid et un mécanisme très similaire à flexbox qui va permettre de gérer une mise en page sur deux axes, horizontaux et verticaux. Voici les fonctionnalités complémentaires qu’ajoute grid :

Pour aller plus loin avec grid

Flex ? Grid ? Les deux ?

Cette question, quand utiliser grid ou flexbox est arrivée assez rapidement avec cette nouveauté technique. De manière générale, dans une page HTML les deux mécanismes de mise en page cohabitent mais ne s’applique pas pour les mêmes objectifs.

grid est plutôt dédié à la mise en page globale d’un document HTML alors que flexbox est très adapté à la mise en page dans des composants de cette même page.

Quelques articles sur le sujet

Les positions

Le flux est un élément fondamental de la mise en page en CSS, flexbox et grid permettent de modifier ce flux sur les éléments que l’on souhaite mettre en page. En CSS il est aussi possible de sortir certains éléments de ce flux.

Positions static, relative, absolute fixed et sticky