Cum să utilizați Flexbox pentru a crea un aspect modern de design de card CSS

Publicat: 2021-07-10

Datorită Flexbox, un nou mod de aspect în CSS3, putem obține toate cardurile la rând, la propriu. Modelele de carduri au crescut în popularitate în ultimii ani; După cum probabil ați observat, site-urile de socializare au într-adevăr îmbrățișat cardurile. Pinterest și Dribbble folosesc aspectul cardurilor pentru a prezenta informații și imagini. Și dacă vă place Material Design, cardurile Google sunt bine descrise în biblioteca lor de modele.

Îmi plac personal layout-urile cardurilor pentru lizibilitatea lor și cât de defilabile sunt. Ele prezintă „explozia” perfectă de informații într-un mod care este ușor de răsfoit, defilat și scanat simultan.

Cum se creează un aspect de card

Dacă ați încercat vreodată rânduri de conținut de înălțime egală, știți că construirea lor nu a fost întotdeauna ușoară. Probabil că ai fost nevoit să te lăutărești destul de mult ca să-l faci să funcționeze în trecut. Datorită Flexbox, acele zile sunt aproape în urmă. În funcție de nivelul de asistență pentru browser pe care trebuie să-l oferiți, poate fi necesar să includeți unele alternative, dar suportul pentru browser pentru această funcție este destul de fiabil în zilele noastre. Pentru a fi în siguranță, asigurați-vă că consultați Flexbox pe site-ul de încredere Can I use. Și nu uitați, nu ar trebui să faceți niciodată modificări pe site-ul dvs. live. Încercați să experimentați cu Local, o aplicație locală gratuită de dezvoltare WordPress.

Ideea de bază a Flexbox este că puteți seta proprietatea de afișare a unui container la flex , care va „flexa” dimensiunea tuturor containerelor din acesta. Coloanele de înălțime egală și opțiunile de scalare și contractare vor simplifica modul în care pot fi create machete avansate. Începând cu cărți este ca o foaie de înșelăciune Flexbox, dar odată ce stăpânești elementele de bază, poți crea machete mai complexe.

Flexbox și versatilitate

Cardurile sunt versatile, atractive din punct de vedere vizual și ușor de interacționat atât pe dispozitivele mari, cât și pe cele mici, ceea ce este perfect pentru design responsive. Fiecare card acționează ca un container de conținut care se extinde cu ușurință în sus sau în jos. Pe măsură ce dimensiunile ecranului devin mai mici, numărul de carduri din rând scade de obicei și încep să se stivuească pe verticală. Există o flexibilitate suplimentară, deoarece pot avea o înălțime fixă ​​sau variabilă.

Cum se creează aspectul

Vom crea un aspect de card Flexbox care are un rând de patru containere orizontale pe ecrane mai mari, două pe medii și o singură coloană pentru dispozitive mici.

Ilustrație a modului în care cardurile de conținut Flexbox apar pe desktop, tablete și dispozitive mobile

Mai jos este fragmentul de cod pentru a crea un aspect de bază pentru afișarea a patru cărți. Nu includ conținutul interior al cardului (deoarece acesta devine prea lung în eșantioanele de cod), așa că asigurați-vă că puneți niște conținut inițial acolo (și cantitatea de conținut variază între cele patru carduri). De asemenea, există un rând de patru cărți afișate aici pentru a începe, dar mai multe pot fi adăugate dacă doriți să vedeți comportamentul cu mai multe rânduri de conținut. Tot codul poate fi găsit pe Codepen.

Pentru a afișa aspectul nostru într-un model de grilă, va trebui să începem din exterior și să ne străduim. Este important să ne asigurăm că faceți referire la containerul corect, altfel lucrurile vor deveni puțin dezordonate.

Secțiunea cu o clasă de .cards este ceea ce vom viza mai întâi. Proprietatea de afișare a containerului este ceea ce trebuie să schimbăm în flex .

Iată codul HTML cu care veți dori să începeți:

