store menuer, små skærme: lydhøre, multi -

store menuer, små skærme: lydhøre, multi - niveau, navigation,,,,,,,, hvis du nogensinde har arbejdet på deres websted, du har uden tvivl haft til at løse et af de vanskeligste problemer på dette nye område: navigation.for simple sejlads, løsninger kan være ligetil.men hvis du arbejder på noget, der er lidt mere kompleks, måske med flere indlejrede lister og dropdowns, en mere dramatisk omlægning kan være i orden,.,, i denne tilgang til deres navigation, vi skal bruge en tilgang, der kan rumme store på flere niveauer navigation menuer med medier, forespørgsler og jquery, mens vi forsøger at holde vores markup enkle og vores eksterne ressourcer minimal.,, målet: der dropdown menu, her er, hvad vi sigter på:,,,,,, på større skærme, viser en horisontal ud menu, med op til 2 niveauer af sub - menuer, der opstår, når moderselskabet element er, om mindre svævede over. skærme, en "menu" knap, der viser vores menu vertikalt, viser de menuer, når moderselskabet element er klikked /rørt.,,, trin 1: den avance, vores avancen er ret ligetil unordered liste med indlejrede lister, der er indeholdt i liste over poster.I’m intentionally not using any classes or IDs on any element but the parent unordered list, so that the menu will be compatible with CMS-generated menus., ,<div class="container"> \t <a class="toggleMenu" href="#">Menu</a> <ul class="nav"> \t<li class="test"> \t\t<a href="#">Shoes</a> \t\t<ul> \t\t\t<li> \t\t\t\t<a href="#">Womens</a> \t\t\t\t<ul> \t\t\t\t\t<li><a href="#">Sandals</a></li> \t\t\t\t\t<li><a href="#">Sneakers</a></li> \t\t\t\t\t<li><a href="#">Wedges</a></li> \t\t\t\t\t<li><a href="#">Heels</a></li> \t\t\t\t\t<li><a href="#">Loafers</a></li> \t\t\t\t\t<li><a href="#">Flats</a></li> \t\t\t\t</ul> \t\t\t</li> \t\t\t<li> \t\t\t\t<a href="#">Mens</a> \t\t\t\t<ul> \t\t\t\t\t<li><a href="#">Loafers</a></li> \t\t\t\t\t<li><a href="#">Sneakers</a></li> \t\t\t\t\t<li><a href="#">Formal</a></li> \t\t\t\t</ul> \t\t\t</li> \t\t</ul> \t</li>, ,Step 2: Basic Styling, ,Let’s add some very basic styling to get our list looking like a navigation bar:, ,body, nav, ul, li, a {margin: 0; padding: 0;} body {font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } a {text-decoration: none;} .container { width: 90%; max-width: 900px; margin: 10px auto; } .toggleMenu {display: ingen; baggrund:ʚ og polstring: 10px 15px; farve:&#fff;}. nav (liste stil: ingen; * - 1; baggrund:¯e4c. position: relativ;}. nav: før. nav: efter (indhold: "" display: tabel.}. nav: efter {klart: begge}. nav ul (liste stil: ingen; bredde: 9em;}. nav en {polstring: 10px 15px; farve:&#fff; * - 1}. nav > li {flyde: venstre; grænseoverskridende top: 1px fast𙞐 z-index: 200;}. nav > li > en (display: blok.}. nav li ul {holdning: absolutte, venstre: - 9999px; z-index: 100;}. nav - li a {display: blok; baggrund:d7a62. position: relativ; z-index:100, grænse - top. 1px fast¯e4c;}. nav - li li a {baggrund:𼻪 z-index: 200; grænseoverskridende top: 1px fastd7a62;},,,,, vi har på vores liste over poster i en vandret linje, nogle farver og gemt væk submenus ved hjælp af absolutte position.hvis du undrer dig over linje 20, det er et simpelt clearfix metode, som jeg finder effektivt i sådanne situationer (læs mere om nicolas gallaghers blog).,, trin 3: horisontale dropdown menu, næste, lad os få den horisontale dropdown menuer, der sker.dette kan gøres med ren forskning ved hjælp af: svæv, pseudo - komitéen, jeg vil tilføje, at det efter javascript siden vi skal skifte menuen for at aktivere den klik i vores lille skærm version.,, fordi vi bruger absolutte position til at flytte vores submenus af skærmen, lad os tilføje nogle. svæv, regler, som vil submenus stilling i forhold til deres forældre, da de,. svæv, klasse er til stede (som vi tager os af med jquery).,,. nav li {holdning: relativ;}. nav > li.hover > ul (venstre: 0}. nav li li.hover ul (venstre: 100%; top: 0}, nu kan vi tilføje et par linjer af simple jquery at tilføje. svæv klasse liste over elementer, når de er svævede over. $(dokument). klar.(function() {$(". togglemenu"). css ("display", "ingen"); $(". nav li"). den (function() {$(det). addclass ('hover)}, function() {$(det). removeclass ('hover)}).}),,,,,, og ligesom det, vi selv har en funktionel på flere niveauer dropdown menu.,, trin 4: vertikale dropdown menu, vores smukke horisontale dropdown menu desværre ser ganske lille på mobile skærme, så lad os sikre, at mobile browsere vil være fuldt ud er i, når man lader vores side af at lægge viewport meta -.,, < meta - navn = "viewport" indhold = "bredde = anordning bredde, oprindelige omfang = 1 >, selvfølgelig, vores dropdown menu ser værre ud på mobile anordninger, og de fleste af dem passer ikke engang ind på skærmen.lad os tilføje i nogle medier forespørgsler til stil vores liste i en vertikal liste under vores grænse.vores breakpoint bestemmes ved det punkt, hvor vores menu pauser på to linjer, i mit tilfælde, det er 800px.,, på vores breakpoint, fjerner vi den flyder, og listen over produkter og unordered lister, bredde: 100%.nu, hvor vi svæver over vores forældre, deres børn lister er udstillet over toppen af produkter under det.vi foretrækker den anden liste over poster på få fordrevet.så i stedet for at ændre, venstre, holdning til unordered liste, vi sætter den holdning, værdi, statisk,.,, @ medier skærm og max bredde: 800px) {. nav > li {flyde: ingen;}. nav ul (display: blok; bredde: 100%}. nav > li.hover > ul. nav li li.hover ul {holdning: statiske;}},,,,, løntrin 5: omdannelse af den sammen, siden du ikke kan flyde på touch skærm (endnu), vil vi skabe en betinget kode til at kontrollere bredde på vinduet, så skriv koden til at fastsætte, click(), og hover(), begivenheder, $(dokument). klar (function() {var ww = document.body.clientwidth; hvis (ww < 800) ($(". togglemenu"). css ("display", "inline - kvarteret.);$(". nav -"). klik (function() {$(dette). moderselskab ("li"). toggleclass ('hover)})} andre {$(". togglemenu"). css ("display", "ingen"); $(". nav li"). - svævning (function() {$(det). addclass ('hover)}, function() {$(det). removeclass ('hover))))), for, klik, tilfælde, har vi været nødt til at ændre den målrettede element fra listen i punkt til et punkt på dagsordenen da listerne er indlejrede og klik én liste, punkt kunne åbne sine børnebørn så godt.The problem with this change, however, is that clicking an anchor tag will reload the page, but we can't prevent default behavior on all anchor tags that are descendants of list items., ,To fix this, let's add a short bit of jQuery to add the class ,.parent, to any list item whose child anchor has siblings, then target only these anchors (again, trying to keep our markup flexible)., ,$(".nav li a").each(function() { \t\tif ($(this).next().length > 0) { \t\t\t$(this).addClass("parent"); \t\t}; \t}) \tif (ww < 800) { \t\t$(".toggleMenu").css("display", "inline-block"); \t\t$(".nav li a.parent").click(function(e) { \t\t\te.preventDefault(); \t\t \t$(this).parent("li").toggleClass('hover'); \t\t}); \t} else { ... }, trin 6: toggle - menuen, vores menu virker ret godt på mobile anordninger, men det tager en hel masse værdifuld skærm fast ejendom.en populær nye strategi har været at aktivere navigation lister med en knap, som regel med ordet "menu" eller en menu ikon.lad os få vores greb forbindelse arbejde for at vise vores navigations - liste, kun når sammen.,, $(". togglemenu"). klik (funktion (e) (f. preventdefault(). $(". nav"). toggle().}); hvis (ww < 800) ($(". togglemenu" css). ("display", "inline - block"); $(". nav"). hide();} andre {...},,,,, trin 7: en smule mere stil, fordi vi nu har vores forældre liste, der målrettet med en klasse, hvorfor ikke tilføje lidt ned pil til at lade vores brugere ved, hvilken liste, der har børn?,,. nav > li >. moderselskab (baggrund holdning: 95% 50%}. nav - li. moderselskab (baggrund billede: url ("billeder /downarrow. men heller ikke dér er menneskene sikre"); baggrund gentager: ikke gentages; baggrund holdning: 95% 50%} @ medier skærm og (max bredde: 800px) {. nav > li >. moderselskab (baggrund holdning: 95% 50%}. nav - li. moderselskab (baggrund billede: url ("billeder /downarrow. men heller ikke dér er menneskene sikre"); baggrund gentager: ikke gentages; baggrund holdning: 95% 50%}},,,,, bonus: at vise, nu praktisk taget den menu virker helt fint.hvis du åbner den op i et mobilt browser, får du et meget brugbart vertikale harmonika liste, hvis du åbner den i din desktop browser, får du en god horisontal ud liste.hvis du resize din desktop - ned til mobile bredder, men vores navigation stadig virker kun på den, og menuen er ikke skjult med greb træk.for de fleste ansøgninger, det er fint.efter alle deres gennemsnitlige hjemmeside besøg ikke fat i kanten af deres browser og begynde at trække mig frem og tilbage.,, hvis du er ude på at imponere din fyr web fagfolk, det går bare ikke.vi bliver nødt til at sætte vores manuskript til at reagere på det, resize, omstændigheder og udføre vores betingede kode, når browser er ændret under breakpoint.udvidelse af den kode demonstreret i den fremragende skaber en mobil først reagerer design forelæsning, vi kommer til at sætte nogle variabler, for at følge og ajourføre vores browser bredde.,, trin 8: vindue begivenheder, da vi ønsker at kontrollere bredden af browseren, både på side belastning, og når browser er ændret lad os starte med at flytte alle betinget koden ud af $(nummer). ready(), omstændigheder og indpakning i en funktion, adjustmenu,.,, var 1 = document.body.clientwidth. $(dokument). klar (function() {$(". togglemenu"). klik (funktion (e) (f. eks. preventdefault(). $(". nav"). toggle().}); $(". nav -"). (function() (hvis ($(dette). next(). længde > 0) ($(det). addclass ("forældre");}}) adjustmenu();}); funktiondette adjustmenu() (hvis (ww < 800) ($(". togglemenu"). css ("display", "inline - block"); $(". nav"). hide(). $(". nav li a.parent"). klik (funktion (e) (f. preventdefault(). $(denne). moderselskab ("li"). toggleclass ('hover)})} andre {$(". togglemenu"). css ("display", "ingen"); $(". nav li"). den (function() {$(det). addclass ('hover ');), function() {$(det). removeclass ('hover)})}}, kræve, at funktionen som browser er ændret, skal vi binder det til vinduet begivenheder, resize, og orientationchange,.i dette tilfælde skal vi omdefinere, ww, variabel til at tilpasse sig de nye browser bredde. $(vindue). bind ('resize orientationchange, function() (ww = document.body.clientwidth; adjustmenu().}), vi på dette punkt har indført flere problemer: selv om det i første omgang synes at arbejde (horisontale menu falder sammen i "menu" knap, som åbner menuen), er det hurtigt klart, vi har to store emner:,,, hele menuen forsvinder, hvis vi resize mobile bredde vindue ud over pause.,, den begivenhed er stadig at skyde på den mobile version.,,, trin 9: forevisning og gemmer sig, vores forsvundne navigation menu virker som en let løsning: at tilføje, $("nav"). show() under større end breakpoint tilstand.denne løsning ser ud til at virke, men bringer nogle vanskelige kant sager.da kodeks er revurderet hver gang browser er ændret, når vi resize med menuen, automatisk lukkes igen.,,, det virker måske som en usandsynlig kant, men mobile browsere er underligt. for eksempel i min galakse, scroller ned og tilbage til toppen af side udløser, resize, begivenhed.ikke godt!,,, at ordne det, vi skal have mulighed for at kontrollere, om menuen greb er blevet slået.jeg skal bruge en ekstra klasse på menuen toggle - knappen, fordi det kan være nyttig for modetendenser (måske ønsker vi en pil senere hen?)ud over toggling udstilling af sejlads menu, menuen toggle - knappen nu greb sin egen klasse,. aktiv.tilbage i vores smallere end breakpoint tilstand, lad os opdatere koden for at skjule vores navigations - menu, hvis menuen greb, ikke har en klasse,. aktive,.,, $(dokument). klar (function() {$(". togglemenu"). klik (funktion (e) (f. preventdefault() og $(det). toggleclass ("aktive"); $(". nav"). toggle().})}); hvis (ww < 800) ($(". togglemenu"). css ("display", "inline - block"); hvis (!$(". togglemenu"). hasclass ("aktive") ($(". nav"). hide();} andre {$(". nav"). show();} $(". nav li a.parent"). klik (funktion (e) (f. preventdefault(). $(det). moderselskab ("li"). toggleclass ('hover)})}...,, trin 10 unbinding svæv begivenheder, der kan løse problemet for de mobile størrelse svarer til navigation menu svæver begivenheder, vi bare nødt til, unbind(), den begivenhed fra vores liste over poster inden for snævrere end breakpoint tilstand., $(". nav li"). slip ('mouseenter mouseleave), imidlertid, at dette belyser et nyt problem: vores, klik, begivenheder virker ikke, hvis du resize browseren fra store for små.nogle debugging - viser, at de, klik, begivenhed har været bundet til den forbindelse, nogle gange, så snart vi klik,,. svæv, klasse er toggled og derefter straks ud igen.dette sker, fordi hele funktion brande gentagne gange, som du er rigtige vinduet.for at sikre, at vi begynder at toggling fra det rigtige sted, er vi nødt til, løs, klik begivenhed, inden de bindende det igen, når vi resize browseren fra små og store igen, men vi er nu forsvundet vores, svæv, omstændigheder, fordi vi ubundet når browser var små, og vores, klik, tilfælde er der stadig, så lad os løs, før de bindende vores svæver erklæring.vi skal også fjerne enhver liste over poster med en klasse,. svæv, før vi lægger dem tilbage til den begivenhed, der skal forhindre menuer fra akavet forbliver åben, som vi stiller browseren bredere.,, jeg er omskrivning,. click() og. hover(), begivenheder, bind() for. tydelighedens skyld.det betyder det samme.,, hvis (ww < 800) ($(". togglemenu"). css ("display", "inline - block"); hvis (!$(".toggleMenu").hasClass("active")) { \t\t$(".nav").hide(); \t} else { \t\t$(".nav").show(); \t} \t$(".nav li").unbind('mouseenter mouseleave'); \t$(".nav li a.parent").unbind("click").bind("click", function(e){ \t\te.preventDefault(); \t \t$(this).parent("li").toggleClass('hover'); \t}); } else { \t$(".toggleMenu").css("display", "none"); \t$(".nav").show(); $(".nav li").removeClass("hover"); \t$(".nav li a").unbind("click"); \t$(".nav li").unbind('mouseenter mouseleave').bind('mouseenter mouseleave', function() { \t\t$(this).toggleClass('hover'); \t}); }, ,Hooray! det hele ser ud til at virke, som den burde, trin 11: - dvs. at opføre sig, og det ville ikke være en fest, hvis ie7 ikke kom til at styrte ned, ville det?vi har en mærkelig mikrofon her, hvor vores ubåd menuer forsvinder, når de er udstillet over andre indhold (i vores eksempel, nogle lorem ipsum tekst).når markøren når punkt element, * puf * ikke mere menu.jeg er ret sikker på det er på grund af nogle underlige i den måde, ie7 omhandler holdning: relativ;,, og det er let at løse ved at udløse, haslayout på,. nav - et element.,,. nav en {* - 1}, yderligere overvejelser, som altid du bliver nødt til at lave din egen beslutning om browser og træk støtte, men redskaber som modernizr og respond.js kan tage nogle af smerten af at støtte ældre browsere.,,, jeg har testet menuen på mobile safari og hver androide 2.3 - jeg kunne få mine hænder på, og det lader til at virke helt godt.men denne teknik er meget javascript afhængige, og eftersom nogle mobile browsere (brombærbusk generelt) har meget ringe støtte til javascript, kunne vi måske gå nogle brugere med en ubrugelig navigation menu. heldigvis er der en række metoder, vi kan bruge til at tjene forenklede opstillingsskemaer til javascript mindre udstyr.den gode gammeldags teknik til at tilføje, ikke er klasse til det organ, mærke og fjerne det i din javascript kommer til at tænke på, - - men du kan også bare give href, attributter for den øverste navigation, sender brugerne til den almindelige "sko" kategori notering for eksempel, og stoler på, preventdefault, for at forhindre, at denne opførsel i javascript mulighed for udstyr, selvfølgelig medierne spørgsmål vil ikke virke i ældre versioner af ie, så du bliver nødt til at beslutte, om det er det værd, herunder en polyfill såsom respond.js til at udfylde dette hul. og sidst, men ikke mindst, er der det forbistrede programmerbare insekt, der forårsager zoom niveau til at ændre når du tager den.tjek den programmerbare orientationchange fastsætte manuskript - insektet her.,, yderligere behandling, selv om denne teknik kan være velegnet til visse situationer og menustrukturer, er der stadig en masse andre muligheder for at tæmme sejlads på mobile anordninger.for eksempel:,,, ryan debeasi er de seneste pædagogiske for en klog løsning på fælles plan navigations - menuer.,, browse gennem brad frosts roundups responderende sejladsmønstre...... og komplekse sejladsmønstre for responderende design., i et mobilt første løsning, tage et kig på sejlads menuen i html5 rock skaber en mobil først reagerer design.,,, det er gratis at gennemlæse, klon, eller gaffel de github repo, og tak for det!,

Goal
step 2
step 3
step 4
step 6
step 7



Previous:
Next Page: