Le modèle «carte» a connu un grand succès ces derniers temps, mais la façon dont nous les construisons reste limitée en raison du CSS disponible. Jusqu'à présent, c'est. En combinant CSS Grid et Flexbox, nous pouvons créer des cartes parfaitement alignées, qui se comportent de manière réactive et qui s’adaptent au contenu qu’elles contiennent. Voyons comment!
Nous allons construire cette interface utilisateur de carte (consultez la version complète pour une idée plus claire):
À différents points d'arrêt, la configuration de la carte changera comme suit:
1: petit, 2: moyen, 3: grande fenêtreLorsque Flexbox est arrivé sur la scène CSS, des cris de joie ont été entendus à travers le monde. Enfin, nous avions un module de disposition pour résoudre toutes nos frustrations liées au flottement. Mais ce n'était pas vraiment le cas. Flexbox fonctionne mieux pour répartir les éléments sur un seul axe. soit horizontalement le long d'une ligne, soit verticalement sous forme de colonne. Construire une grille vraiment fluide avec Flexbox est difficile.
Grille, cependant, est destiné à disposer des éléments sur deux axes (ou dimensions); horizontalement et verticalement. Dans ce didacticiel, nous allons utiliser chacun d’eux dans le but pour lequel il a été conçu, ce qui nous donne une solution vraiment solide. Commençons!
Récemment, bbc.co.uk a lancé (en version bêta) sa dernière version, propre et spacieuse avec son interface utilisateur de carte. Ignorant les gros titres, cela a l'air génial.
Les cartes du haut sont construites et alignées sur la ligne avec Flexbox, mais nous allons développer la disposition en utilisant Grid.
Remarque: pour suivre, vous aurez besoin d'un navigateur qui supporte la grille. Voici quelques informations pour vous aider à démarrer.
Commençons par un wrapper pour notre grille Placez autant de cartes que vous le souhaitez. nous en utilisons sept. Chacun a une vignette Commençons maintenant certains styles en organisant chacun de ces éléments dans une grille. Remarque: s’il s’agit de votre première incursion dans «Grid», vous voudrez peut-être vous mettre au courant en lisant les premiers tutoriels de la rubrique Présentation de la disposition en grille CSS. Nous allons commencer par le mobile ici, donc les premiers styles donneront à notre wrapper une largeur et le centrer, puis définirons quelques règles de grille: Plus important encore, nous affirmons ici que notre Puis nous déclarons Enfin, nous définissons un Sur des fenêtres plus larges (500px est complètement arbitraire), nous allons changer le Enfin, pour les écrans plus grands, nous choisirons une disposition à quatre colonnes.. Ici on aurait également pu écrire Alors qu'est-ce que cela nous a donné? Cela nous a donné une structure de grille assez solide, et si vous êtes un fan de brutalisme, vous voudrez peut-être garder des choses comme celles-ci, mais pour tout le monde, donnons à nos cartes un peu plus des cartes.. Nous allons commencer par ceci: Cela nous donne quelques styles de base: un fond blanc, pas de soulignement pour le texte, une couleur grise et une Ensuite, nous déclarons que la carte est Faisons quelques améliorations avant de plonger plus avant dans Flexbox. Ajouter un Puis, en vol stationnaire, soulevez légèrement la carte et accentuez l’ombre: Nous allons maintenant ajouter quelques styles généraux à la typographie pour modifier les couleurs et l’espacement.. Voici ce que vous devriez avoir: Chaque vignette sera appliquée en tant qu’image d’arrière-plan, nous allons donc ajouter des balises, comme ceci: Maintenant, nous allons nous assurer que le Bon travail, ça nous donne ceci: Nous souhaitons maintenant que le nom de l'auteur soit aligné au bas de la carte, quel que soit le contenu au-dessus. C’est là que Flexbox intervient à nouveau: Nous utilisons la sténographie Ensuite, nous déclarons que l'article est un conteneur flexible à part entière et nous déclarons à nouveau C'est génial, mais cela nous donne ces étranges paragraphes errants au milieu de nos cartes. Pour les aligner correctement, ajoutons Meilleur! À ce stade, nous sommes pratiquement bouclés, mais ce que Grid nous permet de faire maintenant est de changer complètement la présentation en plaçant nos éléments de grille à l'endroit de notre choix et à la taille de notre choix. Pour cette démo, nous voulions créer la toute première carte (appelons-la notre "carte sélectionnée") large de deux colonnes pour autre chose que les plus petites vues.. Dans notre première requête média, faisons ceci: Pour revenir à notre didacticiel d’introduction sur les zones de la grille, nous affirmons ici que, au-delà de 500 pixels, le premier élément devrait commencer à la ligne de grille 1 et s’étendre sur deux pistes. Le reste des éléments de la grille se met automatiquement en place. Au sein de cette même requête des médias, j'ai également heurté le Cela a été un bon exercice d’utilisation de Grid avec Flexbox; Grid a géré notre mise en page principale en deux dimensions, puis Flexbox a géré la distribution verticale des éléments dans nos cartes. Amusez-vous à jouer avec!
, qui à son tour abrite un
, une
pour l'auteur, et peut-être même un
pour plus d'informations.
Bases de la grille
.bande largeur: 90%; largeur maximale: 1240px; marge: 0 auto; affichage: grille; grid-template-columns: 1fr; grid-template-rows: auto; intervalle de grille: 20px;
.B: et
sera affichage: grille;
. Nous déclarons alors Grille-modèle-colonnes
de 1fr
, qui dit que chaque colonne prendra une seule fraction de celles disponibles. Nous n'en avons déclaré qu'un pour l'instant, donc chaque colonne remplira toute la largeur.grid-template-rows: auto;
. C'est en fait la valeur par défaut. Nous aurions donc pu l'omettre. Cela signifie que la hauteur des lignes sera déterminée uniquement par le contenu..fossé
de 20px
, ce qui nous donne nos gouttières de colonne et de rangée.Requête multimédia Numero Uno
Grille-modèle-colonnes
pour nous donner un possible deux cartes par ligne. Maintenant, il y a deux colonnes, chacune étant l'une des deux fractions disponibles.@media only screen et (min-width: 500px) .band grid-template-columns: 1fr 1fr;
Requête multimédia Numero Dos
Écran @média uniquement et (largeur minimale: 850 pixels) .band colonnes-modèle-grille: 1fr 1fr 1fr 1fr 1fr;
répéter (4, 1fr)
au lieu de 1fr 1fr 1fr 1fr
. Pour plus d'informations sur la façon dont le fr
unité fonctionne, consultez CSS Grid Layout: Colonnes fluides et meilleures gouttières.Styliser les cartes
.carte fond: blanc; texte-décoration: aucun; couleur: # 444; box-shadow: 0 2px 5px rgba (0,0,0,0,1); affichage: flex; direction de flexion: colonne; hauteur minimale: 100%;
boîte ombre
pour nous donner de la profondeur.affichage: flex;
. C'est important, nous allons aligner le contenu de la carte verticalement, en utilisant Flexbox. Par conséquent, nous déclarons également direction de flexion: colonne;
pour nous donner notre axe vertical. Enfin nous déclarons hauteur minimale: 100%;
afin que toutes les cartes remplissent la hauteur du parent (notre élément de grille). Bon travail! Cela nous donne ceci:Hover State
position: relative;
et un transition
afin que nous puissions déplacer la carte en vol stationnaire: position: relative; en haut: 0; transition: tous les .1 s'installent facilement;
.carte: hover top: -2px; boîte-ombre: 0 4px 5px rgba (0,0,0,0,2);
Typographie
.article de carte padding: 20px; / * typographie * / .card h1 taille de la police: 20px; marge: 0; couleur: # 333; .card p line-height: 1.4; .card span taille de la police: 12px; poids de police: gras; couleur: # 999; text-transform: majuscule; espacement des lettres: 0,05 m; marge: 2em 0 0 0;
Vignettes
.pouce
Les div ont des dimensions et que les images d’arrière-plan les remplissent correctement:.carte .thumb padding-bottom: 60%; taille du fond: couverture; position de fond: centre centre;
Article Flexbox
.article de carte padding: 20px; flex: 1; affichage: flex; direction de flexion: colonne; justifier-contenu: espace-entre;
flex: 1;
pour indiquer que cet élément flex (il est toujours un enfant du conteneur flex d'origine) devrait devenir suffisamment encombrant.direction de flexion: colonne;
nous donner une distribution verticale. enfin, justifier-contenu: espace-entre;
stipule que tous les éléments flexibles doivent être répartis uniformément le long de l’axe, avec un espacement égal entre.croissance flexible: 1;
(ou simplement flex: 1;
) pour qu'ils remplissent tout l'espace vertical restant, en s'alignant bien vers le haut..carte p flex: 1; / * faire croître p pour remplir l'espace disponible * / line-height: 1.4;
Modification de la grille
@Media only screen et (min-width: 500px) … item-1 grid-column: 1 / span 2;
taille de police
de la rubrique dans notre carte sélectionnée.Conclusion
Lectures complémentaires