Comment construire une navigation par bandes avec Flexbox

Grâce à la flexbox, nous pouvons maintenant construire des mises en page très attrayantes et modernes avec une relative facilité. Dans ce didacticiel, nous allons examiner une interface récemment utilisée pour les parcs nationaux de Google et voir comment flexbox peut nous aider à l'améliorer..

 Comme toujours, avant d'aller plus loin, voyons ce que nous allons construire (vous devrez peut-être consulter la version la plus grande, car le plein effet débute dans des fenêtres d'une largeur supérieure à 800 pixels):

Veillez à survoler les liens pour déclencher les effets correspondants. 

Le balisage

Commençons par examiner le balisage que nous allons utiliser pour construire cette présentation. Nous définissons un div élément comportant cinq liens (vous pouvez utiliser les éléments que vous jugez appropriés). Chacun de nos liens contient un div avec la classe de recouvrir. Ci-dessous, vous pouvez voir le squelette de notre code:

Styles CSS initiaux

Avec le balisage prêt, nous commençons à définir certains styles CSS initiaux, notamment:

Voici une partie du code CSS démontrant ce que nous avons décrit ci-dessus:

.flex-wrapper display: flex; hauteur: 100vh;  .flex-wrapper a position: relative; flex: 1; taille du fond: couverture; position de fond: centre; répétition de fond: non répétée; transition: flex .4s;  .flex-wrapper .one image-fond: url (IMAGE_PATH); couleur de fond: rouge;  .flex-wrapper a: hover flex: 3; 

Jusqu'ici, si nous visionnons la démo dans un navigateur prenant en charge flexbox, nous verrons le résultat suivant:

Styliser la superposition

Notre prochaine étape consiste à attribuer quelques styles à la superposition. Voici ce que nous ferons:

  • Donnez à la superposition les mêmes dimensions que le lien parent. Nous pouvons obtenir ce comportement en le positionnant de manière absolue (par rapport au parent immédiat), puis en spécifiant des valeurs nulles pour toutes les propriétés de décalage.. 
  • Définissez la superposition en tant que conteneur flexible. De cette façon, nous pouvons centrer son enfant direct (c.-à-d.. .superposition-intérieure élément) verticalement et horizontalement.
  • Ajouter un fond gris semi-transparent à la superposition lorsque nous survolons le lien parent.

Voici les styles CSS associés:

.flex-wrapper .overlay display: flex; align-items: centre; justifier-contenu: centre; rembourrage: 0 10px; position: absolue; en haut: 0; à droite: 0; en bas: 0; gauche: 0; transition: couleur de fond .4s;  .flex-wrapper a: survolez .overlay background-color: rgba (0, 0, 0, .5); 

Superposition intérieure

Maintenant, il est temps de styliser les parties intérieures de notre superposition. Par défaut, ceux-ci sont masqués et ne doivent apparaître que lorsque nous survolons le lien parent correspondant. Mais pas tout de suite, nous les révélerons après un petit délai. Ce délai est important. si nous ne le définissons pas spécifiquement, l'effet de transition aura l'air un peu moche. Supprimez-le et testez la démo pour comprendre ce que je veux dire.. 

Donc, pour récapituler, le lien grossit d’abord, puis les éléments superposés deviennent visibles. Nous utilisons aussi le translate3d () créer des effets de diapositive. Dernier point mais non le moindre, nous utilisons le transformer-style: preserve-3d pirater (ou un similaire) pour éviter les effets de scintillement sur différents navigateurs.

Et voici les styles CSS associés:

.flex-wrapper .overlay-inner * visibilité: caché; opacité: 0; transformer-style: preserve-3d;  .flex-wrapper .overlay h2 transform: translate3d (0, -60px, 0);  .flex-wrapper .overlay p transform: translate3d (0, 60px, 0);  .flex-wrapper a: survolez .overlay-inner * opacity: 1; visibilité: visible; transformer: aucun; transition: tous .3s .3s; 

Voyons ce que cela nous a donné.


Devenir sensible

La page a fière allure sur les grands écrans, mais peut-être sur les petits, voire sur les écrans moyens, nous devrons faire quelques ajustements. Par exemple, voici quelques choses que nous pouvons faire:

  •  Retournez l’axe principal du conteneur Flex en ajoutant direction de flexion: colonne à cela. Ce faisant, les éléments flexibles vont circuler de haut en bas.
  • Annuler tous les effets de transition et afficher les éléments de superposition par défaut . 

Notre requête multimédia basée sur le premier ordinateur de bureau ressemble à ce qui suit (j'ai utilisé 800px uniquement parce que cela convient aux démos intégrées de cette publication: vous pouvez choisir celui qui vous convient le mieux):

Écran @média et (largeur maximale: 800px) .flex-wrapper direction-flex: colonne;  .flex-wrapper a: hover flex: 1;  .flex-wrapper a: survolez .overlay background-color: transparent;  .flex-wrapper .overlay h2, .flex-wrapper .overlay p opacity: 1; visibilité: visible; transformer: aucun; 

Voici la dernière apparition de notre navigation:

Prise en charge du navigateur

La démo fonctionne dans tous les navigateurs récents qui supportent flexbox. 

Dans certains navigateurs, vous remarquerez peut-être que l’animation de la fléchir la propriété n'est pas aussi lisse qu'elle devrait être, ou peut-être ne fonctionne pas du tout. Par exemple, IE11 n'anime pas cette propriété, contrairement à Edge. C'est assez raisonnable, compte tenu du fait que la flexbox est un nouveau mode de mise en page qui continue de gagner du terrain..

Conclusion

Dans ce tutoriel, nous avons amélioré nos connaissances en matière de flexbox en apprenant à créer une présentation de navigation élégante. J'espère que vous avez apprécié ce que nous avons construit ici et que vous vous êtes inspiré de vos prochains projets.!

Si vous construisez une présentation similaire, n'oubliez pas de nous montrer l'approche (solution purement CSS ou JavaScript) que vous avez utilisée..  

Dans la nature   

Avant de terminer, j'aimerais partager avec vous quelques sites qui utilisent une présentation similaire à celle que nous venons de créer:

  • Google Arts et culture
  • Navigateur obsolète
  • Sykes Cottages