Modelul "cardului" a avut un succes mare în ultima vreme, dar modul în care le construim este încă limitat din cauza CSS disponibilă pentru noi. Până acum, asta este. Prin combinarea CSS Grid și Flexbox, putem face cărți care se aliniază perfect, se comportă sensibil și se adaptează la conținutul lor. Să vedem cum!
Vom construi acest card UI (verificați versiunea completă a paginii pentru o idee mai clară):
La diferite puncte de oprire, aranjamentul de carte se va schimba după cum urmează:
1: mic, 2: mediu, 3: port mareCând Flexbox a lovit scena CSS, strigătele de bucurie au putut fi auzite în întreaga lume; în cele din urmă am avut un modul de aspect pentru a rezolva toate frustrările noastre plutitoare. Dar nu era cazul. Flexbox funcționează cel mai bine pentru distribuirea elementelor de-a lungul unei singure axe; fie orizontal de-a lungul unui rând, fie vertical ca coloană. Construirea unei rețele cu fluid cu Flexbox este dificilă.
Grilă, totuși, este destinate depunerii de elemente pe două axe (sau dimensiuni); orizontal și vertical. În acest tutorial vom folosi fiecare pentru scopul în care a fost destinat, oferindu-ne o soluție foarte solidă. Sa incepem!
Recent, bbc.co.uk a lansat (în versiune beta) cea mai recentă versiune a acestora, devenind curată și spațioasă cu ajutorul interfeței cu carduri. Ignorând titlurile mizerabile, acest lucru arată minunat.
Cărțile de sus sunt construite și aliniate pe rând cu Flexbox, dar vom extinde aspectul folosind Grid.
Notă: pentru a urmări de-a lungul veți avea nevoie de un browser care acceptă Grid. Iată câteva informații pentru a începe.
Să începem cu un pachet pentru grila noastră Plasați cât mai multe cărți doriți; folosim șapte. Fiecare are o miniatură Acum, să lansăm câteva stiluri prin aranjarea fiecăruia dintre ele într-o rețea. Notă: dacă aceasta este prima dvs. incursiune în "Grid", poate doriți să obțineți până la viteza de citire a tutorialelor inițiale în Înțelegerea CSS Grid Layout. Vom merge mai întâi pe telefonul mobil aici, astfel încât primele stiluri vor da lărgimii noastre și o va centra, apoi vom stabili câteva reguli Grid: Cel mai important, aici afirmăm că noi Apoi afirmăm În cele din urmă, definim a În porturile de dimensiuni mai largi (500 pixeli este complet arbitrară), vom schimba În cele din urmă, pentru ecrane mai mari vom merge cu un aspect de patru coloane. Aici am putea fi scris în egală măsură Deci ce ne-a dat asta? Asta ne-a dat o structură destul de solidă și dacă sunteți un fan al brutalismului, poate doriți să păstrați lucruri de genul acesta, dar pentru oricine altcineva să facem cărțile noastre să pară puțin mai mult ca cărțile. Vom începe cu acest lucru: Acest lucru ne oferă câteva stiluri de bază: un fundal alb, nici o subliniere a textului, o culoare gri și o ordine Apoi declaram cardul ca fiind Să facem câteva îmbunătățiri înainte de a vă scufunda în Flexbox. Adauga o Apoi, pe hover, ridicați ușor cardul și faceți umbra mai pronunțată: Acum vom adăuga câteva tipuri generale de tipografie pentru a modifica culorile și spațiul. Iată ce ar trebui să aveți: Fiecare miniatură va fi aplicată ca imagine de fundal, așa că vom adăuga o anumită marcaj la bord, astfel: Acum ne asigurăm Bună treabă, care ne dă acest lucru: Acum dorim ca numele autorului să fie aliniat în partea de jos a cardului, indiferent de cât de mult conținut este deasupra acestuia. Acesta este locul unde Flexbox vine din nou: Folosim stenograma Apoi, declarăm că articolul este un container flexibil în sine și, din nou, declarăm Asta e minunat, dar ne dă aceste paragrafe ciudate, rătăcite în mijlocul cărților noastre. Pentru a le alinia corect, să adăugăm Mai bine! În acest moment suntem destul de înfășurați, dar singurul lucru pe care Grid-ul ne permite să-l facem este să schimbați complet aspectul prin plasarea elementelor noastre de grilă oriunde vrem și la orice dimensiune ne place. Pentru acest demo, am vrut să facem prima carte (să o numim "cartea noastră") cu două coloane pentru orice altceva decât cele mai mici ferestre de vizualizare. În prima noastră interogare media, hai să facem acest lucru: Revenind la tutorialul nostru introductiv pe zonele de rețea, aici afirmăm că, dincolo de 500px, primul element ar trebui să înceapă pe linia 1 și să se întindă pe două piste. Restul elementelor de rețea intră automat în poziție. În cadrul aceleiași interogări mass-media am bătut și eu Acesta a fost un exercițiu bun în utilizarea Grid cu Flexbox; Gridul a tratat aspectul nostru principal bidimensional, apoi Flexbox a manipulat distribuția verticală a elementelor din cadrul cardurilor noastre. Distrează-te și jucați cu el!
, care la rândul său găzduiește un
, A
pentru autor, și poate chiar și a
pentru mai multe informații.
Grid Elementele de bază
.bandă lățime: 90%; max-lățime: 1240px; marja: 0 auto; afișare: grilă; grilă-șablon-coloane: 1fr; grilă-șablon-rânduri: auto; grilă-decalaj: 20 pixeli;
.grup
va fi afișare: grilă;
. Apoi declarăm grilă matriță coloane
de 1fr
, care spune că fiecare coloană va ocupa o singură fracțiune din cele disponibile. Vom declara doar unul acum, astfel încât fiecare coloană să umple întreaga lățime.grilă-șablon-rânduri: auto;
. Aceasta este de fapt valoarea implicită, așa că am fi putut omite și înseamnă că înălțimile de rând vor fi determinate doar de conținut.grid-gap
de 20px
, care ne dă jgheaburile și coloanele noastre.Media Query Numero Uno
grilă matriță coloane
pentru a ne oferi o posibilă două cărți pe rând. Acum există două coloane, fiecare fiind una dintre cele două fracții disponibile.@media numai pe ecran și (min-lățime: 500px) .band grid-template-coloane: 1fr 1fr;
Media Query Numero Dos
@media numai pe ecran și (min-width: 850px) .band grid-template-coloane: 1fr 1fr 1fr 1fr;
repetați (4, 1fr)
in loc de 1fr 1fr 1fr 1fr
. Pentru mai multe informații despre modul în care fr
unitate de lucru, verificați CSS Grid Layout: Coloane fluide și jgheaburi mai bune.Modelarea cardurilor
.carte fundal: alb; text-decoration: nici unul; culoare: # 444; box-shadow: 0 2px 5px rgba (0,0,0,0,1); afișaj: flex; direcție flexibilă: coloană; min-înălțime: 100%;
box-shadow
să ne dăm o anumită adâncime.afișaj: flex;
. Acest lucru este important - vom alinia conținutul cardului pe verticală, folosind Flexbox. Prin urmare, afirmăm și noi direcție flexibilă: coloană;
să ne dea axa noastră verticală. În cele din urmă, noi declarăm min-înălțime: 100%;
pentru ca toate cardurile să umple înălțimea părintelui (elementul nostru de rețea). Buna treaba! Acest lucru ne oferă acest lucru:Starea de hover
poziție: relativă;
și a tranziție
astfel încât să putem muta cardul pe hover: poziție: relativă; top: 0; tranziție: toate .1s ușurință;
.carte: hover top: -2px; box-shadow: 0 4px 5px rgba (0,0,0,0,2);
Tipografie
.carte de articol padding: 20px; / * tipografie * / .card h1 font-size: 20px; marja: 0; culoare: # 333; .card p (înălțimea liniei: 1,4; . Spanul cardului font-size: 12px; font-weight: bold; culoare: # 999; text-transform: majuscule; punct-spațiere: .05em; marja: 2em 0 0 0;
Miniaturi
.deget mare
divs au unele dimensiuni, iar imaginile de fundal le umple corect:.cardul .thumb padding-bottom: 60%; dimensiunea fundalului: capac; fundal-poziție: centru centru;
Articol Flexbox
.carte de articol padding: 20px; flex: 1; afișaj: flex; direcție flexibilă: coloană; justify-content: spațiu-între;
flex: 1;
pentru a afirma că acest articol flexibil (încă este un copil al containerului original de flex) ar trebui să crească pentru a ocupa tot spațiul disponibil.direcție flexibilă: coloană;
să ne dăm o distribuție verticală. în cele din urmă, justify-content: spațiu-între;
afirmă că toate elementele flexibile din interiorul acestuia ar trebui să fie împrăștiate uniform pe axă, cu distanțe egale între.flex-crestere: 1;
(sau pur și simplu flex: 1;
), astfel încât să umple tot spațiul vertical rămas, aliniându-se frumos la partea de sus..cartela p flex: 1; / * make p cresc pentru a umple spațiul disponibil * / line-height: 1.4;
Modificarea grilei
@media numai pe ecran și (min-width: 500px) ... item-1 grid-column: 1 / span 2;
marimea fontului
din titlul de pe cartela noastră recomandată.Concluzie
Citirea în continuare