IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Cours complet Bootstrap 4

Premiers pas


précédentsommairesuivant

V. Mise en page

L'intérêt principal d'une grille est de réaliser une mise en page. Maintenant que vous savez comment utiliser la grille de Bootstrap, nous allons voir dans ce chapitre quelques exemples pour structurer correctement une page.

V-A. Mise en page simple

Commençons par quelque chose de simple avec un entête, un menu à gauche, une section à droite et un pied de page :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<div class="container">
  <header class="row">
    <div class="col">
      Entete
    </div>
  </header>
  <div class="row">
    <nav class="col-lg-2">
      Menu
    </nav>
    <section class="col-lg-10">
      Section
    </section>
  </div>
  <footer class="row">
    <div class="col">
      Pied de page
    </div>
  </footer>
</div>

Le résultat se trouve à la figure suivante.

Image non disponible

J'ai utilisé les classes pour grand écran avec les classes col-lg-* pour le menu et la section. On aura évidemment le même rendu sur très grand écran. Par contre à la réduction, on se retrouve avec un empilage dès qu'on passe en dessous de 992px :

Image non disponible

Si je veux que ma mise en forme reste stable aussi pour les écrans moyens, comment faire ? Il suffit d'utiliser les classes col-md-* à la place de col-lg-*, ce qui a pour effet de déplacer la limite à 768px. De la même façon, l'utilisation des classes col-sm-* déplace la limite à 576px…

V-B. Mise en page plus chargée

Considérons maintenant un cas un peu plus riche :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
<div class="container">
  <header class="row">
    <div class="col">
      Entete
    </div>
  </header>
  <div class="row">
    <nav class="col-md-2">
      Menu
    </nav>
    <section class="col-md-10">
      Section
      <div class="row">
        <article class="col-lg-10">
          Article
        </article>
        <aside class="col-lg-2">
          Aside
        </aside>
      </div>
    </section>
  </div>
  <footer class="row">
    <div class="col">
      Pied de page
    </div>
  </footer>
</div>

Le résultat se trouve à la figure suivante pour un écran grand ou très grand :

Image non disponible

On a conservé l'entête et le pied de page, ainsi que le menu, mais on a intégré dans le contenu un article et un aside. L'ensemble est prévu pour fonctionner sur écrans grands et très grands. Pour les tablettes, on se retrouve avec un empilage pour le contenu de la section (utilisation de classes col-md-* pour tout sauf article et aside) :

Image non disponible

Et comme on n'a rien prévu de spécial pour les smartphones, tout s'empile :

Image non disponible

V-C. Plusieurs asides

Enrichissons encore la mise en page :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<div class="container">
  <header class="row">
    <div class="col">
      Entete
    </div>
  </header>
  <div class="row">
    <nav class="col-md-2">
      Menu
    </nav>
    <section class="col">
      Section
      <div class="row">
        <article class="col-lg-10">
          Article
        </article>
        <div class="col">
          <div class="row">
            <aside class="col">
              Aside 1
            </aside>
            <div class="w-100"></div>
            <aside class="col">
              Aside 2
            </aside>
          </div>
        </div>
      </div>
    </section>
  </div>
  <footer class="row">
    <div class="col">
      Pied de page
    </div>
  </footer>
</div>

Le résultat se trouve à la figure suivante pour un écran grand ou très grand :

Image non disponible

Maintenant nous avons deux asides à côté de l'article. Pour y arriver, il faut deux niveaux d'imbrication.

L'ensemble est prévu pour fonctionner sur écrans grands et très grands. Pour les tablettes, on se retrouve avec un empilage pour le contenu de la section (utilisation de classes col-lg-* pour tout ce qui est dans la section):

Image non disponible

Et comme on n'a rien prévu de spécial pour les smartphones, tout s'empile :

Image non disponible

V-D. Combinaison de classes col-*

