Hur man bygger en randig navigering med Flexbox

Tack vare flexbox kan vi idag bygga några riktigt attraktiva och moderna layouter. I den här handledningen ska vi titta på ett gränssnitt som nyligen användes för Google National Parks och se hur flexbox kan hjälpa oss att förbättra det.

 Som alltid, innan vi går längre, låt oss titta på vad vi ska bygga (du kan behöva kolla in den större versionen eftersom den fulla effekten slår in på visningar som är större än 800px):

Var noga med att sväva över länkarna för att utlösa motsvarande effekter. 

Markup

Låt oss först undersöka den markering som vi ska använda för att bygga denna layout. Vi definierar a div element med fem länkar i det (du kan använda vilka delar du tycker är lämpliga). Var och en av våra länkar innehåller en div med klassen av täcka över. Nedan ser du skelettet av vår kod:

Initiala CSS-format

Med markeringen klar börjar vi definiera några initiala CSS-stilar, specifikt:

Här är en del av CSS-koden som visar vad vi har beskrivit ovan:

.flex-wrapper display: flex; höjd: 100vh;  .flex-wrapper a position: relative; flex: 1; bakgrundsstorlek: omslag; bakgrundsställning: center; background-repeat: no-repeat; övergång: flex .4s;  .flex-wrapper .one background-image: url (IMAGE_PATH); bakgrundsfärg: röd;  .flex-wrapper a: svävar flex: 3; 

Hittills, om vi förhandsgranskar demo i en webbläsare som stöder flexbox ser vi detta resultat:

Styling överlägget

Vårt nästa steg är att tilldela några stilar till överlägget. Så här gör vi:

  • Ge överlag samma mått som förlagslänken. Vi kan uppnå detta beteende genom att placera det absolut (i förhållande till den omedelbara föräldern) och sedan ange nollvärden för alla offsetegenskaper. 
  • Definiera överlägget som en flexbehållare. På så sätt kan vi centrera sitt direkta barn (dvs. .overlay-inre element) vertikalt och horisontellt.
  • Lägg en halvtransparent grå bakgrund till överlägget när vi svävar över överlänken.

Här är de associerade CSS-stilarna:

.flex-wrapper .overlay display: flex; align-items: center; rättfärdiga innehåll: center; vaddering: 0 10px; position: absolut; topp: 0; höger: 0; botten: 0; vänster: 0; övergång: bakgrundsfärg .4s;  .flex-wrapper a: svever. överlay bakgrundsfärg: rgba (0, 0, 0, .5); 

Inre överlagring

Nu är det dags att utforma de inre delarna av vårt överdrag. Som standard är dessa dolda och ska bara visas när vi svävar över motsvarande förlagslänk. Men inte omedelbart kommer vi att avslöja dem efter en liten fördröjning. Denna försening är viktig; Om vi ​​inte definierar det specifikt kommer övergångseffekten att se lite ful ut. Ta bort det och testa demoen för att förstå vad jag menar. 

Så bara för att samla, först blir länken större, så blir överlagringselementen synliga. Vi använder också translate3d () för att skapa några diabilder i effekter. Sist men inte minst använder vi transform-stil: bevara-3d hacka (eller liknande) för att förhindra eventuella flickrande effekter över olika webbläsare.

Och här är de relaterade CSS-stilarna:

.flex-wrapper .overlay-inner * synlighet: dold; opacitet: 0; transform-stil: bevara-3d;  .flex-wrapper .överlay h2 transform: translate3d (0, -60px, 0);  .flex-wrapper .overlay p transform: translate3d (0, 60px, 0);  .flex-wrapper a: sväva .överlay-inner * opacitet: 1; synlighet: synlig transformera: ingen; övergång: alla .3s .3s; 

Låt oss se vad som gavs oss.


Går Responsive

Sidan ser bra ut på stora skärmar, men kanske på små eller till och med på median skärmar måste vi göra några justeringar. Till exempel, här är några saker vi kan göra:

  •  Vänd flexbehållarens huvudaxel genom att lägga till flex-riktning: kolumn till det. På så sätt kommer flex-objekten att strömma från topp till botten.
  • Avbryt alla övergångseffekter och visa överlagringselementen som standard . 

Vårt skrivbords första mediafråga ser ut som följer (jag har bara använt 800px eftersom det passar de inbäddade demonerna i den här posten - du kan välja vad du tycker är bäst):

@media-skärm och (maxbredd: 800px) .flex-wrapper flex-direction: column;  .flex-wrapper a: svävar flex: 1;  .flex-wrapper a: svever. överlay bakgrundsfärg: transparent;  .flex-wrapper .overlay h2, .flex-wrapper .overlay p opacitet: 1; synlighet: synlig transformera: ingen; 

Här är det slutliga utseendet på vår navigering:

Browser Support

Demon fungerar i alla nya webbläsare som stöder flexbox. 

I vissa webbläsare kanske du märker att animationen av böja egendom är inte så smidigt som det borde vara, eller kanske inte fungerar alls. Till exempel animerar IE11 inte den här egenskapen, medan Edge gör det. Detta är rimligt nog, med tanke på att flexbox är ett nytt layoutläge som fortfarande har dragkraft.

Slutsats

I denna handledning förbättrade vi vår flexbox kunskap genom att lära oss hur man bygger en elegant navigationslayout. Förhoppningsvis njöt du av det vi har byggt här och har inspirerat till dina nästa projekt!

Om du bygger en liknande layout, glöm inte att visa oss hur du använder (ren CSS eller JavaScript-baserad lösning).  

I det vilda   

Innan du stänger vill jag dela med dig några webbplatser som använder en liknande layout till vad vi just har skapat:

  • Google Arts & Culture
  • Föråldrad webbläsare
  • Sykes stugor