<div class="centered">

            <section class="cards">
                
                <article class="card">
                   <p>content for card one</p>
                </article><!-- /card-one -->

 	<article class="card">
                   <p>content for card two</p>
            </article><!-- /card-two -->

<article class="card">
                  <p>content for card three</p>
            </article><!-- /card-three -->

<article class="card">
                   <p>content for card four</p>
            </article><!-- /card-four -->

	</section>
</div>

Iată CSS-ul pentru a începe:

.cards {
   display: flex;
   justify-content: space-between;
}

Proprietate Flex

Înainte de a intra prea adânc, este bine să cunoașteți elementele de bază ale proprietății flex. Proprietatea flex specifică lungimea articolului, în raport cu restul articolelor flexibile din interiorul aceluiași container. Proprietatea flex este o prescurtare pentru proprietățile flex-grow , flex-shrink și flex-basis . Valoarea implicită este 0 1 auto; . În opinia mea, cel mai bun mod de a înțelege pe deplin Flexbox este să te joci cu diferitele valori și să vezi ce se întâmplă.

Proprietatea flex-grow a unui articol flexibil specifică ce spațiu ar trebui să ocupe în interiorul containerului flexibil articolul.

Ilustrație a cinci carduri Flexbox, cardul doi este mai mare decât celelalte cinci

Proprietatea flex-shrink specifică modul în care articolul se va micșora în raport cu restul articolelor flexibile din același container.

Ilustrație a opt carduri Flexbox, cardul doi este mai mare decât celelalte șapte

Proprietatea flex-basis specifică dimensiunea principală inițială a unui articol flexibil. Această proprietate determină dimensiunea casetei de conținut, dacă nu se specifică altfel utilizând dimensiunea casetei. Auto este implicit atunci când lățimea este definită de conținut, care este similar cu width: auto; . Va ocupa spațiu definit de propriul conținut. Poate exista o valoare specificată care rămâne adevărată așa cum se vede în baza flex-basis: 15em; . Dacă valoarea este 0, lucrurile sunt destul de setate, deoarece elementul nu se va extinde pentru a umple spațiul liber.

Ilustrație a mai multor articole flexibile care ocupă cantități diferite de spațiu în interiorul casetelor de conținut mai mari

Am început cu display: flex; și justify-content: space-between; și în acest moment, lucrurile sunt puțin imprevizibile. Flexbox este folosit, chiar dacă nu este foarte evident în acest moment. Cu această declarație, fiecare dintre elementele flexibile a fost plasat unul lângă celălalt într-un rând orizontal.

Captură de ecran a patru Flexbox-uri neuniforme pe un fundal de floarea-soarelui și fotografii de peisaj

Vezi asta pe Codepen.

Probabil vă întrebați de ce fiecare dintre aceste articole flexibile are o lățime diferită. Flexbox încearcă să descopere care este cea mai mică lățime implicită pentru fiecare dintre aceste elemente. Și din cauza diferitelor lungimi de cuvinte și a altor elemente de design, ajungeți să obțineți aceste cutii de dimensiuni diferite. Pentru a obține un aspect consistent, va trebui să lucrăm puțin mai mult. Setarea unui wrap și determinarea lățimii dorite va ajuta la transformarea acestora în cărți uniforme.

.cards {
   display: flex;
   flex-wrap: wrap;
   justify-content: space-between;
}

În mod implicit, elementele flexibile vor încerca toate să se potrivească pe o singură linie. Adăugarea flex-wrap: wrap; face ca elementele să se înfășoare unele sub altele, deoarece implicit este lățimea completă.

Două casete cu lățime completă afișează imagini în aer liber cu copaci și apă

Vezi asta pe Codepen.

Lățimea completă este excelentă pentru dispozitivele mici, așa că să ținem cont de acest lucru, deoarece planificăm ecranul nostru mai mare înainte de a aborda diferite puncte de întrerupere. Când schimbăm lățimea, cărțile încep să arate mai uniform.

