Advertisement
  1. Web Design
  2. CSS Grid Layout
Webdesign

Résoudre les problèmes avec CSS Grid et Flexbox : La carte UI

by
Difficulty:IntermediateLength:MediumLanguages:

French (Français) translation by Henri Lotin (you can also view the original English article)

Le modèle de « carte » a connu beaucoup de succès ces derniers temps, mais la façon dont nous le construisons est encore limitée à cause des CSS dont nous disposons. Jusqu'à présent, voilà. En combinant CSS Grid et Flexbox, nous pouvons faire des cartes qui s’alignent parfaitement, sont responsive, et s’adaptent au contenu en leur sein. Nous allons voir comment !

Ce que nous allons construire

Nous allons construire cette carte UI (consultez la version pleine page pour avoir une idée plus claire) :

À divers breakpointst, l’arrangement de la carte se modifiera comme suit :

Breakpoints of CSS Grid layout
1 : small, 2 : medium, 3 : large viewport

CSS Grid vs Flexbox

Quand Flexbox a fait son entrée sur la scène, CSS a crié d'une joie qu'on pouvait entendre à travers le monde ; Enfin, nous avons eu un module de mise en page pour résoudre toutes nos frustrations float. Mais ce n’était pas vraiment le cas. Flexbox fonctionne mieux pour distribuer les éléments le long d'un axe unique ; que ce soit horizontalement le long d’une ligne, ou verticalement sous forme de colonne. Construire un réseau véritablement fluide avec Flexbox est difficile.

Grid, toutefois, est conçue pour mettre en pages des éléments à travers deux axes (ou dimensions) ; horizontalement et verticalement. Dans ce tutoriel nous allons utiliser chacun d’eux pour le but pour lequel il est prévu, nous donnant une solution vraiment solide. Commençons !

Source d’inspiration

bbc.co.uk a lancé récemment (en version bêta) leur dernière itération, propre et spacieuse avec leur carte UI. Ignorant les titres misérables, c’est superbe.

Les cartes supérieures sont construites et alignées sur la rangée avec Flexbox, mais nous allons étendre la mise en pages à l’aide de Grid.

Remarque : pour suivre tout au long vous aurez besoin d’un navigateur qui prend en charge Grid. Voici quelques infos pour vous aider à démarrer.

Notre balisage de carte

Commençons avec un wrapper pour notre grille <div class="band">, certains éléments de la grille pour tout arranger <div class="item"> et certains ancres (chaque ancre sera une carte) :

Placez autant de cartes que vous le souhaitez ; nous en utiliserons sept. Chacun a une vignette <div class="thumb"> qui nous donnera une image d’arrière-plan par la suite. Puis il y a une balise <article>, qui à son tour contient une balise <h1>, une <span> pour l’auteur et peut-être même un <p> pour plus d’informations.

Bases de Grid

Maintenant nous allons lancer quelques styles en disposant chacun de ces éléments dans une grille.

Remarque : si il s’agit de votre première incursion dans « Grid » vous pouvez vous mettre au diapason en lisant les didacticiels initiaux de Understanding CSS Grid Layout.

Nous irons mobile-first ici, donc les premiers styles donneront à notre enveloppe une largeur et le centreront, puis nous définirons certaines règles de Grid :

Plus important encore, ici nous indiquons que nos .band seront display: grid;. Nous déclarons ensuite grid-template-columns de 1fr, qui dit que chaque colonne prendra une seule fraction de celles disponibles. Nous en avons seulement déclaré une pour l’instant, donc chaque colonne remplira toute la largeur.

Puis nous déclarons grid-template-rows: auto;. C’est effectivement la valeur par défaut, alors nous pourrions l'avoir omise et cela signifie que les hauteurs de ligne seront déterminées uniquement par le contenu.

Enfin, nous définissons un grid-gap de 20px, qui nous donne nos gouttières de lignes et de colonnes.

Media Query Numero Uno

Sur les wider viewports (500px est tout à fait arbitraire), on va changer les grid-template-columns pour nous donner une possibilité de deux cartes par ligne. Maintenant, il y a deux colonnes, chacune étant l’une des deux fractions disponibles.

Media Query Numero Dos

