Nous allons voir dans cet article comment nous pouvons disposer simplement des éléments dans une page web avec quelques propriétés CSS. Et pour celà je vais m’appuyer sur les flexbox. Si vous regardez les navigateurs supportant cette feature, je pense que vous pouvez maintenant l’utiliser dans la plupart des cas.
Mon but est de montrer comment répondre à 2 problématiques
Mettre en place un layout avec un header et un footer fixes, et un corps de page qui prend le reste de l’espace et permet de scroller si besoin
Disposer des éléments sous forme de grille avec potentiellement des zones plus grandes que d’autres
Les flexbox (flexible box) permettent via quelques règles de disposer des élements dans un élément parent (position, alignment, espacement…). Le but de cette spécification est d’essayer d’optimiser l’espace disponible dans l’élément parent. Nous pouvons définir via quelques propriétés le comportement lors d’un redimensionnement (extension des box ou réduction).
Quand on utilise les flexbox nous n’avons pas de notion de droite/gauche, haut/bas. Nous pouvons définir une disposition selon un axe : ligne ou colonne.
Pour disposer les éléments sous forme de grille, une autre spécification, Grid est en cours d’adoption mais elle loin d’être utilisable sous tous les devices. C’est pourquoi j’utiliserai aussi les flexbox pour apporter une réponse à ce problème
Il est temps de prendre un exemple. Nous allons construire cette page
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Exemple de flexbox</title>
<link rel="stylesheet" href="style.css">
<link rel="icon" href="favicon.ico" type="image/x-icon">
</head>
<body>
<header>
<a href="#">Link 1 </a>
<a href="#">Link 2 </a>
<a href="#">Link 3 </a>
</header>
<main>
<p class="logo">
<img src="assets/img/logo_1500.png" class="img-responsive">
</p>
<grid>
<div id="extended">Column 1</div>
<div>Column 2</div>
<div>Column 3</div>
<div>Column 4</div>
</grid>
</main>
<footer>
All right reserved - @2016 Guillaume EHRET
</footer>
</body>
</html>
Pour le moment le rendu est assez basique
Pas très responsive tout ça…. Nous allons compléter au fur et à mesure notre feuille de style