Hurtig Tips Gi Ormans Navigasjon den Målbehandlingen

Vi har nylig publisert en flott opplæring som bygde Orman Clarks vertikale navigasjonsmeny inn i et fleksibelt, jQuery-drevet trekkspill. Det er faktisk mulig å få alt til å fungere uten å lene seg på jQuery i det hele tatt, og er den perfekte sjansen til å spille med CSS: målvelger.


Så hvordan?

Vi kommer til å glemme jQuery og i stedet bruke CSS :mål pseudovelger for å gjøre vår trekkspillmeny utvide og kontrakt.

Som en påminnelse her er den opprinnelige jQuery-demoen, så er det den rene CSS-tilnærmingen.


De :mål Pseudovelger

Du vil uten tvil være kjent med nettadresser som ser slik ut: http://www.w3.org/TR/selectors/#target-pseudo. Det avsluttes med et # tegn og et element-ID, som brukes til å ta nettleseren direkte til det elementet. Denne spesielle nettadressen er det perfekte eksempelet - det tar deg til overskriften med et id av # Target-pseudo (vær så snill å gå og lese).

Når stikket er på enden av en URL, er dette ID kjent som et fragmentidentifikator. Det er ikke bare vant til å ta nettleseren til et sted på siden, det kan også brukes via CSS for å identifisere elementet i spørsmålet.

Kort oppsummert; vi bruker :mål å velge og manipulere elementet i fragmentidentifikatoren.


Trinn 1: Skal vi begynne?

La oss sparke ved å laste ned de opprinnelige kildefilene fra den første opplæringen. Styling er allerede gjort for oss, så det er lite poeng i å gjenoppfinne hjulet.

Start med å åpne index.html, på linje 10, så får du se at jQuery er referert. Vi vil ikke trenge det, så bli kvitt det.

     Vertikal navigasjonsmeny: CSS3 kodet    

Så ved foten av dokumentet finner du funksjonen som får jQuery-trekkspillet oppe. Bli kvitt alt det også.

  

Utmerket. Vi har nå en mye renere grunnlag.


Trinn 2: Kan jeg se noen identifikasjon?

