Så här skapar du en Responsive Navigation
En av de svåraste delarna att vara responsified på en webbplats är “navigationen”, den här delen är verkligen viktig för webbplatsens tillgänglighet, eftersom det här är ett sätt på hur besökarna hoppa över webbsidorna.
Det finns faktiskt många sätt att skapa responsiv webbplatsnavigering och även några jQuery-plugins finns tillgängliga för att göra det på en sekund.
Men i stället för att tillämpa en omedelbar lösning, i det här inlägget, kommer vi att gå igenom dig hur man bygger en enkel navigering från marken och använda CSS3-mediafrågor och lite jQuery för att visa det i en liten skärmstorlek som smarttelefonerna korrekt.
Så, låt oss bara komma igång.
- demo
- Hämta källa
html
Först och främst, låt oss lägga meta-visningsporten inuti huvud
märka. Detta meta viewport tagg krävs för att vår sida ska skalas ordentligt inuti vilken skärmstorlek som helst, särskilt i mobilvisningsporten.
... och lägg sedan till följande kod som navigationsmarkering inuti kropp
märka.
Som du kan se ovan har vi sex primära menylänkar och lagt till ytterligare en länk efter dem. Denna extra länk kommer att användas till dra menynavigering när den är gömd i en liten skärm.
Vidare läsning: Glöm inte metataggen för viewport.
Styles
I det här avsnittet börjar vi ställa in navigeringen. Stilen här är bara dekorativ, du kan välja några färger som du önskar. Men i det här fallet vill vi (jag personligen) kropp
att ha en mjuk och krämig färg.
kropp bakgrundsfärg: # ece8e5;
De nav
tagg som definierar navigeringen kommer att ha 100%
Full bredd på webbläsarfönstret, medan ul
där den innehåller våra primära meny länkar kommer att ha 600px
för bredden.
nav höjd: 40px; bredd: 100%; bakgrund: # 455868; typsnittstorlek: 11pt; font-family: 'PT Sans', Arial, sans-serif; font-weight: bold; position: relativ; border-bottom: 2px solid # 283744; nav ul vaddering: 0; marginal: 0 auto; bredd: 600px; höjd: 40px;
Då ska vi flyta
menyn länkar till vänster, så de kommer att visas horisontellt sida om sida, men flytande ett element kommer också att orsaka att deras föräldrar kollapsar.
nav li display: inline; flyta till vänster;
Om du märker från HTML-markeringen ovan har vi redan lagt till clearfix
i klass
attribut för både nav
och ul
att rensa saker runt när vi flyter elementen inuti den med hjälp av detta CSS clearfix hack. Så, låt oss lägga till följande stilregler i stilarket.
.clearfix: före, .clearfix: efter innehåll: ""; display: bord; .clearfix: efter clear: both; .clearfix * zoom: 1;
Eftersom vi har sex meny länkar och vi har också angett behållaren för 600px
, varje menykoppling kommer att ha 100px
för bredden.
nav a color: #fff; display: inline-block; bredd: 100px; text-align: center; text-dekoration: ingen; linjehöjd: 40px; textskugga: 1px 1px 0px # 283744;
Menylänkarna kommer att separeras med 1px
högra gränsen, förutom den sista. Kom ihåg vårt tidigare inlägg på boxmodell, menyns bredd kommer att utökas för 1px
gör det 101px
som gränsvärdet, så här ändrar vi box-dimensionering
modell till border-box
för att hålla menyn kvar 100px
.
nav li a border-right: 1px solid # 576979; box-limning: border-box; -moz-box-storlek: border-box; -webkit-box-storlek: border-box; nav li: sista barnet a gränsen-höger: 0;
Därefter kommer menyn att ha ljusare färg när den är i :sväva
eller :aktiva
stat.
nav a: svävar, nav a: aktiv bakgrundsfärg: # 8c99a4;
... och slutligen kommer den extra länken att döljas (för skrivbordet).
nav a # pull display: none;
Vid denna tidpunkt stylerar vi bara navigeringen och ingenting kommer att hända när vi ändrar webbläsarfönstret. Så, låt oss hoppa till nästa steg.
Vidare läsning: CSS3 Box-dimensionering (Hongkiat.com)
Mediafrågor
CSS3-mediefrågorna används för att definiera hur stilerna ska ändras i vissa visst brytpunkter eller specifikt skärmstorlekarna för en enhet.
Eftersom vår navigering är i början 600px
fix-bredd, kommer vi först att definiera stilar när den ses i 600px
eller lägre skärmstorlek, så praktiskt sett, detta är vår första brytpunkt.
I denna skärmstorlek visas var och en av två meny länkar sida vid sida, så att ul
bredd här kommer att vara 100%
i webbläsarfönstret medan menylänkarna kommer att ha 50%
för bredden.
@media skärm och (max bredd: 600px) nav height: auto; nav ul bredd: 100%; display: block; höjd: auto; nav li bredd: 50%; flyta till vänster; position: relativ; nav li a border-bottom: 1px solid # 576979; gränsen-höger: 1px fast # 576979; nav text-align: left; bredd: 100%; textindelning: 25px;
... och då definierar vi också hur navigeringen visas när skärmen blir mindre av 480 x
eller lägre (så det här är vår andra brytpunkt).
I den här skärmstorleken kommer den extra länken som vi lagt till tidigare att synas och vi ger också länken a “Meny” ikonen på höger sida med hjälp av :efter
pseudo-elementet, medan de primära menylänkarna kommer att döljas för att spara mer vertikala utrymmen på skärmen.
@media bara skärm och (max bredd: 480px) nav border-bottom: 0; nav ul display: none; höjd: auto; nav a # pull display: block; bakgrundsfärg: # 283744; bredd: 100%; position: relativ; nav en # dra: efter innehåll: ""; bakgrund: url ('nav-icon.png') no-repeat; bredd: 30px; höjd: 30px; display: inline-block; position: absolut; höger: 15px; topp: 10px;
Slutligen, när skärmen blir mindre av 320 x
och lägre menyn visas vertikalt uppifrån och ner.
@media bara skärm och (max bredd: 320px) nav li display: block; float: none; bredd: 100%; nav li a border-bottom: 1px solid # 576979;
Nu kan du försöka ändra storlek på webbläsarfönstret. Det ska nu kunna anpassa skärmstorleken.
Vidare läsning: Media Frågor för Standard Devices.
Visar menyn
Vid denna tidpunkt kommer menyn fortfarande att vara dold och visas bara när det behövs genom att knacka på eller klicka på “Meny” länk och vi kan nå effekten med jQuery slideToggle ()
.
$ (funktion () var pull = $ ('# pull'); meny = $ ('nav ul'); menuHeight = menu.height (); $ (pull) .on e.preventDefault (); menu.slideToggle ();););
Men när du ändrar webbläsarfönstret direkt efter att du just har tittat och gömt menyn på en liten skärm, kommer menyn att förbli gömd, eftersom display: none
stilen som genereras av jQuery är fortfarande fäst i elementet.
Så, vi måste ta bort denna stil vid fönstret resizing, enligt följande:
$ (fönster) .resize (funktion () var w = $ (fönster) .width (); om (w> 320 && menu.is (': hidden')) menu.removeAttr ('style'); );
Okej, det är alla koder vi behöver, vi kan nu se navigeringen från följande länkar och vi rekommenderar att du testar det i ett responsivt designtestverktyg, till exempel Respentatorn, så att du kan se den i olika bredd samtidigt.
- demo
- Hämta källa
Bonus: Ett alternativt sätt
Som vi tidigare nämnde i det här inlägget, finns det några andra sätt att göra det och använder ett JavaScript-bibliotek som heter SelectNav.js är ett av de enklaste sätten. Det här är en ren JavaScript som inte är beroende av ett annat tredjepartsbibliotek som jQuery.
I grund och botten kommer det att duplicera din listmeny och omvandla den till en rullgardinsmenyn kan du välja vilken som är dold eller visad beroende på skärmstorlek genom mediefrågor.
En av fördelarna med denna övning är att vi inte behöver oroa oss för navigationsstilen som menyn kommer att använda sig av det ursprungliga användargränssnittet från själva enheten.
Vänligen se den officiella dokumentationen för vidare implementering.
Slutsats
Vi har kommit hela vägen för att skapa responsiv navigering från början. Den här vi har skapat här är bara ett exempel, och som vi sagt tidigare i det här inlägget och visat ovan finns det många andra lösningar som du kan implementera. Så det är nu tillåtet att välja vilken övning som passar bäst för att tillgodose kravet och din webbplatsnavigationsstruktur.