Pour le moment nous avons utilisé juste une classe col-* pour chaque élément HTML. Mais il est parfois nécessaire d'en utiliser plusieurs lorsqu'on veut un rendu différent selon le support. Le plus simple est de voir un exemple. Je veux sur une page avoir des petites photos côte à côte. Supposons que je parte de cette structure pour cette partie de la page :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link href="css/bootstrap.css" rel="stylesheet">
    <style type="text/css">
      [class*="col"] { margin-bottom: 20px; }
      img { width: 100%; }
      body { margin-top: 10px; }
    </style>
  </head>
  <body>
    <div class="container">
      <section class="row">
        <div class="col-lg-2"><img src="images/t1.jpg" alt="Tigre"></div>
        <div class="col-lg-2"><img src="images/t2.jpg" alt="Tigre"></div>
        <div class="col-lg-2"><img src="images/t3.jpg" alt="Tigre"></div>
        <div class="col-lg-2"><img src="images/t4.jpg" alt="Tigre"></div>
        <div class="col-lg-2"><img src="images/t5.jpg" alt="Tigre"></div>
        <div class="col-lg-2"><img src="images/t6.jpg" alt="Tigre"></div>
        <div class="col-lg-2"><img src="images/t7.jpg" alt="Tigre"></div>
        <div class="col-lg-2"><img src="images/t8.jpg" alt="Tigre"></div>
        <div class="col-lg-2"><img src="images/t9.jpg" alt="Tigre"></div>
        <div class="col-lg-2"><img src="images/t10.jpg" alt="Tigre"></div>
        <div class="col-lg-2"><img src="images/t11.jpg" alt="Tigre"></div>
        <div class="col-lg-2"><img src="images/t12.jpg" alt="Tigre"></div>
      </section>
    </div>
  </body>
</html>

Le rendu sur grand et très grand écran est parfait avec six photos sur la largeur :

Image non disponible

Mais ça se gâte quand je rétrécis la fenêtre, puisque je sais qu'en dessous de 992px les éléments s'empilent. Du coup je me retrouve avec une image sur la largeur, et comme je les ai prévues en basse résolution, elles pixelisent :

Image non disponible

L'idéal serait d'avoir :

  • sur moyen et grand écran : six images sur la largeur ;
  • sur tablette : quatre images sur la largeur ;
  • sur smartphone en mode paysage : trois images sur la largeur ;
  • sur smartphone en mode portrait : deux images sur la largeur.

Comment réaliser cela ? Tout simplement en combinant les classes col-* :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<div class="container">
  <section class="row">
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t1.jpg" alt="Tigre"></div>
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t2.jpg" alt="Tigre"></div>
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t3.jpg" alt="Tigre"></div>
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t4.jpg" alt="Tigre"></div>
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t5.jpg" alt="Tigre"></div>
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t6.jpg" alt="Tigre"></div>
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t7.jpg" alt="Tigre"></div>
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t8.jpg" alt="Tigre"></div>
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t9.jpg" alt="Tigre"></div>
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t10.jpg" alt="Tigre"></div>
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t11.jpg" alt="Tigre"></div>
    <div class="col-6 col-sm-4 col-md-3 col-lg-2"><img src="images/t12.jpg" alt="Tigre"></div>
  </section>
</div>

Voici le résultat sur tablette (classes col-md-3 actives) :

Image non disponible

Voici le résultat sur smartphone en mode paysage (classes col-sm-4 actives) :

Image non disponible

Voici enfin le résultat sur smartphone en mode portrait (classes col-6 actives) :

Image non disponible

On a donc obtenu facilement une adaptation de la présentation des photos en fonction du support utilisé pour les visualiser.

V-E. En résumé

  • Pour adapter l'affichage selon le support utilisé il suffit d'utiliser les bonnes classes ‌col-*.
  • Pour obtenir un comportement différent selon les supports on est parfois amené à combiner les classes col-*.

précédentsommairesuivant

Copyright © 2019 Maurice Chavelli. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.