Cum de a construi o navigație cu ribon cu Flexbox

Mulțumită flexboxului, în zilele noastre putem construi unele aspecte foarte atractive și moderne cu ușurință. În acest tutorial vom analiza o interfață folosită recent pentru Google Parks și vom vedea cum flexbox ne poate ajuta să îmbunătățim acest lucru.

 Ca întotdeauna, înainte de a merge mai departe, să ne uităm la ceea ce vom construi (este posibil să trebuiască să verificați versiunea mai mare, deoarece efectul deplin intră în porturile de vizualizare mai mari de 800 de pixeli):

Asigurați-vă că plasați cursorul peste link-uri pentru a declanșa efectele corespunzătoare. 

Marcajul

Mai întâi, să examinăm marcajul pe care îl vom folosi pentru a construi acest aspect. Definim a div element cu cinci link-uri în interiorul acestuia (puteți utiliza oricare dintre elementele pe care le considerați potrivite). Fiecare dintre legăturile noastre conține div cu clasa de acoperire. Mai jos puteți vedea scheletul codului nostru:

Stiluri inițiale de CSS

Cu marcarea pregătită, începem să definim câteva stiluri CSS inițiale, în special:

Iată o parte din codul CSS care demonstrează ceea ce am descris mai sus:

.flex-wrapper afișaj: flex; înălțime: 100vh;  .flex-wrapper o poziție: relativă; flex: 1; dimensiunea fundalului: capac; fundal-poziție: centru; background-repeat: nu-repeta; tranziție: flex .4s;  .flex-wrapper .one imagine-imagine: url (IMAGE_PATH); fundal-culoare: roșu;  .flex-wrapper a: hover flex: 3; 

Până acum, dacă examinăm demo-ul într-un browser care acceptă flexbox, vom vedea acest rezultat:

Modelarea suprapunerii

Următorul pas este să atribuiți câteva stiluri la suprapunere. Iată ce vom face:

  • Oferiți suprapunere aceleași dimensiuni ca și link-ul parental. Putem realiza acest comportament poziționându-l absolut (relativ la părintele imediat) și apoi specificând valorile zero pentru toate proprietățile de offset. 
  • Definiți suprapunerea ca un container flexibil. În acest fel, suntem capabili să centreze copilul său direct (adică. .suprapunere-interior element) vertical și orizontal.
  • Adăugați un fundal gri semi-transparent la suprapunere atunci când plasăm cursorul peste linkul părinte.

Iată stilurile CSS asociate:

.flex-wrapper. suprapunere display: flex; aliniere: centru; justify-content: centru; umplutură: 0 10px; poziția: absolută; top: 0; dreapta: 0; fund: 0; stânga: 0; tranziție: culoarea de fundal .4s;  .flex-wrapper a: mutați .overlay background-color: rgba (0, 0, 0, .5); 

Acoperire interioară

Acum, e timpul să stilisem părțile interioare ale suprapunerii noastre. În mod implicit, acestea sunt ascunse și ar trebui să apară numai atunci când plasăm cursorul peste link-ul părinte corespunzător. Dar nu imediat, le vom dezvălui după o mică întârziere. Această întârziere este importantă; dacă nu o definim în mod specific, efectul de tranziție va părea puțin urât. Îndepărtați-l și testați demo-ul pentru a înțelege ce vreau să spun. 

Deci doar pentru a recapa, mai intai link-ul devine mai mare, atunci elementele suprapuse devin vizibile. De asemenea, folosim translate3d () pentru a crea o serie de efecte. Nu în ultimul rând, folosim transform-stil: conserve-3d hack (sau unul similar) pentru a preveni posibilele efecte de pâlpâire pe diferite browsere.

Și aici sunt stilurile CSS asociate:

.flex-wrapper. superior-interior * vizibilitate: ascuns; opacitate: 0; stilul transformat: păstrați-3d;  .flex-wrapper .overlay h2 transform: translate3d (0, -60px, 0);  .flex-wrapper .overlay p transform: traducere3d (0, 60px, 0);  .flex-wrapper a: hover. superior-interior * opacitate: 1; vizibilitate: vizibil; transforma: nici unul; tranziție: toate .3s .3s; 

Să vedem ce ne-a dat.


Mergeți receptiv

Pagina pare grozavă pe ecrane mari, dar poate și pe ecrane mici sau chiar pe ecrane, va trebui să facem câteva ajustări. De exemplu, aici sunt câteva lucruri pe care le putem face:

  •  Răsuciți axa principală a containerului flexibil adăugând direcția flex: coloană la el. În acest fel elementele flexibile vor curge de sus în jos.
  • Anulați toate efectele de tranziție și afișați elementele suprapuse în mod prestabilit . 

Prima noastră interogare de tip desktop-desktop arată după cum urmează (am folosit doar 800px pentru că se potrivește demo-urilor încorporate în acest post - poți alege ce simți cel mai bine):

Ecranul @media și (max-width: 800px) .flex-wrapper direcția flex: coloană;  .flex-wrapper a: hover flex: 1;  .flex-wrapper a: hover .overlay fundal-culoare: transparent;  .flex-wrapper.overlay h2, .flex-wrapper.overlay p opacitate: 1; vizibilitate: vizibil; transforma: nici unul; 

Iată aspectul final al navigației noastre:

Suport pentru browser

Demo-ul funcționează în toate browserele recente care suportă flexbox. 

În unele browsere este posibil să observați că animația contracta proprietatea nu este la fel de buna ca ar trebui sa fie, sau poate ca nu functioneaza deloc. De exemplu, IE11 nu animă această proprietate, în timp ce Edge face. Acest lucru este destul de rezonabil, având în vedere faptul că flexbox-ul este un nou mod de aspect, care încă câștigă tracțiune.

Concluzie

În acest tutorial, am îmbunătățit cunoștințele flexbox, învățând cum să construim un aspect elegant de navigație. Sperăm că v-ați bucurat de ceea ce am construit aici și am inspirat câteva proiecte viitoare!

Dacă construiți un aspect similar, nu uitați să ne arătați abordarea (soluție pură CSS sau bazată pe JavaScript) pe care ați utilizat-o.  

În sălbăticie   

Înainte de închidere, aș dori să vă împărtășesc câteva site-uri care utilizează un aspect similar cu ceea ce am creat:

  • Google Arts & Culture
  • Browserul învechit
  • Cabane Sykes