Trebuie să adăugăm clasa .card acum pentru a stila cardurile noastre individuale. Acest lucru poate merge chiar sub stilurile .cards .

.cards {
   display: flex;
   flex-wrap: wrap;
   justify-content: space-between;
}

.card {
	flex: 0 1 24%;
}

Amintiți-vă de mai înainte, proprietatea flex este scurtă: flex-grow este 0, flex-shrink este 1 și width este de 24%. Adăugând o lățime specificată, aceasta ne oferă un rând de patru, cu puțin spațiu între ele.

Patru casete de conținut spațiate uniform, cu text și imagini de fundal cu peisaje naturale și flori

Vezi asta pe Codepen.

Am stabilit proprietatea justify-content pentru spațiere. Primul element se afișează în stânga, al doilea și al treilea element sunt afișați în mijloc, iar al patrulea element este afișat în dreapta. Deoarece lățimea cardului este de 24%, a mai rămas ceva spațiu, deoarece cele patru coloane ale noastre la 24% nu totalizează 100%. Mai avem 4% mai exact. Acest 4% este plasat în mod egal între fiecare dintre articole. Deci avem aproximativ 1,33% din spațiu între cărți.

Două rânduri de patru cărți, rândul de sus fiind mai lung decât rândul de jos

Vezi asta pe Codepen.

Putem fi mai precisi și prin utilizarea calc . Modificarea valorii flex-basis pentru a utiliza calc ar arăta cam așa:

.card {
	flex: 0 1 calc(25% - 1em);
}

Lucrul tare cu aceasta este că browserul va prelua 25% din spațiu și va elimina 1em din el, ceea ce face cărțile să fie puțin mai mici.

Este o modalitate inteligentă de a ajusta spațiul disponibil. 1em este distribuit uniform între articole și ajungem la aspectul perfect.

Până acum, chiar nu am vorbit prea mult despre înălțime. Am adăugat un alt rând de cărți pentru a demonstra cum funcționează înălțimea. Depinde care card are cel mai mult conținut – va urma înălțimea celorlalte. Prin urmare, fiecare rând de conținut va avea aceeași înălțime.

Aceasta este o vedere foarte „mărită”, dar veți observa că primul rând este destul de înalt, deoarece a doua carte are mai mult text decât celelalte din acel rând. Al doilea rând are mai puțin text, așa că în general este mai scurt.

Carduri pentru dispozitive mai mici

În prezent, avem patru coloane pe toate ecranele, ceea ce nu este chiar o bună practică. Dacă micșorați fereastra browserului, veți vedea că cele patru cărți devin mai stricate pe ecrane mai mici, ceea ce nu este ideal pentru lizibilitate. Din fericire, cu interogările media, lucrurile vor începe să arate mult mai bine.

Patru cărți strânse împreună după ce au fost afișate pe un ecran mai mic

Pentru a începe rezolvarea problemei, punctele de întrerupere specificate se vor asigura că conținutul este afișat corect pe toate tipurile de ecran.

Iată următoarele puncte de întrerupere care vor fi utilizate (nu ezitați să le utilizați și pe ale dvs., conceptele încă se aplică):

@media screen and (min-width: 40em) {
    .cards {
   }

    .card {
    }
}

@media screen and (min-width: 60em) {
    .cards {
   }
    
    .card {
     }
}


@media screen and (min-width: 52em) {
    .centered {
       
    }
}

A fost o gândire mare până acum. Să intrăm în mentalitatea de a primi pe mobil și să începem cu min-width: 40em breakpoint.

@media screen and (min-width: 40em) {
    .cards {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;
    }

    .card {
        flex: 0 1 calc(25% - 1em);
    }
}

Cu aceste modificări, cardurile se vor afișa la lățimea întregului ecran și se vor stivui unele sub altele pe orice ecran mai mic de aproximativ 640 de pixeli lățime. Dacă extindeți fereastra browserului la orice mai sus, coloana cu patru se întoarce. Acest lucru are sens, deoarece există o min-width minimă de 40 em și aici am creat șirul de patru cărți.

