En av de største utfordringene for webdesignere er å finne måter å legge mye informasjon på en side uten å miste brukbarheten. Tabbed-innhold er en fin måte å håndtere dette problemet på, og har blitt brukt mye på blogger nylig. I dag skal vi bygge en enkel liten tabbinformasjonsboks i HTML, og få den til å fungere ved hjelp av noen enkle Javascript, og til slutt vil vi oppnå det samme ved hjelp av jQuery-biblioteket.
Første ting først, vi trenger noe som ser fantastisk ut. Så en rask tur til Photoshop og Voila vi har en fin mockup av hva vår tabbed komponent skal se ut. Det er ganske rett frem med noen ekstra gradienter for å gjøre det nettopp fantastisk. Du kan ta tak i Photoshop PSD-filen for dette bildet hvis du vil ta en nærmere titt, men det er ganske enkelt, og vi kan bygge den av den felle JPG virkelig.
Det første du må gjøre når du bygger selvfølgelig, er å få en grov ide om hvordan du skal gjøre det. Dette blir lettere jo flere ting du har utviklet. Ser på dette bildet vil jeg si det beste å gjøre er:
Så å oppsummere, vil det være noe slikt:
Ikke bekymre deg hvis du ser på det bildet, får du ikke umiddelbart å tenke på den strukturen. Noen ganger trenger du bare å gjøre ting ved prøving og feiling. I mitt tilfelle har jeg laget disse små tabbedtingene noen ganger, og jeg vet at dette er en fin enkel måte å lage dem på.
Også det er fint å tenke på strukturen som dette før du har mange klassenavn og -innhold og innhold fordi det kan bli vanskelig å se skogen fra trærne senere. Spesielt når du legger til innholdet for alle de forskjellige kategoriene.
Så nå som vi har et bilde i tankene om hvordan vi bygger vår struktur, la oss få tak i det!
Nå, hvis du har fulgt mine opplæringsprogrammer på PSDTUTS, vet du at jeg elsker en god gradientbakgrunn. Så før vi begynner med tabbestrukturen, la oss få en fin bakgrunn!
Åpne Photoshop, opprett et dokument på 1000px x 1000px og tegne en fin (subtil) radialgradient som den som er vist nedenfor. Merk at jeg har trukket ut fra midten / toppen og sørget for at graden er ferdig når jeg kommer til kanten av dokumentet. Det betyr at jeg kan sette bakgrunnsfargen i HTML for å være den mørkere fargen, og hvis noen strekker nettleservinduet, blir det sømløst.
Så opprett en ny katalog for prosjektet, og opprett deretter en annen katalog inni det som heter Bilder og lagre bildet i som background.jpg. Når du sparer bruk Fil> Lagre for web og enheter og velg JPG med en kvalitetsinnstilling på ca 70. Det kommer ut til en filstørrelse på 16kb som ikke er så ille. Det pleide å være en tid hvor du virkelig måtte scrimp og lagre, men nå vil du bare sørge for at du ikke blir dumt sløs med filstørrelsene dine.
Nå lager vi et HTML-dokument og skriver inn noen kode:
Tabbed Structure - Regular
Så det vil være grunnlaget for vår HTML. Nå skal vi opprette style.css dokument og skriv i følgende:
kropp bakgrunnsbilde: url (bilder / bakgrunn.jpg); background-repeat: no-repeat; bakgrunnsposisjon: toppsenter; background-color: # 657077; margin: 40px;
Et par ting å merke seg her:
Du kan se det resulterende HTML-dokumentet her. Merk at hvis du endrer størrelsen på vinduet ditt, er det en fin sømløs uteksaminert bakgrunn. Wunderbar!
Deretter legger vi til vår struktur på siden, slik at vi kan begynne å utforme den.
Tabbed Structure - Regular
Så som du kan se, har jeg i utgangspunktet brukt samme struktur som jeg nevnte i trinn 2. Jeg har lagt til noen ids og klasser og noe faktisk innhold. Her er begrunnelsen bak det jeg har gjort:
.tabbed_area ul
men dette kan bli forvirret med fremtiden OK så uten stiler ser det egentlig ikke ut som mye ... enda!
Nå med styling opp elementer, synes jeg det er best å jobbe fra utsiden av elementet. Så vi starter med dette elementet -
#tabbed_box margin: 0px auto 0px auto; bredde: 300 piksler;
Nå skal vi gjøre overskriftsområdet. Vi kan stile overskriften slik:
.tabbed_box h4 font-family: Arial, Helvetica, sans-serif; font-size: 23 pikslene; color: # ffffff; brev-Avstand: -1px; margin-bottom: 10px; .tabbed_box h4 small color: # e3e9ec; font-vekt: normal; font-size: 9px; font-familie: Verdana, Arial, Helvetica, sans-serif; text-transform: store bokstaver; stilling: i forhold; top: -4px; venstre: 6px; brev-Avstand: 0px;
Et par ting å merke seg her:
Neste gir vi vårt indre
.tabbed_area border: 1px solid # 494e52; background-color: # 636d76; padding: 8 piksler;
Dette gir bare litt av definisjonen og plasserer det indre elementet vekk fra sidene. Du kan se hvor vi står oppe på bildet nedenfor.
Ved å jobbe fra utsiden i, har vi gitt elementet vårt litt form, og det er mye lettere å se hvordan det kommer til å se ut. Også ofte vil du ha begrensninger som kommer fra utsiden, for eksempel kan boksen kanskje trenge inn i en kolonne av viss bredde. Endelig er det også en god ide å gå ut i, fordi det er en hvilken som helst stil arv er tydelig. For eksempel hvis du gikk den andre veien og gjorde de indre elementene først, senere stiler kan påvirke de indre elementene, og du må gå tilbake og justere allikevel.
Nå kommer vi til de gode greiene - fanene! Hvis vi legger til dette lille stykket CSS, vil vi gå langt for å få kategoriene til å se ut som faner:
ul.tabs margin: 0px; padding: 0 px; ul.tabs li listestil: none; display: inline;
Denne koden sier at
Det er faktisk andre visningsverdier som du kan lese om på Quirksmode.
Selvfølgelig ser våre "faner" fortsatt ganske skitne ut, så la oss gi dem litt stil. Vi har brukt
ul.tabs li a background-color: # 464c54; color: # ffebb5; polstring: 8px 14px 8px 14px; text-decoration: none; font-size: 9px; font-familie: Verdana, Arial, Helvetica, sans-serif; font-vekt: bold; text-transform: store bokstaver; grense: 1px solid # 464c54; ul.tabs li a: svever bakgrunnsfarge: # 2f343a; border-color: # 2f343a; ul.tabs li a.active bakgrunnsfarge: #ffffff; color: # 282e32; grense: 1px solid # 464c54; grensebunn: 1px solid #ffffff;
Så det vi har gjort her er:
Det er to ting vi må gjøre for å få innholdsområdene til å fungere. Den første er at vi skal gjøre de to andre områdene forsvinne og den andre er å få dem til å se riktig utformet.
.innhold bakgrunnsfarge: #ffffff; padding: 10px; grense: 1px solid # 464c54; # content_2, # content_3 display: none;
Du ser at den første delen av CSS forteller nettleseren som alle elementene med class = "innhold" bør være hvit med polstring og en kantlinje (samme farge som tappene). Den andre delen sier at elementene med id = "content_2" og id = "content_3" bør ha en visning: ingen, eller i andre ord skal være usynlig.
Senere når vi legger til noen JavaScript kan vi bruke skriptet til å skifte mellom display: none og display: blokk for å få dem til å vise og skjule.
Så her er hvordan våre faner ser, du kan også se en HTML-versjon av hvor vi er. Som du ser, ser det ganske nær nå, men vi må fikse avstanden og legge til noe faktisk innhold i.
Å fikse avstandsproblemet er faktisk bare et spørsmål om å legge til marginer tilbake til
ul.tabs margin: 0px; padding: 0 px; margin-top: 5 px; margin-bottom: 6 piksler;
For å være helt ærlig er jeg ikke sikker på hvorfor problemet med avstand oppstod. Noen ganger HTML mystiserer meg, men jeg justerer innstillingene inntil ting stemmer seg. Noen ganger i prosessen finner jeg ut hva som var årsaken, noen ganger gjør jeg det ikke. Jeg antar det jeg sier er, med mindre du kommer til å virkelig komme inn i nitty gritty detaljer av w3 spesifikasjoner, før eller senere kommer du til å løpe inn i noen problemer som du ikke kan forklare. Ikke la den få deg ned, bare juster til du finner en løsning eller en løsning.
Nå legger vi til noe innhold i innholdsområdet. Jeg unngikk dette tidligere da jeg ønsket å holde HTML-koden enkel. Her er noen:
Bla gjennom nettsted Velg en fane
Så her har jeg nettopp lagt til en rekke uordnede lister inn i de tre innholdsområdene. Forresten snakker jeg dette opp som om det skulle bli brukt på en WordPress-blogg. Men egentlig kan du bruke dette til alle slags ting. Den nye FlashDen-hjemmesiden jeg jobbet for noen dager siden, bruker fanerte områder for å vise forskjellige typer nyere filer.
Nå legger vi til noen styling for å få dem til å se litt finere ut:
.innhold ul margin: 0px; polstring: 0px 20px 0px 20px; .content ul li listestil: none; grensebunn: 1px solid # d6dde0; padding-top: 15px; padding-bottom: 15px; font-size: 13 piksler; .content ul li a text-decoration: none; color: # 3e4346; .content ul li a small color: # 8b959c; font-size: 9px; text-transform: store bokstaver; font-familie: Verdana, Arial, Helvetica, sans-serif; stilling: i forhold; venstre: 4px; top: 0px;
Nok en gang styler vi våre lister opp. Denne gangen i stedet for å gi
Andre ting å merke seg:
Så dette er hva vår side ser ut som:
Totalt sett er det ganske bra bortsett fra at vi har en for mange grenser. Men det er ok, vi kan fikse det med en magisk pseudoväljare som heter 'siste barn' som dette:
.innhold ul li: siste barn border-bottom: none;
Denne stilen gjelder bare det siste elementet i sin egen type - det vil si det siste
Nå er det bare ett skritt for å fullføre vår HTML, og det er noen fine bakgrunnsbilder til elementene våre. Som du vil huske noen av elementene i min opprinnelige PSD-fil hadde subtielle gradienter. Så nå er det på tide å legge til dem. Det er tre oppgraderte biter: (a) På den aktive kategorien (b) på de inaktive kategoriene og (c) nederst i innholdsområdet. Her er de tre bildene vi trenger:
De er litt vanskelig å se, men i utgangspunktet er de hver eneste liten grad av gradient som vi vil angi som repeterende bakgrunnsbilder. Her er en nærbilde av den for fanen (merknad jeg har lagt en tynn kant rundt den, så det er litt tydeligere. Legg merke til at det er en 1px hvit linje øverst. Det vil få faken til å se veldig skarpt ut.
Så vi må gjøre noen tilpasninger til CSS-koden for å legge til i bakgrunnsbilder, slik som dette:
ul.tabs li a bakgrunnsbilde: url (images / tab_off.jpg); Bakgrunnen-repeat: repeat-x; Bakgrunnen-: I bunnen; ul.tabs li a.active bakgrunnsbilde: url (images / tab_on.jpg); Bakgrunnen-repeat: repeat-x; Bakgrunnen-stilling: topp; .content bakgrunnsbilde: url (images / content_bottom.jpg); Bakgrunnen-repeat: repeat-x; Bakgrunnen-: I bunnen;
Legg merke til at jeg faktisk har satt inn disse ekstrabitene i resten av klassens definisjoner, men for korthetens skyld har jeg nettopp kopiert i utdrag. Som du ser i alle tre tilfeller, gjentar vi bare et bakgrunnsbilde langs x-aksen. I tilfelle av to (av-fanen og innholdsområdet) gjør vi det langs bunnen, og i den andre er det langs toppen.
Og med det har vi offisielt fullført HTML / CSS-delen av denne opplæringen. Du kan se den ferdige stilte siden her.
Den neste tingen vi trenger å gjøre er å legge til noe Javascript for å gjøre at våre faner faktisk gjør noe. Først skal vi gjøre dette for hånd, og så skal jeg vise deg hvordan du bruker et Javascript-bibliotek for å oppnå det samme. Nå skal jeg påpeke at jeg ikke er en JS-ekspert, og jeg håper å ta med noen virkelige programmestere til å skrive opplæringsprogrammer her, så hvis du legger merke til at jeg gjør noe som er litt tvilsomt, vær så snill å legge igjen en kommentar og Jeg vil røre opp opplæringen og gjøre det litt mer best praksis!
Så først la oss skissere hva vi vil gjøre når noen klikker på en kategori. Vi vil slå av vår nåværende kategori, slå på den nye, gjemme det gjeldende innholdsområdet og vise det nye.
Nå kan vi ha noe smart som fungerer som den aktuelle kategorien er og slår den av, men det er enklere å bare gå gjennom og slå dem av og slå på den vi vil ha. På samme måte som innholdsområdene, kan vi gjemme alle tre av dem og deretter vise den vi ønsker. Dette sparer oss for å trene den nåværende situasjonen.
Elementene vi jobber med, ser slik ut:
Nå i Javascript kan vi finne et element ved å bruke det id og metoden document.getElementById (). Så document.getElementById ('content_1') ville gi oss det første innholdsområdet. Vi kan da angi at det er visningsstil til ingen ved hjelp av denne linjen:
document.getElementById ('content_1'). style.display = 'ingen';
På samme måte som å se en klasse bruker vi:
document.getElementById ('tab_1'). className = 'aktiv';
Så da a egentlig Enkelt tilnærming ville være å skrive:
funksjon tabSwitch (new_tab, new_content) document.getElementById ('content_1'). style.display = 'ingen'; document.getElementById ('content_2'). style.display = 'none'; document.getElementById ('content_3'). style.display = 'none'; document.getElementById (new_content) .style.display = 'blokk'; document.getElementById ('tab_1'). className = "; document.getElementById ('tab_2'). className ="; document.getElementById ('tab_3'). className = "; document.getElementById (new_tab) .className = 'aktiv';
Dette ville bli plassert inne i en fil, la oss kalle det functions.js. Vi vil da ringe dette skriptet ved å endre våre fanekoblinger til:
Og sikkert nok, her er et eksempel på vårt super enkle javascript eksempel. Det fungerer!
Nå er det noen veldig åpenbare problemer med dette skriptet. Ikke minst er det at hvis du legger til en annen fane må du endre din funksjon. Og hvis du hadde mer enn ett sett med faner på en side, trenger du to funksjoner! Så la oss bøte opp litt:
funksjon tabSwitch_2 (aktiv, nummer, tab_prefix, content_prefix) for (var i = 1; i < number+1; i++) document.getElementById(content_prefix+i).style.display = 'none'; document.getElementById(tab_prefix+i).className ="; document.getElementById(content_prefix+active).style.display = 'block'; document.getElementById(tab_prefix+active).className = 'active';
Vår andre versjon av kategorien bytte funksjonen tar et par flere argumenter, men er litt smartere. Det antas at vi har et sett av faner og et sett med innholdsområder, og de har ID-er som har et prefiks og et sett med økende tall. Dvs. tab_1, tab_2 ... og innhold_1, innhold_2 ...
Det første argumentet vår funksjon tar, 'aktiv', er nummerfliken / innholdet vi vil ha på. Det andre argumentet, 'tall', er antall faner som brukes. Det tredje og fjerde argumentet er prefiksene som brukes i elementene til elementene våre.
Funksjonen har da en forløp som sykler gjennom fra 1 til antall faner og slår dem alle av, og bytter de to vi vil ha på igjen på slutten. Med andre ord er det samme skript som før, men vi har nettopp gjort det litt smartere.
Så i vårt eksempel for å ringe funksjonen ville vi ha denne koden:
Dette betyr at senere hvis vi hadde et andre sett med faner, kunne vi gi dem forskjellige id-prefikser og bruke samme funksjon igjen og igjen.
Se det andre javascript-eksemplet.
I det siste har det vært mange Javascript-biblioteker som vises, og faktisk er det (minst) to som er spesielt laget for å oppnå denne tabbeffekten: MooTabs og DomTab. Jeg har ikke brukt heller, men fra et kort blikk så de ganske brukbare ut.
Men som jeg har hørt mye om jQuery-biblioteket, bestemte jeg meg for å forsøke det samme fanebryt ved hjelp av jQuery. Jeg har en følelse av at løsningen min kan bruke litt arbeid, men det er fortsatt interessant å se gjennom.
Så først, gå til jQuery-siden og last ned den nyeste versjonen av deres skriptbibliotek.
jQuery gir en rekke funksjoner som lar deg velge grupper av ting. For eksempel hvis du ønsket å velge hvert element på siden som er en lenke (dvs.. elementer) og deretter få dem til å forsvinne, ville du plassere dette i din område:
Den første linjen legger til jQuery-skriptbiblioteket. Hovedskriptområdet er inne i et stykke kode som ser slik ut: $ (Dokument) .ready (funksjon () );
Dette forteller i utgangspunktet at nettleseren din skal utføre alt inni når det treffer siden. Så i vårt tilfelle gir vi det kommandoen:
$ ( "A") slideUp (.);
Dette sier å finne alt som er en og kjør slideUp () på den. Eller med andre ord: finn alle koblingene og få dem til å forsvinne med en glidende effekt. Prøv å legge til det skriptet på en side og last det og du vil se alle koblingene dine forsvinne. Ganske pent, huh?
Uansett er det mange måter å velge ting på, og du kan lese om dem i API og dokumentasjon. Du kan gjøre ting som å finne hvert element med en bestemt klasse, et bestemt ID og så videre. På et tidspunkt vil jeg skrive en riktig introduksjon til jQuery-opplæringen her, men for øyeblikket vil det lille introet gjøre - foruten å ha bare en times erfaring med jQuery, mistenker jeg at det ville være noe av en travesty for meg å skrive en intro til det!
Så etter et lite eksperiment kom jeg opp med en måte å bruke jQuery på for å få mine faner til å gå inn og ut. For å gjøre dette først endret jeg linkene mine til å ikke ha noe javascript, men heller å ha en tittel attributt og en ekstra class = "tab". Legg merke til at du kan gi et element to klasser ved å gjøre dette: class = "tab aktiv".
Nå bruker jeg disse to elementene, i utgangspunktet kan jeg få alle koblingene med klassen 'fan' og jeg kan også finne noe element hvis id er lik tittelattributtet til lenken som nettopp ble klikket. Her er skriptet (plassert i
) som forklarer dette litt bedre:Så jeg har lagt til kommentarer for å bidra til å forklare. I utgangspunktet når en kobling med klassen 'fan' klikkes, gjør vi alt i den funksjonen.
Og for å se det endelige arbeidseksemplet med jQuery, klikk her!
OK så noen få minutter etter at jeg har laget mitt jQuery-eksempel, oppdaget jeg at det faktisk er en spesiell "tabs" visuell kontroll i jQuery. Jeg må ha et spill med det i morgen, uten tvil det vil gjøre livet enklere!
I mellomtiden håper jeg at du likte opplæringen og fikk noe ut av det.