Enfin, pour les écrans plus grands, nous irons avec une disposition à quatre colonnes.

Ici nous pourrions également avoir écrit repeat(4, 1fr) au lieu de 1fr 1fr 1fr 1fr. Pour plus d’informations sur comment l’unité fr fonctionne, consultez CSS Grid Layout: Fluid Columns and Better Gutters.

Donc qu'est-ce que ça nous a donné ?

Styler les cartes

Cela nous a donné une mise en pages de grille assez solide, et si vous êtes un fan de brutalisme vous pouvez garder ce genre de choses, mais pour tout le monde nous allons rendre nos cartes un peu plus cartes.

Nous allons commencer par ceci :

Cela nous donne quelques styles de base : arrière-plan blanc, pas de soulignement pour le texte, une couleur grise et une box-shadow propre pour nous donner de la profondeur.

Ensuite, nous déclarons que la carte soit display: flex;. C’est important – nous allons aligner le contenu de la carte verticalement, à l’aide de Flexbox. C’est pourquoi nous déclarons également flex-direction: column; pour nous donner notre axe vertical. Enfin, nous déclarons min-height: 100%; afin que toutes les cartes comblent la hauteur du parent (notre élément de grille). Beau boulot ! Qui nous donne ceci :

État de survol

Nous allons faire quelques autres améliorations avant de plonger davantage dans Flexbox. Ajoutons une position: relative; et une transition pour que nous puissions déplacer la carte au survol :

Puis au survol, soulevons la carte légèrement et rendons l’ombre plus prononcée :

Typographie

Maintenant, nous allons ajouter quelques styles généraux à la typographie pour altérer les couleurs et l’espacement.

Voici ce que vous devriez avoir :

Vignettes

Chaque vignette sera appliquée comme image d'arrière-plan, donc nous allons ajouter quelques balises dans toutes les tableaux, comme ceci :

Maintenant, nous nous assurerons que les divs .thumb ont certaines dimensions, et que les images de fond les remplissent correctement :

Beau boulot, qui nous donne ceci :

Article Flexbox

Maintenant, nous voulons que le nom de l’auteur soit aligné en bas de la carte, quelle que soit la quantité de contenu qu'il y a au-dessus de lui. C'est là que Flexbox intervient à nouveau :

Nous utilisons le raccourci flex: 1; pour déclarer que cet élément flex (c’est encore un enfant du conteneur flex original) croisse pour occuper tout l’espace disponible.

Ensuite, nous déclarons que l’article est un conteneur flex à part entière, et encore une fois nous déclarons flex-direction: column; pour nous donner la distribution verticale. Enfin, justify-content: space-between; déclare que tous les éléments flex devraient être répartis uniformément le long de l’axe, avec espacement égal.

Tout ça est très bien, mais nous donne ces étranges, errants paragraphes au milieu de nos cartes.

Pour les aligner correctement, nous allons ajouter flex-grow: 1; (ou simplement flex: 1;), ainsi ils remplissent tout l’espace vertical restant, s’alignant joliment vers le haut.

Mieux !

Modification de Grid

À ce stade nous sommes assez bien enveloppé, mais la seule chose que Grid nous permet de faire est maintenant de complètement changer la disposition en plaçant nos éléments de grille, où nous le souhaitons, et à n’importe quelle taille que nous voulons. Pour cette démonstration, nous avons voulu rendre la première carte (appelons-le notre « carte vedette ») large de deux colonnes pour tout autre chose que les plus petites fenêtres.

Dans notre première media query, nous allons procédez comme suit :

Avec nostalgie à notre tutoriel d’introduction sur les zones de grille, ici nous disons que, au-delà de 500px, le premier élément devrait commencer sur la ligne de grille 1 et s’étendre sur deux pistes. Le reste des éléments de la grille se mettent en place automatiquement.

Au sein de cette même requête j’ai également heurté la font-size du titre dans notre carte en vedette.

Conclusion

Cela a été un bon exercice d'utiliser Grid avec Flexbox ; Grid a pris en charge notre mise ne pages principale bidimensionnelle, puis Flexbox a géré la distribution verticale des éléments au sein de nos cartes. Prenez du plaisir à jouer avec !

Lectures supplémentaires

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.