I dag skal vi ta Orman Clarks menyvarslingsmerke design og bygge den ved hjelp av HTML og CSS. Vi ser på et par måter å oppnå effekten, inkludert bruk av HTML5-dataattributter som du kanskje ikke er kjent med. La oss dykke inn!
La oss starte med å kaste inn noen grunnleggende oppslag. Vi bruker HTML5-doktypen i hele opplæringen. Vi lager menyen selv ved først å legge til en hoved div etterfulgt av listeposter som vil opprette hver menykobling. Vi har også tatt med HTML5 shiv (eller shim) skriptet i hodet på dokumentet vårt. Dette kalles inn i spill med eldre versjoner av Internet Explorer, slik at de kan gjenkjenne og utforme HTML5-elementer.
Menyvarselsmerker
For å opprette strukturen på menyen vår bruker vi en ikke-bestilt liste med 4 listeposter og en ankermerke inne. Du vil kanskje også nest listen i en tag for distribusjon.
For denne demonstrasjonens skyld oppretter vi en div rundt menyen med en klasse av innpakning. Dette vil bare bli brukt til å flytte menyen til midten av siden.
Ditt oppslag bør se noe ut som dette;
Menyvarselsmerker
- Profil
- Innstilling
- Varsler
- Logg ut
Før vi begynner å stylere menyen, legger vi til noen tilbakestillinger og litt sidestyling. Vi kaster først inn en tilbakestilling for å fjerne eventuelle marginer, polstring etc fra nettleserens standard stilark. Deretter bruker vi en bakgrunnsfarge til kroppen og en skriftstørrelse på 16px. Denne faste skriftstørrelsen sikrer basestørrelsen for vår demo, men du kan foretrekke å sette den til 100%, slik at brukeren kan definere fontstørrelsen på nettleseren. Vi bruker en bredde på 70% til omslaget og senterer den med en margin-topp på 200px.
html, html, html, html, ht, p, blockquote, pre, a, abbr, akronym, adresse, stor, sitere, kode, del, dfn, em, skrift, img, inn, kbd, q, s, samp, liten, streik, sterk, sub, sup, tt, var, du, jeg, midt, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, tabell, bildetekst, tbody, tfoot, thead, tr, th, td margin: 0; polstring: 0; grense: 0; oversikt: 0; skriftstørrelse: 100%; vertikaljustering: basislinje; baklengs: gjennomsiktig; kropp linjehøyde: 1; ol, ul listestil: ingen; blockquote, q quotes: none; blockquote: før, blockquote: etter, q: før, q: etter innhold: "; innhold: ingen;: fokus disposisjon: 0; inn tekst-dekorasjon: ingen; del text-decoration: line -through; table border-collapse: collapse; border-spacing: 0; a tekst-dekorasjon: none; body background: #ededed; fontstørrelse: 16px; .wrapper width: 70%; margin: 200px auto;
For å sparke styling på menyen, fokuserer vi først på basen av den. Mål den ubestilte listen først, som ble gitt en klasse av "meny". Vi gir den en visning av inline-blokk, slik at vi kan bestemme bredden / høyden av den avhengig av innholdet som et blokkelement.
Deretter bruker vi en gradientbakgrunn med alle nettleserprefiksene. Deretter legger du til litt kantlinje, men hei, hva er de ems ?! Vi bruker ems (i stedet for piksler) for å justere grenseradiusen i forhold til skriftstørrelsen. Sjekk ut demoen; Du ser radiusen vokse forholdsmessig sammen med den større teksten.
For å utarbeide størrelsen vi trenger, tar vi 3 (vår ønskede grense radius størrelse i px) og deler den med 16px (kroppens skriftstørrelse). Så 3px / 16px = 0,188, men vi vil rundt det opptil 0,2.
Deretter skal vi bruke en enkel grått grense, deretter en bokseskygge med en dråpe- og innskyggingsskygge. Ikke glem disse nettleservennene også!
.meny display: inline-block; bakgrunnsbilde: -webkit-lineær-gradient (topp, rgb (249, 249, 249), rgb (240, 240, 240)); bakgrunnsbilde: -moz-lineær-gradient (topp, rgb (249, 249, 249), rgb (240, 240, 240)); bakgrunnsbilde: -o-lineær gradient (topp, rgb (249, 249, 249), rgb (240, 240, 240)); bakgrunnsbilde: -ms-lineær gradient (topp, rgb (249, 249, 249), rgb (240, 240, 240)); bakgrunnsbilde: lineær gradient (topp, rgb (249, 249, 249), rgb (240, 240, 240)); filter: progid: DXImageTransform.Microsoft.gradient (GradientType = 0, StartColorStr = '# f9f9f9', EndColorStr = "# f0f0f0"); -webkit-border-radius: 0.2em; -moz-border-radius: 0.2em; border-radius: 0.2em; grense: 1px solid #cecece; -webkit-boks-skygge: innspill 0px 1px 0px #fff, 0px 1px 2px rgba (0,0,0, .06); -moz-box-skygge: innspill 0px 1px 0px #fff, 0px 1px 2px rgba (0,0,0, .06); boksskygge: innspill 0px 1px 0px #fff, 0px 1px 2px rgba (0,0,0, .06);
Flytt på, la oss forbedre menyen ved å stylere listepostene. Først flyter vi listepostene til venstre, så de er alle på en linje og ikke oppført. Vi vil da plassere dem relativt, dette vil være nødvendig senere når vi lager merkene. Deretter legger vi til en kantlinje til venstre og en kant til høyre.
Nå må vi målrette mot det første listeelementet og det siste listeelementet, så vi gjør dette ved hjelp av pseudo-seleksjonene; :første barn
og :siste barn
(bruk nettleserstøtte når du bruker disse). For den første fjerner vi grensen til venstre, og vi fjerner den høyre grensen fra det siste listeposten.
.meny li float: left; stilling: i forhold; grense-høyre: 1px solid # d8d8d8; border-left: 1px solid #ffffff; .menu li: første barn border-left: none; .menu li: siste barn grense-høyre: ingen;
Neste ting vi trenger å gjøre er å utforme ankeretikettene. Først gir vi dem en font-familie av Helvetica Neue med noen font-stack fallbacks for folk som ikke har Helvetica-skrifttypen. Neste gir vi en skriftstørrelse på 0.75em (13px / 16px = 0.75). Deretter bruker vi en skriftvekt med fet skrift, etterfulgt av en farge på # 666666 og bruker en tekstskygge.
Vi legger nå noen polstring til venstre og høyre for 1em (13px / 13px = 1) og litt linjehøyde for å sentrere teksten vertikalt. Vi har basert linjens høyde på 30 px, tolket til ems.
.menyen er en font-familie: 'Helvetica Neue', Helvetica, sans-serif; font-size: 0.75em; font-vekt: bold; color: # 666666; tekstskygge: 0px 1px 0px #ffffff; skjerm: blokk; polstring: 0 1em; linje-høyde: 2.5em;
Vår meny begynner å se ganske bra ut nå!
Tid til å legge til de kule små varselboblene. Først må du erstatte HTML-HTML-menyen til menyen med følgende. Vi lager boblene ved hjelp av span-koder, og for hver farge vil vi bruke en passende klasse. Jeg har lagt til rosa, gul og blå.
- Profil2
- Innstilling3
- Varsler6
- Logg ut
For å opprette varselboblene, vil vi først utforme spanningskodene med alt unntatt fargen og kantfargene. På denne måten kan vi enkelt endre fargene ved ganske enkelt å endre klassenavn.
Først vil vi lage noen bredder og høyder, ta 18px / 12px = 1.5em. Da må vi plassere dem helt (0.5em fra høyre og -2em fra toppen). Deretter blir en linjehøyde brukt for å sentrere nummeret vertikalt, og tekstjusteringssenteret brukes til å sitte horisontalt.
En font-familie vil bli brukt med Helvetica Neue, igjen med fallbacks for brukere uten Helvetica. Vi gjør det modig, bruker en hvitfarge og legger til en tekstskygge. Deretter legger vi til noen bokseskygger (vi legger til to, en dråpeskygge og en innskuddskugg). Husk å lage disse mens du bruker nettleserprefikser. Nå legger vi til en grense-radius på 4em (omtrent 50 px).
For neste fase i prosessen vil vi dra nytte av noen CSS3 teknikker og få hover-effekten til å fungere. Vi skjuler først boblen med en opasitet på 0. For å lage våre kule små animasjoner bruker vi noen overganger. Vi vil målrette toppen og opaciteten og fortelle den å lette inn over en periode på 0,3 sekunder (3 millisekunder). Disse vil trenge at nettleserprefikser brukes, inkludert -o- og -ms-.
span posisjon: absolutt; top: -2em; høyre: 0.5em; bredde: 1.5em; høyde: 1,5em; linje-høyde: 1.5em; tekst-Justering: center; ont-family: 'Helvetica Neue', Helvetica, sans-serif; font-vekt: bold; farge: #fff; tekstskygge: 0px 1px 0px rgba (0,0,0, .15); -webkit-boks-skygge: innsett 0px 1px 0px rgba (255,255,255,35), 0px 1px 1px rgba (0,0,0, .2); -moz-boks-skygge: innspill 0px 1px 0px rgba (255,255,255, .35), 0px 1px 1px rgba (0,0,0, .2); boks-skygge: innspill 0px 1px 0px rgba (255,255,255, .35), 0px 1px 1px rgba (0,0,0, .2); -webkit-border-radius: 4em; -moz-border-radius: 4em; border-radius: 4em; opacity: 0; filter: alfa (opasitet = 0); -webkit-overgang: .3s enkle, enkle innacity -moz-overgang: .3s enkle, enkle innacity -o-overgang: .3s enkle, enkle, -ms-overgang: .3s enkle, enkle, Overgang: .3s enkle, enkle, uklarhet
Tid for den endelige estetiske berøringen på boblene; legger til noen CSS for å utforme fargene. Husk de klassene vi la til spannetikettene? Disse vil gjøre ting enkle, vi vil målrette hver farge, bruke en gradient og en kantfarge.
.rosa bakgrunnsbilde: -webkit-lineær-gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: -moz-lineær-gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: -o-lineær gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: -ms-lineær gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: lineær gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); filter: progid: DXImageTransform.Microsoft.gradient (GradientType = 0, StartColorStr = '# f78297', EndColorStr = "# f46677"); grense: 1px solid # ce4f5e; .yellow background-image: -webkit-lineær-gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: -moz-lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: -o-lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: -ms-lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); filter: progid: DXImageTransform.Microsoft.gradient (GradientType = 0, StartColorStr = '# feda71', EndColorStr = "# feba48"); grense: 1px solid # dea94f; .blå bakgrunnsbilde: -webkit-lineær-gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: -moz-lineær-gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: -o-lineær gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: -ms-lineær gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: lineær gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); filter: progid: DXImageTransform.Microsoft.gradient (GradientType = 0, StartColorStr = '# ace4f8', EndColorStr = "# 6ccdf3"); grense: 1px solid # 79b5cb;
Selvfølgelig er våre bobler vakkert stylet, men helt usynlige. Vi må legge til noe CSS slik at boblene kan vises på svinger. Først legg litt farge til ankeretikettene når de svinger over, bare en enkel mørkegrå. Deretter målretter vi etter spenningen når elementlistelementet er svingt over. Vi legger til en opasitet på 1 for å gjøre den synlig og endre toppposisjonsverdien slik at den vises som om den glir ned.
.meny li: svev en farge: # 343434; .menu li: svever et span top: -1em; opacity: 1; filter: alfa (opasitet = 100);
Så hva om HTML5 data attributter?
Glad du spurte ...
For å lage vår meny med HTML5-dataattributter må vi først endre HTML-merket vårt. Vi skal bruke noen egendefinerte attributter for å lage boblene. HTML5 introduserte et nytt data-attributt der attributtnavnet kan være alt så lenge det er minst 1 tegn langt og begynner med 'data-'.
For denne opplæringen bruker vi "data-boble". Disse vil tillate oss å lagre og få tilgang til varslingsverdiene uten å legge til unødvendig oppsettstruktur i dokumentet vårt. Legg merke til at vi også har flyttet fargeklassene våre til ankeretikettene.
- Profil
- Innstilling
- Varsler
- Logg ut
Siden vi ikke lenger skal jobbe med spanelementene, må du gå tilbake til CSS og slette følgende regler.
span posisjon: absolutt; top: -2em; høyre: 0.5em; bredde: 1.5em; høyde: 1,5em; linje-høyde: 1.5em; tekst-Justering: center; font-familie: "Helvetica Neue"; font-vekt: bold; farge: #fff; tekstskygge: 0px 1px 0px rgba (0,0,0, .15); -webkit-boks-skygge: innsett 0px 1px 0px rgba (255,255,255,35), 0px 1px 1px rgba (0,0,0, .2); -moz-boks-skygge: innspill 0px 1px 0px rgba (255,255,255, .35), 0px 1px 1px rgba (0,0,0, .2); boks-skygge: innspill 0px 1px 0px rgba (255,255,255, .35), 0px 1px 1px rgba (0,0,0, .2); -webkit-border-radius: 4em; -moz-border-radius: 4em; border-radius: 4em; opacity: 0; filter: alfa (opasitet = 0); -webkit-overgang: .3s enkle, enkle innacity -moz-overgang: .3s enkle, enkle innacity -o-overgang: .3s enkle, enkle, -ms-overgang: .3s enkle, enkle, Overgang: .3s enkle, enkle, uklarhet .pink bakgrunnsbilde: -webkit-lineær-gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: -moz-lineær-gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: -o-lineær gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: -ms-lineær gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: lineær gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); filter: progid: DXImageTransform.Microsoft.gradient (GradientType = 0, StartColorStr = '# f78297', EndColorStr = "# f46677"); grense: 1px solid # ce4f5e; .yellow background-image: -webkit-lineær-gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: -moz-lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: -o-lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: -ms-lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); filter: progid: DXImageTransform.Microsoft.gradient (GradientType = 0, StartColorStr = '# feda71', EndColorStr = "# feba48"); grense: 1px solid # dea94f; .blå bakgrunnsbilde: -webkit-lineær-gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: -moz-lineær-gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: -o-lineær gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: -ms-lineær gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: lineær gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); filter: progid: DXImageTransform.Microsoft.gradient (GradientType = 0, StartColorStr = '# ace4f8', EndColorStr = "# 6ccdf3"); grense: 1px solid # 79b5cb; .menu li: svever et span top: -1em; opacity: 1; filter: alfa (opasitet = 100);
La oss nå målrette våre dataattributter i stedet, vi må legge til noen regler i vårt CSS.
Det vil se veldig ut som det vi brukte til våre spanelementer. Denne gangen vil vi imidlertid målrette på: etter pseudo-elementer av anker-tagger med et attributt for "data-boble". For å gjøre det bruker vi CSS Attribute Selectors.
Når vi bruker en: etter pseudo (og dermed genererer innhold), må vi definere noe kjøtt i det med innhold: ". Nok en gang bruker vi vår egendefinerte attributt vi opprettet i HTML, og setter inn det.
Igjen, for å klare synligheten til vår boble, gir vi den en opasitet på 1 når lenken er svevet over. Dessverre, på grunn av begrensninger med attributtvelgerer, kan vi ikke animere dem med CSS selv.
.meny li en [data-boble]: etter innhold: attr (data-boble); stilling: absolutt; top: -1.25em; høyre: 0.5em; bredde: 1.5em; høyde: 1,5em; linje-høyde: 1.5em; tekst-Justering: center; font-familie: "Helvetica Neue"; font-vekt: bold; farge: #fff; tekstskygge: 0px 1px 0px rgba (0,0,0, .15); -webkit-boks-skygge: innsett 0px 1px 0px rgba (255,255,255,35), 0px 1px 1px rgba (0,0,0, .2); -moz-boks-skygge: innspill 0px 1px 0px rgba (255,255,255, .35), 0px 1px 1px rgba (0,0,0, .2); boks-skygge: innspill 0px 1px 0px rgba (255,255,255, .35), 0px 1px 1px rgba (0,0,0, .2); -webkit-border-radius: 4em; -moz-border-radius: 4em; border-radius: 4em; opacity: 0; filter: alfa (opasitet = 0); .menu li: svever en [data-boble]: etter opacity: 1; filter: alfa (opasitet = 100);
Til slutt må vi utforme det genererte innholdet i de ulike klassene, slik at vi kan endre fargene enkelt (akkurat som vi gjorde med spanelementene).
a.pink [data-boble]: etter bakgrunnsbilde: -webkit-lineær-gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: -moz-lineær-gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: -o-lineær gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: -ms-lineær gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); bakgrunnsbilde: lineær gradient (topp, rgb (247, 130, 151), rgb (244, 102, 119)); filter: progid: DXImageTransform.Microsoft.gradient (GradientType = 0, StartColorStr = '# f78297', EndColorStr = "# f46677"); grense: 1px solid # ce4f5e; a.yellow [data-boble]: etter bakgrunnsbilde: -webkit-lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: -moz-lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: -o-lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: -ms-lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); bakgrunnsbilde: lineær gradient (topp, rgb (254, 218, 113), rgb (254, 186, 72)); filter: progid: DXImageTransform.Microsoft.gradient (GradientType = 0, StartColorStr = '# feda71', EndColorStr = "# feba48"); grense: 1px solid # dea94f; a.blue [data-boble]: etter bakgrunnsbilde: -webkit-lineær gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: -moz-lineær-gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: -o-lineær gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: -ms-lineær gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); bakgrunnsbilde: lineær gradient (topp, rgb (172, 228, 248), rgb (108, 205, 243)); filter: progid: DXImageTransform.Microsoft.gradient (GradientType = 0, StartColorStr = '# ace4f8', EndColorStr = "# 6ccdf3"); grense: 1px solid # 79b5cb;
Vi har vellykket opprettet en meny sammen med noen fine meldingsbobler og animert dem! Vi har til og med gått videre og tatt fordel av nye teknikker innen HTML5.
Jeg håper du likte denne opplæringen, takk for å lese!