Som nevnt ovenfor, :mål velgeren vil peke på hvilket som helst element som refereres til i fragmentidentifikatoren. Vi må derfor sørge for at våre primære listeposter alle har unike IDer, og at ankrene i dem har tilsvarende lenker:

 
  • venner 340
    • Søte kattunger 14
    • Merkelige "ting" 6
    • Automatisk mislykkes 2
  • Nå, når du klikker på koblingene, ser du en fragmentidentifikator vises i webadressen:


    Trinn 3: Kollaps

    For øyeblikket, etter å ha fjernet alle jQuery-biter og bobs, vil trekkspillet bli utvidet fullt ut. Vi trenger sin opprinnelige tilstand for å bli kollapset, slik at vi kan avsløre hver delseksjon når linkene klikkes.

    Gå over til eksisterende CSS-fil, vi skal legge til noen regler nederst:

     / * flere stilarter * / .menu> li> ul høyde: 0; overløp: skjult; 

    Vi peker på våre undermenyer her; enhver direkte etterkommer av menyen. Vi sier at deres innledende høyde er 0, og at overløp er skjult for å hindre at innholdet presser seg inn i visningen. Vi har nå alt sammen kollapset. Og det er slik det vil forbli med mindre vi gjør noe med det ...


    Trinn 4: Og Utvid

    Vi vil at hver undermeny skal utvides, men bare når vi har klikket på overordnet lenke. La oss bruke :mål å velge dem:

     .meny> li: mål> ul høyde: auto; 

    Enkelt sagt, dette sier: "Se det li som nevnes i url? Vel, endre høyden på ul i den til auto". Når du klikker et annet sted og id ikke lenger vises i webadressen, kollapser undermenyen igjen. Prøv det!


    Trinn 5: Utsmykker

    Visuelt er det et par ting igjen å gjøre. Den aktive tilstanden er ikke lenger tildelt av jQuery, så vi må sørge for at våre mållister er blå. Disse eksisterer ikke lenger:

     .meny> li> a.aktiv
     .meny> li a.active span

    Så bytt dem ut for disse:

     .meny> li: mål> a
     .meny> li: mål> et span

    Vi legger også til en ramme i bunnen av våre utvidede undermenyer:

     .meny> li: mål> ul høyde: auto; grensebunn: 1px solid # 51555a; 

    OK, Orman vil være fornøyd med det :) Sjekk ut hva vi har så langt.


    Trinn 6: Overganger

    Jeg vet. Du roper på skjermen "Hva med de glatte overgangene ?!" Jeg er redd for at du kommer til å bli skuffet. Med mindre vi spesifiserer en bestemt høyde for undermenyene, kan vi ikke bruke CSS-overganger til jevnt å utvide og kollapse trekkspillet vårt. Overganger vil ikke leke pent med høyde: auto. Så klart du kunne spesifiser en bestemt høyde:

     .meny> li: mål> ul høyde: 7.9em; grensebunn: 1px solid # 51555a; 

    og bruk deretter overganger:

     .meny> li> ul høyde: 0; overløp: skjult; -webkit-overgang: høyde 0,3 lett-i-ut; -moz-overgang: høyde 0,3 lett-i-ut; -o-overgang: høyde 0,3 lett-i-ut; -ms-overgang: høyde 0,3 lett-i-ut; overgang: høyde 0,3 lett-i-ut; 

    ... men menyen din vil ikke lenger være 100% fleksibel. Du vil bli begrenset til et bestemt nummer (3) av undermenyelementene. Sjekk ut demoen.


    Hva vi kunne gjør bare for å glatte ting ut, legg til en overgang til en annen eiendom. Vi kan ikke ha høydeovergangen, så vi skal gjøre med en overføringsovergang:

     .meny> li> ul høyde: 0; overløp: skjult; opasitet: 0; filter: alfa (opasitet = 0); / * IE6-IE8 * / -webkit-overgang: opacity 0.9s easy-in-out; -moz-overgang: opacity 0.9s easy-in-out; -Overgang: Opacity 0.9s Easy-in-Out; -ms-overgang: opacity 0.9s easy-in-out; Overgang: Opacity 0.9s easy-in-out;  .menu> li: target> ul høyde: auto; grensebunn: 1px solid # 51555a; opasitet: 1; filter: alfa (opasitet = 100); / * IE6-IE8 * /

    Det vi har gjort er satt standard opacity av undermenyen til 0; Ikke bare har den en høyde på 0, den er nå også gjennomsiktig. Vi stiller deretter overgangene på standardstatus. På hover-tilstanden sniker det seg fortsatt åpent, men da blir innholdet synlig. Litt lettere på øyet.


    Trinn 7: Eldre nettlesere

    Et annet problem er at :mål blir ikke gjenkjent av eldre nettlesere (Internet Explorer 8 og under), slik at vår sammenbruddte meny blir gjort ubrukelig i disse nettleserne. La oss bruke et par alternative metoder, som i det minste vil gjøre navigasjonen tilgjengelig.

    For det første legger vi til en betinget kommentar (etter vår første CSS-forespørsel) for å hente i en sekundær CSS-fil hvis nettleseren er Internet Explorer 8 eller tidligere:

     

    Så i den filen gjentar vi bare reglene vi nettopp har jobbet med, men i stedet for å bruke :mål, vi bruker :sveve.

     .meny> li: svever> ul høyde: 7.9em; grensebunn: 1px solid # 51555a; 

    Igjen, sjekk ut demoen. Ikke akkurat det vi var etter, men i det minste er det en bakoverkompatibel, tilgjengelig navigasjon.


    Konklusjon

    Gitt valget, vil du sannsynligvis fortsatt velge jQuery-tilnærmingen. Det er like akseptert i alle nettlesere (så lenge JavaScript er aktivert) og effekten er jevnere. Fortsatt, hvis du ikke var klar over :mål velgeren, vil denne Quick Tip forhåpentligvis gi deg et innblikk i mer CSS potensial.