Ceea ce lipsește aici este calea de mijloc. Pentru gama medie, a avea două cărți la rând este mai ușor de citit, mai degrabă decât cele patru cărți stricate. Înainte de a descoperi rândul de două carduri, trebuie adăugată o altă interogare media pentru a găzdui cele mai mari ecrane, care vor avea rândul de patru carduri.

@media screen and (min-width: 60em) {
    .card {
        flex: 0 1 calc(25% - 1em);
    }
}

Noua interogare media cu o min-width minimă de 60 em este locul în care vor fi declarate cele patru cărți. min-width minimă de 40em este locul unde va fi declarat rândul de două cărți. Magia se întâmplă cu valoarea flex calc de 50% – 1em.

@media screen and (min-width: 40em) {
    .cards {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;
    }

    .card {
        flex: 0 1 calc(50% - 1em);
    }
}

Cu această simplă schimbare, lucrurile merg acum! Reduceți și extindeți fereastra browserului pentru a vă asigura că totul pare corect.

Imagine a cardurilor care se afișează diferit pe diferite ecrane (un card se afișează pe mobil, două pe tabletă și patru pe ecranul desktop)

Vezi asta pe Codepen.

Dacă rândurile tale de cărți arată corect, atunci ești gata! Dacă încercați acest tutorial și aveți un ultimul rând neuniform, continuați să citiți.

Conținut dinamic și spațierea ultimului rând de carduri

În funcție de numărul dvs. de cărți, este posibil să aveți sau nu un ultimul rând prost. Dacă există un ultimul rând complet sau doar o singură carte suplimentară, nu va exista nicio problemă. Uneori veți avea conținutul planificat în avans, dar dacă conținutul este dinamic, este posibil ca ultimul rând de carduri să nu se comporte așa cum ați vrut. Dacă există mai multe cărți suplimentare și este setat conținutul de justificare, spațiul dintre ele va uniformiza și este posibil să nu se alinieze cu rândurile de mai sus.

Ilustrație a distanței dintre ultimele două rânduri de cărți. Rândul de sus este un afișaj complet de patru cărți, iar rândul de jos afișează ultimele două cărți în prima și a patra poziție, cu două spații goale între ele

Pentru a obține acest aspect, este nevoie de un alt mod de a gândi. Aș spune că acest lucru nu este la fel de eficient, dar este relativ simplu.

Stilul .cards și .card a fost realizat în afara unei interogări media:

.cards {
    display: flex;
    flex-wrap: wrap;
 }

.card {
    flex: 1 0 500px;
    box-sizing: border-box;
    margin: 1rem .25em;
}

Interogările media sunt acolo unde este determinat numărul de carduri:

@media screen and (min-width: 40em) {
    .card {
       max-width: calc(50% -  1em);
    }
}

@media screen and (min-width: 60em) {
    .card {
        max-width: calc(25% - 1em);
    }
}
Această vizualizare arată cele două rânduri cu patru cărți deasupra și ultimul rând cu ultimele două cărți pe un site în prima și a doua poziție

Aruncă o privire la Codepen pentru a vedea soluția modificată.

Sperăm că acest lucru vă oferă o prezentare generală de bază a conceptelor Flexbox care vă vor ajuta să începeți. Flexbox are un suport destul de bun pentru browser, iar layout-urile cardurilor vor continua să fie utilizate în designul site-urilor web. Și amintiți-vă, aspectele cardurilor sunt doar începutul modului în care puteți utiliza Flexbox.


Următorul: Proiectați mai rapid site-urile WordPress

În acest ghid, vom acoperi sfaturi despre cum să lucrați mai rapid și să vă accelerați fluxul de lucru WordPress. De la configurarea inițială a site-ului până la punerea lui în direct, descoperiți cum puteți reduce ore de lucru din munca de zi cu zi!

Descărcați ghidul gratuit aici!


Ce altceva ai construit folosind Flexbox? Împărtășește-ți proiectele în comentarii!