Hoe een gestreepte navigatie te bouwen met Flexbox

Dankzij flexbox kunnen we tegenwoordig relatief aantrekkelijke en moderne lay-outs bouwen. In deze zelfstudie gaan we kijken naar een interface die onlangs is gebruikt voor Google National Parks, en zien hoe flexbox ons kan helpen deze te verbeteren.

 Zoals altijd, laten we, voordat we verder gaan, kijken naar wat we gaan bouwen (misschien moet je de grotere versie bekijken als het volledige effect wordt geactiveerd op kijkers die breder zijn dan 800 px):

Zorg ervoor dat u de muisaanwijzer over de koppelingen beweegt om de bijbehorende effecten te activeren. 

De markup

Laten we eerst eens kijken naar de markup die we zullen gebruiken om deze lay-out te bouwen. We definiëren een div element met vijf links erin (u kunt de elementen gebruiken die u geschikt acht). Elk van onze links bevat een div met de klasse van bedekking. Hieronder ziet u het geraamte van onze code:

Initiële CSS-stijlen

Nu de markup klaar is, beginnen we met het definiëren van enkele initiële CSS-stijlen, met name:

Hier is een deel van de CSS-code die aantoont wat we hierboven hebben beschreven:

.flex-wrapper display: flex; hoogte: 100vh;  .flex-wrapper a position: relative; flex: 1; achtergrondformaat: omslag; achtergrond-positie: midden; achtergrondherhaling: geen herhaling; overgang: flex .4s;  .flex-wrapper .one background-image: url (IMAGE_PATH); achtergrondkleur: rood;  .flex-wrapper a: hover flex: 3; 

Tot nu toe zien we dit resultaat als we de demo bekijken in een browser die flexbox ondersteunt:

De overlay stylen

Onze volgende stap is om een ​​paar stijlen toe te wijzen aan de overlay. Dit is wat we gaan doen:

  • Geef de overlay dezelfde afmetingen als de bovenliggende link. We kunnen dit gedrag bereiken door het absoluut (ten opzichte van de directe bovenliggende) te plaatsen en vervolgens nulwaarden voor alle verschuivende eigenschappen op te geven. 
  • Definieer de overlay als een flexcontainer. Op deze manier kunnen we zijn directe kind centreren (d.w.z.. .overlay-binnen element) verticaal en horizontaal.
  • Voeg een semi-transparante grijze achtergrond toe aan de overlay wanneer we de muisaanwijzer boven de bovenliggende link plaatsen.

Dit zijn de bijbehorende CSS-stijlen:

.flex-wrapper .overlay weergave: flex; align-items: center; justify-content: center; opvulling: 0 10px; positie: absoluut; boven: 0; rechts: 0; onderkant: 0; links: 0; overgang: achtergrondkleur .4s;  .flex-wrapper a: hover .overlay background-color: rgba (0, 0, 0, .5); 

Innerlijke overlay

Nu is het tijd om de binnenkant van onze overlay te stylen. Standaard zijn deze verborgen en zouden alleen moeten verschijnen als we de muisaanwijzer boven de overeenkomstige bovenliggende link houden. Maar niet meteen, we zullen ze na een korte vertraging onthullen. Deze vertraging is belangrijk; als we het niet specifiek definiëren, ziet het overgangseffect er een beetje lelijk uit. Verwijder het en test de demo om te begrijpen wat ik bedoel. 

Dus kort samengevat, eerst wordt de link groter, waarna de overlay-elementen zichtbaar worden. We gebruiken ook de translate3d () om een ​​aantal dia-effecten te maken. Last but not least gebruiken we de transformatiestijl: behouden-3d hack (of een vergelijkbare) om mogelijke flikkerende effecten in verschillende browsers te voorkomen.

En hier zijn de gerelateerde CSS-stijlen:

.flex-wrapper .overlay-inner * visibility: hidden; dekking: 0; transformatiestijl: bewaren-3d;  .flex-wrapper .overlay h2 transform: translate3d (0, -60px, 0);  .flex-wrapper .overlay p transform: translate3d (0, 60px, 0);  .flex-wrapper a: hover .overlay-inner * onacity: 1; zichtbaarheid: zichtbaar; transformeren: geen; overgang: alle .3s .3s; 

Laten we kijken wat ons is gegeven.


Responsief gaan

De pagina ziet er geweldig uit op grote schermen, maar misschien op kleine of zelfs op middelgrote schermen, zullen we een paar aanpassingen moeten maken. Hier zijn bijvoorbeeld een paar dingen die we kunnen doen:

  •  Draai de hoofdas van de flexcontainer om door toe te voegen flex-richting: kolom ernaar toe. Daarbij stromen de flexitems van boven naar beneden.
  • Annuleer alle overgangseffecten en toon standaard de overlay-elementen . 

Onze desktop-eerste media-query ziet er als volgt uit (ik heb alleen 800px gebruikt omdat dat bij de ingesloten demo's past in deze post - u kunt kiezen wat u denkt dat het beste is):

@media-scherm en (max-breedte: 800px) .flex-wrapper flex-richting: kolom;  .flex-wrapper a: hover flex: 1;  .flex-wrapper a: hover .overlay background-color: transparent;  .flex-wrapper .overlay h2, .flex-wrapper .overlay p dekking: 1; zichtbaarheid: zichtbaar; transformeren: geen; 

Dit is de laatste verschijning van onze navigatie:

Browserondersteuning

De demo werkt in alle recente browsers die flexbox ondersteunen. 

In sommige browsers merk je misschien dat de animatie van de buigen eigendom is niet zo soepel als het zou moeten zijn, of misschien werkt het helemaal niet. IE11 animeert deze eigenschap bijvoorbeeld niet, terwijl Edge dat wel doet. Dit is redelijk genoeg, gezien het feit dat flexbox een nieuwe lay-outmodus is die nog steeds aan kracht wint.

Conclusie

In deze zelfstudie hebben we onze kennis over flexbox verbeterd door te leren hoe je een stijlvolle navigatie-indeling kunt bouwen. Hopelijk heb je genoten van wat we hier hebben gebouwd en heb je inspiratie opgedaan voor je volgende projecten!

Als u een vergelijkbare lay-out maakt, vergeet dan niet ons de aanpak (pure CSS of JavaScript-gebaseerde oplossing) die u gebruikte te tonen.  

In het wild   

Voordat ik sluit, wil ik graag een paar sites met een vergelijkbare lay-out delen als wat we zojuist hebben gemaakt:

  • Google Arts & Culture
  • Verouderde browser
  • Sykes Cottages