Documente Academic
Documente Profesional
Documente Cultură
HTML5 este noua versiune de HTML. Noul standard introduce notiuni noi pe care o sa le studiem in acest curs.
1.1 Introducere
Exemplu: Code:
<!DOCTYPE HTML> <html> <body> <video width="320" hei ht="2!0" "o#t$ol%=""o#t$ol%"> <%o&$"e %$"="'ilm(o " ty)e="video*o " *> <%o&$"e %$"="'ilm(m)!" ty)e="video*m)!" *> <%o&$"e %$"="'ilm(webm" ty)e="video*webm" *> +$ow%e$&l dv% #& %&)o$t, t, -&l video( <*video> <*body> <*html>
Ce este HTML5? HTML5 reprezinta noul standard pentru HTML, XHTML si HTML DOM. Versiunea curenta a HTML (versiunea 4 a aparut in !""". #e atunci insa $e%&ul s&a sc'im%at mult. Tocmai de aceea se impunea aparitia unui nou standard. (nca se lucreaza la acest standard dar multe %ro$sere ()ire*ox, C'rome, +pera au de,a suport pentru HTML-. Cum a aparut HTML5? La realizarea acestui nou standard au cooperat W3C (World W de We! Consort um si WH"TW# (We! H$perte%t "ppl cat on Tec&nolo'$ Wor( n' #roup . .H/T.0 s&a ocupat de *orumularele si aplicatiile $e% iar .1C de 2HTML 3.4. (n anul 3445 cele 3 6rupuri s&au decis sa cola%oreze si sa realizeze impreuna noul standard HTML. )-au sta! l t cat*ea re'ul no + & noile caracteristici tre%uie sa se %azeze pe HTML, C77, #+M si 8ava7cript & se reduce nevoia unor plu6inuri externe (cum ar *i )las' & manipularea mai usoara a erorilor & utilizarea marca,elor pentru a inlocui scriptin6ul & HTML- tre%uie sa *ie independent de dispozitiv (device & procesul de dezvoltare tre%uie sa *ie desc'is pu%licului. Cate*a d n caracter st c le no pe care le are HTML5+ !
& elementul canvas pentru desen & elementele video si audio pentru redare *isiere media & suport mai %un pentru 6azduirea o**line locala & elemente noi pentru continut: article, *ooter, 'eader, nav, section & controale noi pentru *ormulare: calendar, date, time, email, url, searc' ,-DOCT.P/0 pentru HTML5 (n HTML- avem o sin6ura declaratie de tip 9:#+CT;<E=. Document HTML5 m n m Mai ,os aveti exempli*icat un document HTML- simplu, cu minimul de ta6&uri necesare. Exemplu: Code:
<!DOCTYPE html> <html> <he,d> <title>Titl&l do"&me#t&l&i<*title> <*he,d> <body> Co#ti#&t&l do"&me#t&l&i((( <*body> <*html>
7uport n !ro1sere HTML5 nu este momentan standardul o*icial HTML iar %ro$serele nu au suport total pentru acesta. Totusi, cei care realizeaza cele mai cunoscute %ro$sere ()ire*ox, C'rome, +prea, 7a*ar, (nternet Explorer continua sa adau6e carcatersitici menite sa suporte noul standard.
Quote:9article= & pentru continut externt (stiri, %lo6, *orum 9aside= & pentru continut deoparte *ata de continutul in care este plasat. Continutul >aside> tre%uie sa *ie le6at de continutul incon,urator. 9%di= & (zoleaza o parte din text ce poate *i *ormatata intr&o directie di*erita *ata de textul din a*ara 9command= & %uton, %uton radio, caseta (c'ec?%ox 9details= & pentru a descrie detaliile unui document sau unei parti dintr&un document 9summar@= & le6enda sau sumar (in interiorul elementului >details> 9*i6ure= & speci*ica continutul independent, ca ilustratiile, dia6ramele, *oto6ra*iile, listari de cod, etc. 9*i6caption= & le6enda unei *i6uri 9*ooter= & pentru s*arsitul unui document sau sectiune. <oate include numele autorului, data documentului, in*ormatii de contact sau de cop@ri6't 9'eader= & pentru introducerea intr&un document sau sectiune. <oate include navi6are. 9'6roup= & o sectiune de ru%rici ('eadin6s de la 9'!= la 9'5=, unde cea mai mare este ru%rica principala iar celelalte sunt su%&ru%rici 9mar?= & marcarea unui text ('i6'li6't 9meter= & pentru masuri (doar daca se cunosc valorile minima si maxima 9nav= & sectiune de navi6are 9pro6ress= & starea unei lucrari in pro6res 9ru%@= & pentru notatii ru%@ (note sau caractere c'inezesti 9rt= & pentru explicarea notatiei elementului ru%@ 9rp= & ca sa arate %ro$serelor care nu suporta elementul ru%@ 9section= & sectiune in document (cepitol, 'eader, *ooter 9time= & pentru de*inire timp, data sau amandoua 9$%r= & pauza intre cuvinte. <entru de*inirea unei oportunitati de >line&%rea?> 2.2 /lemente med a no /ceste elemente elimina utilizarea unor plu6inuri externe cum ar *i )las'. Quote:9audio= & pentru continut audio 9video= & pentru continut video 9source= & pentru elemente media de*inite in elemente audio sau video 9em%ed= & pentru continut incroporat (cum ar *i un plu6&in 9trac?= & de*ineste textul pieselor pentru 9video= si 9audio= 2.3 /lementul can*as Atilizeaza 8ava7cript pentru a realiza desene intr&o pa6ina $e%. Quote:9canvas= & pentru a realiza elemente 6ra*ice cu un script 2.4 /lemente no pentru 5ormulare
HTML5 introduce elemente noi pentru *ormulare menite sa im%unatateasca *unctionalitatea acestora. Quote:9datalist= & o lista cu optiuni pentru valori de intrare 9?e@6en= & 6enereaza c'ei pentru autenti*icarea utilizatorilor 9output= & pentru di*erite tipuri de iesiri cum ar *i iesirile scrise de un script 2.4.1 6alor no pentru atr !utele de ntrare Quote:tel & numar de tele*on searc' & cautare url & lin? email & email datetime & data siBsau timp date & data mont' & luna $ee? & saptamana time & timp datetime&local & dataBtimp local num%er & numar ran6e & un numar dintr&o 6ama color & culoare in *ormat 'exazecimal (C))4444 2.5 /lemente retrase Armatoarele elemente HTML 4.4! au *ost retrase in HTML-: Quote:9acron@m= 9applet= 9%ase*ont= 9%i6= 9center= 9dir= 9*ont= 9*rame= 9*rameset= 9no*rames= 9stri?e= 9tt=
*isierelor video. Ca sa intele6eti mai %ine tre%uie sa va 6anditi de cate ori ati *ost nevoiti sa utilizati un alt %ro$ser pentru ca cel pe care il *oloseati nu avea suport pentru redarea *isierelor video dintr&o anumita pa6ina sau de cate ori nu a tre%ui sa instalati in %ro$ser un plu6&in nou pentru a putea vedea aceste *isiere video. HTML5 rezolva aceste pro%leme prin introducerea unui standard video. 3.1 )uport n !ro1sere
(nternet Explorer ", )ire*ox, +pera, C'rome si 7a*ari suporta elementul 9video=. Nota: (nterenet Explorer D si versiunile mai vec'i nu suporta elementul 9video=. 3.2 7ormate * deo s suportul n !ro1sere (n acest moment sunt suportate 1 *ormate video
& O'' & *isiere +66 cu codec video T'eora si codec audio Vor%is & MP4 & *isiere M<E04 cu codec video H.354 si codec audio //C & We!M & *isiere .e%M cu codec video V<D si codec audio Vor%is 3.3 Cum 5unct onea8a <entru a reda un *isier video in HTML- aveti nevoie de codul de mai ,os: Code: (7elect /ll
<video %$"="'ilm(o <*video> " "o#t$ol%=""o#t$ol%">
Nota: /tri%utul >controls> este *olosit pentru a adau6a la *isierul video controale (pla@, pause, volume . Este recomandat sa includeti si atri%utele $idt' (latime si 'ei6't (inaltime pentru ca spatiul necesar *isierului video sa *ie rezervat cand se incarca pa6ina. (n caz contrar, aspectul pa6inii se va modi*ica in momentul incarcarii acesteia. (nsearam continutul intre ta6&urile 9video= si 9Bvideo=.
Quote:9video srcE>*lim.o66> $idt'E>134> 'ei6'tE>344> controlsE>controls>= Fro$serul dvs nu suporta ta6&ul video. 9Bvideo= Exemplu de mai sus *oloseste un *isier +66 si va *unctiona in +pera, C'rome si )ire*ox. <entru a *unctiona in 7a*ari si versiunile viitoare de C'rome tre%uie sa adau6am un *isier M<E04 si unul .e%M. Ana din caracteristicile speciale ale ta6&ului video este acela ca suporta mai multe surse ce *aca le6atura catre *isiere video in *ormate di*erite. Fro$serul va reda primul *ormat recunoscut. Code:
<video width="320" hei ht="2!0" "o#t$ol%=""o#t$ol%"> <%o&$"e %$"="'ilm(o " ty)e="video*o " *> <%o&$"e %$"="'ilm(m)!" ty)e="video*m)!" *> <%o&$"e %$"="'ilm(webm" ty)e="video*webm" *> +$ow%e$&l dv% #& %&)o$t, t, -&l video( <*video>
3.4 Ta'-ur le HTML5 6 deo ,* deo0 Ta' 9video= #e*ineste un *isier video 9source= #e*ineste resurse media multiple pentru elemente media cum ar *i 9video= si 9audio= 9trac?= #e*ineste textul pieselor in pla@erele media Descr ere
3.4.1 "tr !utele ta'-ulu ,* deo0 /veti in ima6inea de mai ,os atri%utele suportate in HTML 5 pentru ta6&ul 9video=.
3.5 HTML5 6 deo 9 DOM Elementul HTML- 9video= are deasemenea metode (met'ods , propietati (properties si evenimente (events . 7pre exemplu, exista metode pentru pornire (pla@in6 , pauza (pausin6 si incarcare (loadin6 . 7unt propietati (ex: durata, volum, cautare pe care le putem citi sau seta. Exista desemenea evenimente #+M ce ne pot noti*ica, spre exemplu, cand elementul 9video= porneste, *ace pauza sau se opreste etc. Exemplul urmator ilustreaza, intr&un mod simplu, cum sa adresam un element 9video=, cum sa citim si sa sta%ilim propietatile, si metodele de apelare. 3.5.1 HTML5 ,* deo0 - Metode :Met&ods;< Prop etat :Propert es; s /*en mente :/*ents; (n ta%elul de mai ,os aveti a*isate metode video, propietati si evenimente suportate de ma,oritatea %ro$serelor.
Nota: #intre propietatile video, doar video.idt' si videoHei6't sunt disponi%ile imediat. Celelalte propietati sunt disponi%ile dupa ce sunt incarcate metadatele *isierului video.
/stazi, ma,oritatea *isierelor audio sunt redate printr&un plu6in (cum ar *i *las' . (nsa nu toate %ro$serele au aceleasi plu6inuri. HTML- speci*ica un mod standard de a include *isierele audio cu a,utorul elementului audio. /cest element poate reda *isiere de sunet sau stream audio. 4.1 7ormate aud o s suportul n !ro1sere
4.2 Cum 5unct onea8a? <entru a reda un *isier audio in HTML- tot ce tre%uie sa scrieti este: Code:
<,&dio %$"="%o# (o <*,&dio> " "o#t$ol%=""o#t$ol%">
/tri%utul control adau6a %utoanele de control >pla@> (redare , >pause> (pauza si >volume> (volum . Continutul se insereaza intre ta6&urile ,aud o0 si ,3aud o0 pentru %ro$serele care nu suporta elementul audio: Exemplu: Code:
<,&dio %$"="%o# (o " "o#t$ol%=""o#t$ol%"> +$ow%e$&l d&m#e,vo,%t$, #& %&)o$t, ,"e%t eleme#t( <*,&dio>
Exemplul anterior *oloseste un *isier O'' si va *unctiona in )ire*ox, +pera si C'rome. <entru ca *isierul audio sa *ie redat si in (nternet Explorer si 7a*ari, *ormatul *isierului tre%uie sa *ie MP3. Elementul audio permite sa utilizati mai multe elemente sursa. Elementele sursa pot sa ai%a le6atura catre *isiere audio di*erite. Fro$serul va *olosi primul *ormat recunoscut. D
Exemplu: Code:
<,&dio "o#t$ol%=""o#t$ol%"> <%o&$"e %$"="%o# (o " ty)e=",&dio*o " *> <%o&$"e %$"="%o# (m)3" ty)e=",&dio*m)e " *> +$ow%e$&l d&m#e,vo,%t$, #& %&)o$t, ,"e%t eleme#t( <*,&dio>
4.3 Ta'-ur le HTML5 "ud o Ta' 9audio= #e*ineste continut audio 9source= #e*ineste resurse media multiple pentru elemente media cum ar *i 9video= si 9audio= Descr ere
(nternet Explorer ", )ire*ox, C'rome si 7a*ari - suporta dra6 and drop. Nota: #ra6 and drop nu este suportat in 7a*ari -.!.3. "
5.2 /%emple Dra' and Drop n HTML5 Mai ,os aveti un exemplu simplu de dra6 and drop. Exemplu: Code:
<!DOCTYPE HTML> <html> <he,d> <%"$i)t ty)e="te.t*/,v,%"$i)t"> '&#"tio# ,llowD$o)0ev1 2 ev()$eve#tDe',<013 4 '&#"tio# d$, 0ev1 2 ev(d,t,T$,#%'e$(%etD,t,0"Te.t"5ev(t,$ et(id13 4 '&#"tio# d$o)0ev1 2 v,$ d,t,=ev(d,t,T$,#%'e$( etD,t,0"Te.t"13 ev(t,$ et(,))e#dChild0do"&me#t( etEleme#t+y6d0d,t,113 ev()$eve#tDe',<013 4 <*%"$i)t> <*he,d> <body> <div id="div7" o#d$o)="d$o)0eve#t1" o#d$, ove$=",llowD$o)0eve#t1"><*div> <im id="d$, 7" %$"="im, i#i*"odebo.8html9(/) " d$, ,ble="t$&e" o#d$, %t,$t="d$, 0eve#t1" width="33:" hei ht=":;" *> <*body> <*html>
5.3 Cum 5ac un element sa poate 5 tras :Dra''a!le; (nainte de toate tre%uie sa setam valoarea >true> atri%utului dra''a!le al elementului. Code:
<im d$, ,ble="t$&e" *>
/poi va tre%ui sa speci*icam ce se va intampla cand elementul este prins (dra66ed . (n exemplul anterior, atri%utul ondra6start apeleaza o *unctie, dra6(event , care spec*ica data ce va *i trasa. Metoda dataTrans5er.setData:; sta%ileste tipul si valoarea acestei datei. Code:
'&#"tio# d$, 0ev1 2
!4
ev(d,t,T$,#%'e$(%etD,t,0"Te.t"5ev(t,$ et(id13 4
(n acest caz, tipul datei este >Text> si valoarea este id&ul elementului prins (>dra6!> . Armatorul pas este sa vedem unde va *i lasat elementul prins. Evenimentul ondra6over speci*ica unde va *i lasata (dropped data prinsa. (n mod implicit, dateleBelementele nu pot *i trase in alte elemente. <entru a permite o tra6ere tre%uie sa prevenim manipularea implicita a elementului. /cest lucru este posi%il prin apelarea metodei event.prevent#e*ault( pentru evenimentul ondra6over: Code:
eve#t()$eve#tDe',<01
(n *inal, tre%uie sa plasam elementul prins. Cand datele prinse sunt lasate, are loc un eveniment de aruncare. (n exemplul anterior, atri%utul ondrop apeleaza *unctia drop(event . Code:
'&#"tio# d$o)0ev1 2 v,$ d,t,=ev(d,t,T$,#%'e$( etD,t,0"Te.t"13 ev(t,$ et(,))e#dChild0do"&me#t( etEleme#t+y6d0d,t,113 ev()$eve#tDe',<013 4
Explicarea codului: & preia data prinsa cu metoda dataTrans*er.6et#ata(>Text> . /ceasta metoda va returna orice data care are acelasi tip in metoda set#ata( . & data prinsa este id&ul elementului prins (>dra6!> & se trans*orma elementul prins in element lasat & se apeleaza prevent#e*ault( pentru a preveni manipularea implicita a datei de catre %ro$ser /lte exemple: Tra6e o ima6ine inainte si inapoi & in acest exemplu este prezentat modul in care puteti muta o ima6ina inainte si inapoi intre doua elemente 9div=.
Ce este can*as :Pan8a;? Elementul HTML5 canvas utilizeaza >a*a)cr pt pentru a desena elemente 6ra*ice intr&o pa6ina $e%. Canvas&ul (<anza este o zona dreptun6'iulara in care puteti controla *iecare pixel. Elementul can*as are di*erite metode pentru a desena traiectorii (pat's , casute (%oxes , cercuri (circles , caractere (c'aracters si pentru a adau6a ima6ini. )urportul n !ro1sere
Cum cream un element can*as <entru a adau6a un element canvas la o pa6ina HTML5 tre%uie sa speci*icam id&ul, latimea si inaltimea elementului: Code:
<",#v,% id=")$im&l",#v,%" width="200" hei ht="700"><*",#v,%>
>a*a)cr pt utilizeaza id&ul pentru a 6asi elementul canvas: Code: v,$ "=do"&me#t( etEleme#t+y6d0")$im&l",#v,%"13 /poi creaza un o%iect de context: Code:
v,$ ".t="( etCo#te.t0"2d"13
!3
+%iectul 'etConte%t:?2d?; este un element HTML- construit, cu numeroase metode pentru desenarea traiectoriilor, casutelor, cercurilor, caracterelor, ima6inilor etc. Armatoarele doua linii deseneaza un dreptun6'i rosu: Code:
".t('ill<tyle="=>>0000"3 ".t('ill?e"t005057905@913
Metoda 5 ll)t$le adau6a culoarea rosie iar metoda 5 ll@ect speci*ica *orma, pozitia si dimensiunea. =.1 Intele'erea coordonatelor Metoda *illHect de mai sus are parametrii (4,4,!-4,G- . /sta inseamna ca: se deseneaza un dreptun6i de !-4xG- (!-4,G- in canvas, incepand de la coltul din stan6a, sus (4,4 . Coordonatele 2 si ; sunt *olosite pentru a pozitiona desenela in canvas. (n pa6ina de mai ,os puteti a*la coordonatele intr&un canvas. <uneti mouse&ul in interiorul dreptun6'ilui. =.2 /%emple de can*as-ur a Lne #eseneaza o linie spec*iciand de unde sa porneasca si unde sa se opreasca.
!1
c #rad ent #eseneaza un 6radient cu culorile speci*icate. (ma6e 'as %een scaled do$n !DI (-44x!!4 . Clic? t'is %ar to vie$ ori6inal ima6e (545x!11 . Clic? ima6e to open in ne$ $indo$.
A.1 Ce este )6#? 7V0 E )cala!le 6ector #rap& cs 7V0 & este *olosit pentru a de*ini elemente 6ra*ice %azate pe vectori pt. .e% 7V0 & de*ineste elemente 6ra*ice in *ormat 2ML 7V0 & elementele 6ra*ice 7V0 nu isi pierd din calitate cand *acem zoom pe ele sau cand le redimensionam 7V0 & orice element si orice atri%ut poate *i animat in *isiere 7V0 !4
7V0 & este o recomandare .1C A.2 "*antaBele )6# /vanta,ele utilizari 7V0 in locul altor *ormate (ca 8<E0 sau 0() sunt: !. (ma6inile 7V0 pot *i create si editate cu orice editor text 3. (ma6inile 7V0 pot *i cautate, indexate, scriptate si comprimate 1. (ma6inile 7V0 pot *i scalate 4. (ma6inile 7V0 pot *i printate cu o calitate inalta la orice rezolutie -. (ma6inile 7V0 pot *i marite (zoom *ara ca ima6inea sa isi piarda din calitate A.3 )uport n !ro1sere
(nternet Explorer ", )ire*ox, +pera, C'rome si 7a*ari suporta inline 7V0. A.4 Includerea )6# d rect n pa' n le HTML (n HTML putem include elemente 7V0 direct in pa6ina HTML. Exemplu: Code:
<!DOCTYPE html> <html> <body> <%v .ml#%="htt)A**www(w3(o$ *2000*%v " ve$%io#="7(7" hei ht="7;0"> <)oly o# )oi#t%="700570 !057B0 7;05:0 705:0 7:057B0" %tyle="'illAlime3%t$oCeA)&$)le3%t$oCe-widthA93'ill-$&leAeve#odd3" *> <*%v > <*body> <*html>
Hezultat:
)6#
dependent de rezolutie nu suporta a6enti de evenimente capa%ilitati reduse pentru redarea textului ima6inea poate *i salvata ca .pn6 sau .,p6 potrivit pentru cazurile in care o%iectele sunt redesenate *recvent
independent de rezolutie suporta a6enti de evenimente potrivit pentru cazurile in care tre%uie redate supra*ete mari (0oo6le Maps redare cu viteza mica in cazul unor elemente complexe (orice va *olosi #+M va *i incet nu este potrivit pentru aplicatii de ,ocuri
!5
D.1 Introducere
/<(&ul 0eolocalizare (#eolocat on o*erit de HTML5 ne da posi%ilitatea de a a*la pozitia 6eo6ra*ica a unui vizitator. /ceasta optiune poate *i *olosita doar daca vizitatorul accepta localizarea pozitiei sale (datorita con*identialitatii utilizatorilor .
(nternet Explorer ", )ire*ox, C'rome, 7a*ari si +pera suporta 0eolocation. Nota: /<(&ul 0eolocation este mai precis in cazul dispozitivelor prevazute cu 0<7 (ca i<'one .
!G
#aca suporta /<(&ul atunci se executa metoda 6etCurrent<osition( . #aca nu, se a*iseaza un mesa, de eroare. #aca metoda 6etCurrent<osition( este executata cu succes, se a*iseaza un o%iect de coordonate pentru *unctia speci*icata in parametru ( s'o$<osition . )unctia s&o1Pos t on:; preia a*isarea Latitudinii si Lon6itudinii. Exemplul de mai sus este unul simplu, *ara manipularea erorilor. D.3.1 Ma n pularea eror lor s re5u8ur lor /l doilea parametru al metodei 6etCurrent<osition( este *olosit pentru a manipula erorile. 7peci*ica o *unctie ce va *i executata in cazul in care nu se poate determina pozitia vizitatorului. Exemplu: Code:
'&#"tio# %howE$$o$0e$$o$1 2 %wit"h0e$$o$("ode1 2 ",%e e$$o$(PE?M6<<6OF8DEF6EDA .(i##e$HTML="GtiliH,to$&l , $e%)i#% "e$e$e, )e#t$& Deolo",liH,$e(" b$e,C3 ",%e e$$o$(PO<6T6OF8GFIJI6LI+LEA .(i##e$HTML="F& %&#t di%)o#ibile i#'o$m,tii de%)$e Lo",tie(" b$e,C3 ",%e e$$o$(T6MEOGTA .(i##e$HTML="Ce$e$e, )e#t$& ,'l,$e, lo",tiei &tiliH,to$&l&i , e.)i$,t(" b$e,C3 ",%e e$$o$(GFKFOLF8E??O?A .(i##e$HTML="I ,),$&t o e$o,$e #e"&#o%"&t,(" b$e,C3 4 4
Coduri de eroare: <ermisiune respinsa (<ermission denied & utilizatorul nu permite 0eolocalizarea <ozitie indisponi%ila (<osition unavaila%le & nu este posi%ila localizarea / expirat (Timeout & operatiunea a expirat
Code:
'&#"tio# %howPo%itio#0)o%itio#1 2 v,$ l,tlo#=)o%itio#("oo$d%(l,tit&deE"5"E)o%itio#("oo$d%(lo# it&de3 v,$ im 8&$l="htt)A**m,)%( oo le,)i%("om*m,)%*,)i*%t,ti"m,)M"e#te$=" El,tlo#E"NHoom=7!N%iHe=!00.300N%e#%o$=',l%e"3 do"&me#t( etEleme#t+y6d0"m,)holde$"1(i##e$HTML="<im %$"=O"Eim 8&$lE"O *>"3 4
(n exemplul anterior am utilizat latitudinea si lon6itudinea pentru a arata locatia intr&o 'arta 0oo6le (utilizand o ima6ine statica . D.4.1 )cr ptul #oo'le Map (n acest exemplu vom arata cum putem *olosi scriptul 0oo6le Map pentru a crea o 'arta interactiva (cu marca,, zoom si optiuni de tra6ere . Exemplu: Code:
'&#"tio# %howPo%itio#0)o%itio#1 2 l,t=)o%itio#("oo$d%(l,tit&de3 lo#=)o%itio#("oo$d%(lo# it&de3 l,tlo#=#ew oo le(m,)%(L,tL# 0l,t5 lo#1 m,)holde$=do"&me#t( etEleme#t+y6d0Om,)holde$O1 m,)holde$(%tyle(hei ht=O290).O3 m,)holde$(%tyle(width=O900).O3 v,$ myO)tio#%=2 "e#te$Al,tlo#5HoomA7!5 m,)Ty)e6dA oo le(m,)%(M,)Ty)e6d(?OIDMIP5 m,)Ty)eCo#t$olA',l%e5 #,vi ,tio#Co#t$olO)tio#%A2%tyleA oo le(m,)%(F,vi ,tio#Co#t$ol<tyle(<MILL4 43 v,$ m,)=#ew oo le(m,)%(M,)0do"&me#t( etEleme#t+y6d0"m,)holde$"15myO)tio#%13 v,$ m,$Ce$=#ew oo le(m,)%(M,$Ce$02)o%itio#Al,tlo#5m,)Am,)5titleA"Yo& ,$e he$e!"413 4
!"
)tocarea datelor la cl ent Cu HTML-, pa6inile $e% pot stoca date local, in %ro$serul utilizatorului. HTML5 o*era 3 o%iecte noi pentru stocarea de date la client: & local)tora'e & stocarea datelor *ara limita de timp & sess on)tora'e & stocarea datelor pentru o sesiune <ana acum acest lucru era posi%il prin coo( es dar in cazul unei cantitati mari de date, datorita *aptului ca acestea sunt transmise la *iecare cerere catre server, se micsoreaza mult viteza de accesare a unui site. (n HTML5 datele nu mai sunt trecute la *iecare cerere catre server ci sunt *olosite doar atunci cand e necesar acest lucru. /st*el se poate stoca o mare cantitate de date *ara a a*ecta per*ormantele serverului. #atele sunt stocate in zone di*erite pentru site&uri di*erite si un site poate accesa doar datele stocate de el. HTML- *oloseste >a*a)cr pt pentru a stoca si accesa datele.
(n exemplul urmator numaram de cate ori este accesata o pa6ina: <H< Code:
<%"$i)t ty)e="te.t*/,v,%"$i)t"> i' 0lo",l<to$, e(), e"o&#t1 2 lo",l<to$, e(), e"o&#t=F&mbe$0lo",l<to$, e(), e"o&#t1 E73 4
3!
el%e 2 lo",l<to$, e(), e"o&#t=73 4 do"&me#t(w$ite0"P, i#, viHit,t, de "E lo",l<to$, e(), e"o&#t E " o$i("13 <*%"$i)t>
(n exemplul urmator numaram de cate ori este accesata o pa6ina intr&o sesiune <H< Code:
<%"$i)t ty)e="te.t*/,v,%"$i)t"> i' 0%e%%io#<to$, e(), e"o&#t1 2 %e%%io#<to$, e(), e"o&#t=F&mbe$0%e%%io#<to$, e(), e"o&#t1 E73 4 el%e 2 %e%%io#<to$, e(), e"o&#t=73 4 do"&me#t(w$ite0"JiHite "E%e%%io#<to$, e(), e"o&#tE" i# ,"e,%t, %e%i&#e("13 <*%"$i)t>
/pplication cac'e este suportat in ma,oritatea %ro$serelor cu exceptia (nternet Explorer. 11.2 /%emplu HTML5 Man 5est Cac&e Exemplul urmator arata un document HTML cu cac'e mani*est (pentru navi6are o**line . Exemplu: Code:
<!DOCTYPE HTML> <html m,#i'e%t="demo(,))","he"> <body> Co#ti#&t&l do"&me#t&l&i((( <*body> <*html>
11.3 Got un de !a8a Cac&e Man 5est <entru a activa application cac'e tre%uie sa includem atri%utul mani*est in ta6&ul ,&tml0 al documnetului. Exemplu: Code:
<!DOCTYPE HTML> <html m,#i'e%t="demo(,))","he"> ((( <*html>
+rice pa6ina ce are atri%utul mani*est speci*icat va *i cac'e&uita in momentul in care este vizitata. #aca atri%utul mani*est nu este speci*icat, pa6ina nu va *i cac'e&uita (cu exceptia cazului in care pa6ina este speci*icata direct in *isierul mani*est . Extensia recomandata pentru *isierul mani*est este: >.appcac&e>. An *isier man*i*est tre%uie servit cu tipul M(ME corect care este >textBcac'e&mani*est> si tre%uie sa *ie con*i6urat pe serverul de $e%. 11.4 7 s erul Man 5est )isierul mani*est este de tip text si este *olosit pentru a spune %ro$serului ce tre%uie cac'e&uit (si ce nu tre%uie niciodata sa *ie cac'e&uit . )isierul mani*est are trei sectiuni: !. C"CH/ M"GI7/)T & *isierele listate su% acest 'eader vor *i cac'e&uite dupar ce sunt 31
descarcate pentru prima data 3. G/TWO@H & *isierele listate su% acest 'eader necesita o conexiune la server si nu vor *i niciodata cac'e&uite 1. 7"LLI"CH & *isierele listate su% acest 'eader speci*ica pa6ini de rezerva in cazul in care o pa6ina nu este accesi%ila 11.4.1 C"CH/ M"GI7/)T <rima sectiune (C/CHE M/N()E7T este o%li6atorie. Exemplu: Code:
CICHE MIF6>E<T *tem,("%% *lo o( i' *m,i#(/%
11.4.2 G/TWO@H 7ectiunea NET.+HJ de mai ,os speci*ica ca *isierul >lo6in.p'p> nu va *i niciodata cac'e&uit si nu va *i disponi%il o**line. Exemplu: Code:
FETLO?KA lo i#()h)
#aca *olosim asteris? (K , toate resurseleB*isierele vor necesita o conexiune la internet. Exemplu: Code:
FETLO?KA P
11.4.3 7"LLI"CH 7ectiunea )/LLF/CJ de mai ,os speci*ica ca *isierul >o**line.'tml> va *i servit pentru toate *isierele din *olderul B'tml-B in cazul in care nu se poate sta%ili o conexiune la internet. Exemplu: Code:
*html9* *o''li#e(html
Nota: <rimul AH( (uni*orm resource identi*ier este resursa, iar cel de&al doilea este rezerva (*all%ac? . 11.5 "ctual 8area cac&e-ulu 34
+data ce o aplicatie este cac'e&uita, e ramane cac'e&uita pan6a cand una din urmatoarele actiuni se petrece: !. Atilizatorul ster6e cac'e&ul %ro$serului 3. )isierul mani*est este modi*icat (vezi nota mai ,os 1. Cac'e&ul aplicatiei este actualizat prin pro6ramare Exemplu: Code:
CICHE MIF6>E<T = 2072-02-27 v7(0(0 *tem,("%% *lo o( i' *m,i#(/% FETLO?KA lo i#()h) >ILL+ICKA *html9* *o''li#e(html
Nota: Liniile care incep cu >C> reprezinta comentarii dar mai au si un alt scop. Cac'e&ul unei aplicatii este actualizat cand *isierul mani*est se sc'im%a. #aca editati o ima6ine sau daca modi*icati o *unctie 8ava7cript, aceste operatii nu vor *i re&cac'e&uite. /ctualizarea datei si versiunii in linia de comentariu este o cale de a *ace %ro$ser&ul sa re&cac'e&uiasca *isirele. 11.= O!ser*at cu pr * re la "ppl cat on Cac&e /veti 6ri,a la ce cac'e&uiti. +data ce un *isier este cac'e&uit, %ro$ser&ul va continua sa a*iseze versiunea cac'e&uita, c'iar daca *isierul de pe server este mo*i*icat. <entru a va asi6ura ca %ro$serul actualizeaza cac'e&ul, va tre%ui sa modi*icati *isierul mani*est. Nota: %ro$serele au limite di*erite pentru volumul de date pe care pot sa il cac'e&uiasaca (unele %ro$sere au -MF limita pentru *iecare site .
3-
& email & url & num%er & ran6e & #ate pic?ers (date, mont', $ee?, time, datetime, datetime&local & searc' & color 7uport in %ro$sere:
Gota+ cel mai %un suport pentru aceste tipuri noi inputuri este o*erit de Opera. 14.1.1 T p nput - ema l )olosit pentru introducerea si validarea datelor de tip ema l. /%emplu+ Code:
E-m,ilA <i#)&t ty)e="em,il" #,me="&%e$8em,il" *>
14.1.2 T p nput - url )olosit pentru introducerea si validarea datelor de tip adresa E@L. /%emplu+ Code:
Home), eA <i#)&t ty)e="&$l" #,me="&%e$8&$l" *>
14.1.3 T p nput - num!er )olosit pentru introducerea si validarea datelor de tip numeric. 7e pot inpune restrictii cu privire la numerele acceptate in input. /%emplu+ Code:
P&#"teA <i#)&t ty)e="#&mbe$" #,me=")oi#t%" mi#="7" m,.="70" *>
14.1.4 T p nput - ran'e )olosit pentru introducerea si validarea datelor dintr&un ran6e (6ama de numere. /%emplu+ Code:
<i#)&t ty)e="$,# e" #,me=")oi#t%" mi#="7" m,.="70" *>
<uteti *olosi urmatoarele atri%ute pentru a adau6a restrictii. 14.1.5 T p nput - Date P c(ers HTML5 o*era mai multe tipuri de input pentru selectarea datei si a timpului: date & selecteaza data, luna si anul mont' & selecteaza luna si anul $ee? & selecteaza saptamana si anul time & selecteaza timpul (ora si minutul datetime & selecteaza timpul, data, luna si anul (timp ATC datetime&local & selecteaza timpul, data, luna si anul (timp local Armatorul exemplu va permite sa selectati o data dintr&un calendar: Code:
D,t,A <i#)&t ty)e="d,te" #,me="&%e$8d,te" *>
14.1.= T p nput - searc& )olosit pentru campuri de cautare si se comporta ca si campurile o%isnuite de text. 14.1.A T p nput - color )olosit pentru campuri ce contin culori. Exemplul de mai ,os va permite sa selectati o culoare dintr&un color pic?er. 3G
/%emplu+ Code:
C&lo,$eA <i#)&t ty)e=""olo$" #,me="&%e$8"olo$" *>
An element 9input= cu valori prede*inite in 9datalist=. 15.1.2 /lementul ,(e$'en0 7copul elementului ,(e$'en0 este de a o*eri o cale securizata pentru autenti*icarea utilizatorilor. Ta6&ul 9?e@6en= speci*ica un 6enerator de perce'e de c'ei intr&un *ormular. Cand *ormularul este trimis, sunt 6enerate doua c'ei, una privata si una pu%lica. 3D
C'eia privata este stocata local, iar c'eia pu%lica este trimisa la server. C'eia pu%lica poate *i *olosita pentru a 6enera un certi*icat pentru client, acesta putand *olosi certi*icatul pentru urmatoarele autenti*icari. Exemplu: Code:
<'o$m ,"tio#="te%t8Cey e#()h)" method=" et"> GtiliH,to$A <i#)&t ty)e="te.t" #,me="&%$8#,me" *> C$i)t,$eA <Cey e# #,me="%e"&$ity" *> <i#)&t ty)e="%&bmit" *> <*'o$m>
An *ormular cu camp 9?e@6en=. 15.1.3 /lementul ,output0 Elementul ,output0 reprezinta rezultatul unui calcul (ca cel realizat de un script . Exemplu: Code:
<'o$m o#i#)&t=".(v,l&e=),$%e6#t0,(v,l&e1E),$%e6#t0b(v,l&e1">0 <i#)&t ty)e="$,# e" #,me="," v,l&e="90" *>700 E<i#)&t ty)e="#&mbe$" #,me="b" v,l&e="90" *> =<o&t)&t #,me="." 'o$=", b"><*o&t)&t> <*'o$m>
Healizeaza un calcul si arata rezultatul intr&un element de tip 9output=. Go le elemente semant ce d n HTML5 HTML- nu este doar despre reducerea mar?upului existent (desi *ace destul de mult in acest sens . El de*ineste si noi elemente semantice. ,sect on0 Elementul sect on reprezinta o sectiune 6enerica a documentului sau a aplicatiei. + sectiune, in acest context, este o 6rupare tematica a continutului, de o%icei avand un antet. Exemple de sectiuni pot *i capitolele, ta%urile dintr&un dialo6 %azat pe ta%uri sau sectiunile numerotate ale une teze. + pa6ina de start poate *i impartita in sectiuni de introducere, stiri, in*ormatii de contact. ,na*0 Elementul na* reprezinta o sectiune a unei pa6ini care se lea6a de alte pa6ini sau la parti din pa6ina: practic o sectiune cu lin?uri de navi6are. Nu toate 6rupurile de lin?uri de pe o pa6ina tre%uie sa *ie cuprinse intr&un element na* & numai sectiunile care sunt alcatuite din %locuri principale de navi6are sunt potrivite pentru elementul na*. (n particular, este ceva o%isnuit ca in su%solul de pa6ina sa existe o lista scurta de lin?uri la pa6inile uzuale ale unui site, cum ar *i termenii de utilizare, pa6ina de start sau pa6ina de cop@ri6't. Elementul *ooter de unul sin6ur este su*icient pentru ast*el de cazuri, *ara un element na*
3"
,art cle0 Elementul art cle reprezinta o componenta a unei pa6ini care consta dintr&o compozitie independenta dintr&un document, pa6ina, aplicatie sau site si pentru care intentia este sa *ie distru%uita independent sau sa *ie reutilizata. /cesta poate *i o postare de pe *orum, un articol de ziar sau de revista, un comentariu lasat de utilizatori, un $id'et sau 6ad6et interactiv sau alta *orma independenta de continut. ,as de0 Elementul as de reprezinta o sectiune a unei pa6ini care consta din continut care este tan6ential le6at de continutul din ,urul elementului si care poate *i considerat separat de continut. /semenea sectiuni sunt deseori reprezentate ca %are laterale de tiparituri. Elementul poate *i *olosit pentru e*ecte tipo6ra*ie cum ar *i citatele evidentiate sau %arele laterale, pentru pu%licitate, pentru 6rupuri de elemente na* si pentru alt continut care este considerat separat de continutul principal al pa6inii. ,&r'oup0 Elementul &r'oup reprezinta titlul unei sectiuni. Elementul este *olosit pentru a 6rupa un set de elemente &1 - &= cand titlul are niveluri multiple, cum ar *i su%&titluri, titluri alternative sau slo6ane. ,&eader0 Elementul &eader 6rupeaza un set de detalii introductive sau navi6ationale. An element &eader va contine de o%icei titlul unei sectiuni (un element &1 - &= sau un element &'roup , dar acest lucru nu este o%li6atoriu. Elementul &eader poate *i *olosit de asemenea pentru cuprinsul unei sectiuni, un *ormulat de cautare sau orice lo6ouri relevante. ,5ooter0 Elementul 5ooter reprezinta un su%sol pentru cel mai apropiat element ierar'ic superior sau element root al sectiunii. El contine de o%icei in*ormatii despre sectiune, cum ar *i cine a scris&o, lin?uri catre documentele conexe, date de cop@ri6't si altele. 7u%solurile nu tre%uie sa apara neaparat la s*arsitul unei sectiuni, desi de o%icei acolo apar. Cand un element *ooter contine sectiuni intre6i, reprezinta anexe, indexuri, casete redactionale lun6i, acorduri de licentiere stu*oase si alte tipuri de continut de acest *el. ,t me0 Elementul t me reprezinta ori o reprezentare a orei in *ormat cu 34 de ore ori o data precisa in calendarul 6re6orian, optional insotita de ora si *us orar. ,mar(0 Elementul mar( reprezinta o secventa de text intr&un document evidentiata sau su%liniata in scopuri in*ormative. "rt cole Haide sa vedem ce putem sa *acem in le6atura cu acest mar?up: Code:
<div "l,%%="e#t$y"> <) "l,%%=")o%t-d,te"> O"tobe$ 225 200; <*)> <h2> <, h$e'="=" $el="booCm,$C"
14
#in nou, acesta este HTML- valid. #ar HTML- o*era un element mai speci*ic pentru cazul o%isnuit de marcare a unui articol pe o pa6ina & numit su6estiv elementul ,art cle0. Code:
<,$ti"le> <) "l,%%=")o%t - d,te"> O"tobe$ 225 200; <*)> <h2> <, h$e'="=" $el="booCm,$C" title="li#C to thi% )o%t"> T$,vel d,y <*,> <*h2> ((( <*,$ti"le>
/', dar nu este totusi atat de simplu. Mai exista o sc'im%are pe care ar tre%ui sa o *aceti. Va voi arata mai intai si apoi va voi explica: Code:
<,$ti"le> <he,de$> <) "l,%%=")o%t - d,te"> O"tobe$ 225 200; <*)> <h7> <, h$e'="=" $el="booCm,$C" title="li#C to thi% )o%t"> T$,vel d,y <*,> <*h7> <*he,de$> ((( <*,$ti"le>
V&ati prins L /m sc'im%at elementul ,&20 intr&un ,&10 si l&am impac'etat intr&un element ,&eader0. /m vazut de,a elementul ,&eader0 in actiune. 7copul sau este sa impac'eteze toate elementele care *ormeaza antetul articolului (in acest caz, data de pu%licare a articolului si titlul . #ar... dar... nu ar tre%ui sa avem un ,&10 per document L Nu va da asta peste cap sc'ema articolului L Nu, dar pentru a intele6e de ce nu, tre%uie sa ne dam inapoi un pas. (n HTML 4, singura modalitate de a crea sc'ema unui document a *ost cu a,utorul elementelor ,&10 - ,&=0. #aca ati *i vrut un sin6ur nod radacina in sc'ema, tre%uia sa va limitati la un sin6ur ,&10 in mar?upul dumneavoastra. #ar speci*icatiile HTML- de*inesc un al6oritm pentru 6enerarea sc'emei documentului care incorporeaza noi elemente semantice in HTML-. /l6oritmul HTML- spune ca un element ,art cle0 creeaza o noua sectiune, care are un nou nod in sc'ema documentului. 7i in HTML- *iecare sectiune poate avea elementul propriu ,&10.
1!
Este o sc'im%are drastica *ata de HTML 4 si iata de ce este un lucru %un. Multe pa6ini $e% sunt 6enerate prin intermediul template&urilor. + %ucata de continut este luata dintr&o sursa si inserata in pa6ina intr&o parte, o alta %ucata de continut este inserata in alta parte. Multe tutoriale sunt structurate in acest *el. >(ata o %ucata de cod HTML. Copiati&o si lipiti&o in pa6ina dumneavoastra.> Este *oarte %ine pentru %ucati mici de continut, dar daca ceea ce lipiti reprezinta o sectiune intrea6a L (n acest caz, tutorialul va citi ceva de acest 6en: >(ata o %ucata de cod HTML. Copiati&o si lipiti&o intr&un editor de text si aveti 6ri,a ca ta6urile si tutlurile sa se potriveasca cu nivelul ierar'ic al ta6urilor de titluri din pa6ina in care o lipiti.> 7a va explic alt*el. HTML 4 nu are element de titlu generic. /re sase elemente numerotate stric? 9'!= & 9'5=, care tre%uie ordonate ierar'ic in exact aceeasi ordine. Cam neplacut, mai ales daca pa6ina dumneavoastra este mai curand >asam%lata> decat >creata>. 7i aceasta este pro%lema pe care o rezolva HTML- cu noile elemente de sectiune si noile re6uli pentru elementele de tip titlu existente. #aca *olositi noi elemente de sectiune, va pot da acest mar?up: Code:
<,$ti"le> <he,de$> >h7> I %y#di",te )o%t <*h7> <*he,de$> <)> Lo$em i)%&m bl,h bl,h((( <*)> <*,$ti"le>
si il puteti copia si lipi oriunde in pagina dumneavoastra *ara modi*icari. )aptul ca dispune de un element ,&10 nu este o pro%lema, deoarece intre6 codul este continut intr&un ,art cle0. Elementul ,art cle0 de*ineste un nod auto&continut in sc'ema documenteului, elementul ,&10 o*era titlul pentru acel nod din sc'ema si toate elementele de sectiune de pe pa6ina vor ramane la ce nivel de ierar'ie erau inainte.
13
Nu este nimic 6resit cu acest mar?up. #aca va place, il puteti pastra. Este HTML- valid. #ar HTML- o*era cateva elemente semantice aditionale pentru anteturi si sectiuni. Mai intai 'aideti sa scapam de antetul ,d * dJ?&eader?0. Este o metoda des utilizata, dar nu inseamna nimic. Elementul d * nu are semantica de*inita si nici atri%utul d nu are semantica de*inita. (Anui Aser /6ent nu ii este permisa deductia nici unui inteles din valoarea atri%utului d. /ti putea sc'im%a aici in ,d * dJ?s&a8!ot?0 si ar avea aceeasi valoare semantica, adica nimic. HTML- de*ineste un element ,&eader0 pentru acest scop. 7peci*icatia HTML- are exemple reale de *olosire a elementului ,&eader0. (ata cum ar atata pe pa6ina noastra data exemplu: Code:
<he,de$> <h7> My Leblo <*h7> <) "l,%%="t, li#e"> I lot o' e''o$t we#t i#to m,Ci# ((( <*he,de$>
E %ine. Va spune tuturor celor care vor sa stie ca aceasta este un antet. #ar ce spuneti despre slo6an L An alt o%icei, care apan acum nu a dispus de mar?up standard. Este un lucru di*icil sa&l marc'ezi. An slo6an este precum un su%titlu, dar este >atasat> titlului principal. /ceasta inseamna ca este un su%titlu care nu isi creeaza propria sectiune. Elementele de antet, cum ar *i ,&10 si ,&20, dau structura pa6ini. Luate impreuna, ele creeaza o sc'ema pe care o puteti *olosi pentru a vizualiza (sau navi6a in pa6ina. /plicatiile de tip >screen reader> *olosesc sc'ema documentului pentru a a,uta utilizatorii nevazatori sa navi6'eze in pa6ina. Exista unelte online si extensii de %ro$ser care va permit sa vizualizati sc'ema documentului. (n HTML 4, elementele ,&10 & ,&=0 erau singura care de a crea sc'ema documentului. 7c'ema pa6inii date exemplu arata asa: Code:
My Leblo 0h71 Q E - - T$,vel d,y 0h21 Q E - - 6Om oi# to P$, &e ! 0h21
Este %ine, dar inseamna ca nu exista un mod pentru a marca slo6anul >/ lot o* e**ort $ent into ma?in6 t'is e**ortless>. #aca am *i incercat sa il marcam cu un 9'3=, ar *i adau6at un nod *antoma la sc'ema documentului. Code:
My Leblo 0h71 Q E - - I lot o' e''o$t we#t i#to m,Ci# Q
11
#ar aceasta nu este structura documentului. 7lo6anul nu reprezinta o sectiune: este doar un su%titlu. <ro%a%il am putea marca slo6anul ca un ,&20 si vom marca *iecare titlu din articol ca un ,&30 L Nu, este c'iar mai rau: Code:
My Leblo Q E - Q E Q E 0h71 I lot o' e''o$t we#t i#to m,Ci# - - T$,vel d,y 0h31 - - 6Om oi# to P$, &e ! 0h31 thi% e''o$tle%%( 0h21
/cum avem in continuare un nod *antoma in sc'ema documentului, care a >*urat> copii care apartineau de drept nodului radacina. 7i aici apare pro%lema: HTML 4 nu o*era o cale pentru a a marca su%titlu *ara a&l adau6a la sc'ema documentului. (ndi*erent cat de mult incercam sa sc'im%am lucrurile, >/ lot o* e**ort $ent into ma?in6 t'is e**ortless> va ateriza in aceasta reprezentare. 7i de aceea am a,uns sa *olosim mar?up *ara valoare semantica, asa cum este ,p classJ?ta'l ne?0 HTML- o*era o solutie pentru aceasta: elementul ,&'roup0. Elementul ,&'roup0 actioneaza ca un am%ala, pentru doua sau mai multe elemente de titrare inrudite. Ce inseamna >inrudite> L (nseamna ca, luate laolalte, ele creeaza un sin6ur nod in sc'ema documentului. #at *iind acest mar?up: Code:
<he,de$> <h $o&)> <h7> My Leblo <*h7> <h2> I lot o' e''o$t we#t i#to thi% e''o$tle%%( <*h2> <*h $o&)> ((( <*he,de$> ((( <div "l,%%="e#t$y"> <h2> T$,vel d,y <*h2> <*div> ((( <div "l,%%="e#t$y"> <h2> 6Om oi# to P$, &e! <*h2> <*div>
14
<uteti testa pa6inile dumneavoastra in HTML- +utliner pentru a va asi6ura ca *olositi corect elemetnele titrare. Cum se 'est onea8a elementele necunoscute )iecare %ro$ser are o lista de %aza de elemente HTML pe care le suporta. #e exemplu, lista din Mozilla )ire*ox este stocata in ns/lementTa!le.cpp. Elementele care nu sunt in aceasta lista sunt tratate ca >elemente necunoscute>. Exista doua pro%leme *undamentale cu elementele necunoscute. 1. Care ar tre!u sa 5 e st lul acestor elemente ? (mplicit, ,p0 are spatiere deasupra si dedesu%t, ,!loc(Kuote0 este indentat cu o mar6ine la stan6a si ,&10 este a*isat intr&un *ont mai mare. #ar ce stil implicit tre%uie aplicat acestor elemente necunoscute L 2. Cum ar tre!u sa arate DOM-ul elementulu ? ns/lementTa!le.cpp din Mozilla include in*ormatii despre ce tipuri de alte elemente poate contine *iecare element. #aca includeti mar?up cum ar *i ,p0,p0, al doilea para6ra* il inc'ide in mod implicit pe primul, ast*el incat elementele apar ca *rati, nu in relatie parinte & copil. #ar daca scrieti ,p0,span0, elementul span nu inc'ide para6ra*ul, din cauza *aptului ca )ire*ox stie ca ,p0 este un element %loc care contine elementul ,span0. /st*el, ,span0 a,un6e sa *ie copil al lui ,p0 in #+M. #i*eritele %ro$sere raspund acestor intre%ari in mod di*erit. (7ocant, stiu . #intre %ro$serele ma,ore, raspunsul lui (nternet Explorer la maandoua intre%arile a *ost cel mai pro%lematic, dar *iecare %ro$ser are nevoie de putin a,utor aici. La prima intre%are ar tre%ui sa *ie relativ usor de raspuns. NA dari nici o stilizare speciala elementelor necunoscute. Lasati&le sa mosteneasca proprietatile C77 care sunt in vi6oare oriunde apar in pa6ina si lasati autorul pa6inii sa speci*ice toate stilurile prin C77. 7i acest lucru mer6e, in mare parte, dar este un mic sc'epsis pe care tre%uie sa il stiti.
,$ti"le5 ,%ide5 det,il%5 'i ",)tio#5 'i &$e5 'oote$5 he,de$5 h $o&)5 me#&5 #,v5 %e"tio# 2 4
(/ceasta secventa este prelucrata din HTML- Heset 7t@les'eet a lui Hic' Clar?, care *ace multe alte lucruri care sunt mai presus de scopul acestui capitol . #ar stati, totul se complica si mai tare : (nainte de versiunea", (nternet Explorer nu aplica nici un fel de stilizare pe documentele necunoscute. #e exemplu aveati acest mar?up: Code
<%tyle ty)e="te.t*"%%"> ,$ti"le 2 di%)l,yA blo"C3 bo$de$A 7). %olid $ed 4 <*%tyle> ((( <,$ti"le> <h7> Lel"ome to 6#ite"h<*h7> <)>Thi% i% yo&$ <%),#> 'i$%t d,y <*%),#> ( <*)> <*,$ti"le>
(nternet Explorer ( pana la si inclusiv (ED nu va trata elementul ,art cle0 ca un element de tip container si nici nu va pune o %ordura rosie in ,urul elementului. Toate re6ulile de stil sunt pur si simplu i6norate. (nternet Explorer " rezolva aceasta pro%lema. / doua pro%lema este ca #+M&ul pe care il creeaza %ro$serele atunci cand intalnesc elemente necunoscute. #in nou, ce mai pro%lematic %ro$ser este reprezentat de versiunile mai vec'i de (nternet Explorer (inainte de versiunea ", care rezolva si aceasta pro%lema . #aca (ED nu recunoaste explicit numele elementului, va insera elementul in DOM ca un nod gol fara copii. Toate elementele la care v&ati asteptat sa *ie copii directi ai elementului necunoscut vor *i introduse ca *rati. (ata aici o mostra de arta /7C(( pentru a ilustra di*erenta. /cesta este #+M&ul pe care il dicteaza HTML-: Code:
Q E Q Q Q E Q E Q E Q Q Q E - -h7 0"hild o' ,$ti"le1 Q E - - te.t #ode "Lel"ome to 6#ite"h" - -) 0"hild o' ,$ti"le5 %ibli# - - te.t #ode "Thi% i% yo&$ " - - %),# Q E - - te.t #ode "'i$%t d,y" - - te.t #ode "(" o' h71
#ar acesta este #+M&ul pe care il creeaza versiunile vec'i de (nternet Explorer Code: 15
h7 0%ibli# o' ,$ti"le1 Q E - - te.t #ode "Lel"ome to 6#ite"h" ) 0%ibli# o' h71 Q E - - te.t #ode "Thi% i% yo&$" Q E - - %),# Q Q Q E - - te.t #ode "'i$%t d,y" Q E - - te.t #ode "("
Exista un arti*iciu minunat pentru a rezolva aceasta pro%lema. (N cazul in care crati prin 8ava7cript un element vid ,art cle0 inaitne de a&l *olosi in pa6ina dumneavoastra, (nternet Explorer va recunoaste elementul ,art cle0 si va va lasa sa il prelucrati cu C77. Nu exista nevoia de a insera vreodata elementul vid in #+M. 7impla creare a elementului o sin6ura data este de a,un6 pentru a invata (nternet Explorere sa stilizeze elementul pe care nu il recunoaste. Code:
<html> <he,d> <%tyle> ,$ti"le 2 di%)l,yA blo"C3 bo$de$A 7). %olid $ed 4 <*%tyle> <%"$i)t> do"&me#t("$e,teEleme#t0",$ti"le"13 <*%"$i)t> <*he,d> <body> <,$ti"le> <h7> Lel"ome to 6#ite"h <*h7> <)> Thi% i% yo&$ <%),#> 'i$%t d,y <*%),#> ( <*)> <*,$ti"le> <*body> <*html>
/ceasta *unctioneaza in toate versiunile de (nternet Explorer, pana inapoi la (E5 : <utem extinde aceasta te'nica pentru a crea deodata copii vide ale tuturor noilor elemente HTML- & din nou, ele nu sunt inserate niciodata in #+M, ast*el incat nu veti vedea aceste elemente 6oale & si apoi puteti incepe sa le *olositi *ara a va *ace prea multe 6ri,i le6ate de %ro$serele incapa%ile de HTML-. Hem@ 7'arp a *acut c'iar acest lucru, cu al sau script numit su6estiv >HTML- ena%lin6 script>. 7cript&ul a trecut prin mai mult de zece revizii, dar ideea de %aza este: Code:
<! - -Ri' lt 6E ;S> <%"$i)t> v,$ e = 0",bb$5 ,$ti"le5 ,%ide5 ,&dio5 ",#v,%5 d,t,li%t5 det,il%5" E "'i &$e5 'oote$5 he,de$5 h $o&)5 m,$C5 me#&5 mete$5 #,v5 o&t)&t5" E ")$o $e%%5 %e"tio#5 time5 video"1( %)lit0O 5 O13 'o$ 0v,$ i = 03 i < e(le# ht3 iEE1 2 do"&me#t("$e,teEleme#t0eRiS13 4 <*%"$i)t> <!Re#di'S - - >
1G
<artile ,- - -L 5 lt I/ DM0 si ,-Lend 5M - - 0 sunt comentarii conditionale. (nternet Explorer le interpreteaza ca o declaratie 5: >daca %ro$serul curent este o versiune de (nternet Explorer mai mica de versiunea ", atunci executa acest %loc.> Toate celelealte %ro$sere vor trata intre6ul %loc ca un comentariu HTML. Hezultatul net este ca (nternet Explorer (pana la si inclusiv versiunea D va executa script&ul, dar alte %ro$sere vor i6nora scriptul cu totul. /cest lucru va *ace ca incarcarea pa6inilor sa *ie mai rapida in %ro$serele care nu au nevoie de acesta smec'erie. Codul 8ava7cript in sine este relativ simplu. Varia%ila e se termina cu o matrice de elemente de tip strin6, cum ar *i >a!!r>, >art cle>, >as de> si asa mai departe. /poi parcur6em aceasta matrice si cream *iecare din elementele necesare prin apelarea document.create/lement :;. #ar din moment ce i6noram valoarea reurnata, elemtenele nu sunt nicioodata inserate in #+M. /cest lucru este de a,uns pentru a *ace (nternet Explorer sa trateze aceste elemente in modul in care am dorit sa *ie tratate, odata ce le vom *olosi mai ,os in pa6ina. >Mai tarziu> este in*ormatia importanta. /cest script tre%uie sa *ie in partea de sus a pa6inii dumneavoastra, pre*era%il in elementul ,&ead0, nu la *inal. (n acest *el, (nternet Explorer va executa scriptul inainte sa proceseze ta6urile si atri%utele. #aca puneti acest script in ,osul pa6inii dumneavoastra, va *i prea tarziu. (nternet Explorer va interpreta de,a in mod 6resit mar?upul dumneavoastra si va construi #+M&ul 6resit si nu va mai mer6e inapoi sa il a,usteze din cauza acestui script. Hem@ 7'apr a >minimizat> script&ul si l&a postat pe 0oo6le <ro,ect Hostin6. ((n cazul in care va intre%ati, script&ul in sine este open source si licentiat de M(T, deci in putetit *olosi in orice proiect . #aca doriti, puteti *olosi un >'otlin?> pentru script indicand direct la versiunea 6azduita, ca aici: Code:
<he,d> <met, "h,$%et="&t'-B"*> <title> My Leblo <*title> <! - - Ri' lt 6E ;S> <%"$i)t %$"="htt)A**html9%hiv( oo le"ode("om*%v#*t$&#C*html9(/%"> <*%"$i)t> <!Re#di'S - - > <*he,d>
@elat de pr eten e s alte le'atur Lin?urile o%isnuite indica pur si simplu o alta pa6ina. Helatiile de le6atura sunt un mod de a explica de ce *aceti trimtere la alta pa6ina. Ele termina propozitia >)ac trimitere la acest lucru pentru ca ...> ... este un *isier de stiluri continand re6uli C77 pe care %ro$serul ar tre%ui sa le aplice la acest document. ... este un *lux care contine acelasi continut ca si aceasta pa6ina, dar intr&un *ormat standard cu posi%ilitatea de a%onare. ... este o traducere a pa6inii in alta lim%a. ... este urmatorul capitol dintr&o carte online din care aceasta pa6ina *ace parte. 7i asa mai departe. HTML- desparte relatiile de le6atura in doua cate6orii: 1D
#oua cate6orii de lin?uri pot *i create *olosind elementul lin?. Le'atur le catre resurse e%terne sunt le6aturi catre surse care vor *i *olosite pentru a im%unatati documentul curent si le'atur le &$perl n( sunt le6aturi la alte documente ... Comportamentul exact al lin?urilor catre resurse externe depinde de relatiile exacte, asa cum sunt de*inite pentru tipul respectiv de le6atura. #in exemplele pe care tocmai le&am dat, numai primul (relJ?st$les&eet? este un lin? catre o resursa externa. Hestul sunt '@perlin?urispre alte documente. Veti dori sau nu sa urmati aceste lin?uri, dar ele nu sunt necesare pentru a vizualiza pa6ina curenta. Cel mai adesea, relatiile de le6atura pot *i o%servate pe elementul ,l n(0 din elementul ,&ead0 al unei pa6ini. Anele relatii de le6atura pot *i *olosite pe elemente ,a0, dar este neo%isnuit c'iar si atunci cand se permite acest lucru. HTML- permite unele relatii pe elementele ,area0, dar acest lucru este si mai putin o%isnuit. (HTML 4 nu permitea un atri%ut rel pe elementele ,area0 .
relJst$les&eet
7a o%servam prima relatie de le6atura din pa6ina noastra de exempli*icare: Code:
<li#C $el="%tyle%heet" h$e'="%tyle-o$i i#("%%" ty)e="te.t*"%%" *>
/ceasta este cel mai *recvent *olosita relatie de le6atura din lume (literalmente . ,l n( relJ?st$les&eet?0 este *olosita ca sa indice re6uli C77 care sunt stocate intr&un *isier separat. + mica optimizare pe care o puteti *ace in HTML- este sa scapati din atri%utul t$pe. Exista un sin6ur lim%a, pentru stiluri pe $e%, C77, deci aceasta este valoarea implicita pentru atri%utul t$pe. *unctioneaza in toate %ro$serele. (Cineva, cred, ar putea ima6ina vreodata un nou lim%a, pentru crearea stilurilor, insa, daca se intampla acel lucru, adau6ati la loc atri%utul t$pe. Code:
<li#C $el="%tyle%heet" h$e'="%tyle-o$i i#,l("%%" *>
relJalternate
Continuand cu pa6ina noastra de exemplu: Code: 1"
/ceasta relatie de le6atura este de asemenea destul de intalnita. ,l n( relJ?alternate?0, com%inata cu tipul de media H77 sau /tom in atri%utul t$pe, permite operatiunea denumita >*eed autodiscover@>. <ermite cititoarelor de *luxuri de stiri (cum ar *i 0oo6le Header sa descopere ca un site are un *lux de stiri cu cele mai noi articole. Cele mai multe %ro$sere suporta descoperirea automata de *luxuri /T+MBH77 prin a*isarea unui icon alaturi de AHL. (7pre deose%irea de relJ?st$les&eet?, atri%utul t@pe conteaza aici. Nu renuntati la el: Helatia de le6atura relJ?alternate? a *ost intotdeauna un 'i%rid ciudat de cazuri de *olosire, c'iar si in cazul HTML 4. (n HTML-, de*inita sa a *ost clari*icata si extinsa pentru a descrie mai pe lar6 continutul existent de pe $e%. #upa cum tocmai ati vazut, *olosirea relJ?alternate? in com%inatie cu t$peJ?appl cat on3atom9%ml? indica prezenta unui *lux /tom pentru pa6ina curenta. (nsa puteti *olosi relJ?alternate? si impreuna cu alte atri%ute t$pe pentru a indica acelasi continut intr&un *ormat di*erit, cum ar *i <#). HTML- ne scapa de con*uzia indelun6ata despre cum sa *acem le6aturi la traducerile documentelor. HTML 4 ne spune sa *olosim atri%utul lan6 in com%inatie cu relJ?alternate? pentru a speci*ica lim%a documentului catre care se *ace le6atura, dar nu este corect. Erata HTML 4 prezinta patru erori din speci*icatiile HTML4. Ana *ace le6atura prin relJ?alternate?. Modul corect descris in erata HTML 4 si acum prezent in HTML- este sa *olosim atri%utul &re5lan'. #in ne*ericire, aceste speci*icatii din erata nu au *ost reintroduse niciodata in speci*icatiile HTML 4, deoarece nimeni din 6rupul 0rupul de lucru HTML al .1C nu mai lucra la HTML.
HTML4, si suporta relJ?pre* ous? pentru compati%ilitate, precum si relJ?last? (ultimul dintr&o serie, o6linda lui relJ?5 rst? si relJ?up?. Cea mai %una cale de a va 6andi la relE>up> este sa va uitati la navi6are de tip %read&crum% (sau cel putin ima6inati&va . <a6ina dumneavoastra este pro%a%il prima pa6ina din lista dumneavoastra si pa6ina curenta este cea de s*arsit. relJ?up? arata catre penultima pa6ina din lista. relJ? con? este a doua cea mai populara relatie de le6atura, dupa relJ?st$les&eet?. Este de o%icei re6asita impreuna cu s'ortcut, in acest mod: Code:
<li#C $el="%ho$t"&t i"o#" h$e'="*',vi"o#(i"o">
Toate %ro$serele importante suporta acest mod de *olosire pentru a asocia pa6inii un mic icon. #e o%icei este a*ista in %ara de adrese a %ro$serului, lan6a AHL, sau intr&un ta% ori in amandoua. #e asemenea nou in HTML-: atri%utul s 8es poate *i *olosit in com%inatie cu con pentru a indica marimea iconului mentionat. relJ?l cense? a *ost inventat de catre comunitatea micro&*ormatelor. >(ndica *aptul ca documentul mentionat o*era termenii licentei de cop@ri6't su% care este o*erit documentul respectiv>. relJ?no5ollo1? >indica *aptul ca lin?ul nu este apro%at de autorul ori6inal sau pu%lis'erul pa6inii sau ca lin?ul la documentul mentionat a *ost inclus in primul rand datorita unei relatii comerciale intre oamenii a*iliati cu cele doua pa6ini. / *ost inventat de 0oo6le si standardizat in cadrul comunitatii micro&*ormatelor. .ord<ress adau6a relJ?no5ollo1? la toate lin?urile adau6ate de cei care comenteaza. Hatiunea a *ost ca lin?urile >no*ollo$> nu vor a,un6e in ecuatia <a6eHan? si spammerii vor renunta sa posteze comentarii spam pe %lo6uri. /ceasta nu sa intamplat, dar relJ?no5ollo1? a rezistat. relJ?nore5errer? >indica *aptul ca nici o in*ormatie despre pa6ina anterioara nu tre%uie transmisa atunci cand se urmeaza o le6atura>. relJ?p n'!ac(? speci*ica adresa unui server >pin6%ac?>. Cum era explicat in speci*icatiile <in6%ac?, >sistemul pin6%ac? este o cale pentru un %lo6 de a *i automat noti*icat atunci cand alte site&uri sta%ilesc le6aturi cu el ... <ermite le6aturi inverse (reverse lin?in6 & o cale de a mer6e inapoi pe un lant de le6aturi, mai curand decat mer6and inainte>. 7istemele de %lo66in6, mai ales .ord<ress, implementeaza mecanismul de pin6%ac? pentru a noti*icat autorii la care ati realizat lin?uri atunci cand ati creat o postare pe %lo6. relJ?pre5etc&? >indica *aptul ca trasn*erul si stocarea resursei speci*icate este pro%a%il sa *ie %ene*ice, dupa cum este *oarte pro%a%il ca utilizatorul sa ceara aceasta resursa.> Motoarele de cautare adau6a uneori ,l n( relJ?pre5etc&? &re5J?E@L-ul pr mulu re8ultat?0 la pa6ina de rezultate daca simt ca primul rezultat este cu mult mai popular decar oricare altul. #e exemplu: *olosind )ire*ox, cautati in 0oo6le dupa CNN, vedeti sursa pa6iniii si cautati cuvantul c'eie pre5etc&. Mozilla )ire*ox este insu6urul %ro$ser actual care suporta relJ?pre5etc&?. relJ?searc&? >indica *aptul ca documentul metionat o*era o inter*ata speci*ica pentru cautarea in document si resursele sale conexe>. (n mod speci*ic, daca vreti ca relJ?searc&> sa *aca ceva 4!
util, ar tre%ui sa *aca le6atura catre un document +pen&7earc' care descrie cum un %ro$ser poate construi un AHL pentru a e*ectua cautari in site. +pen7earc' (si lin?urile relJ?searc&? care trimit la documentele de descriere +pen7earc' a *ost suportat in Microso*t (nternet Explorer inca din versiunea G si de Mozilla )ire*ox inca de la versiunea 3. relJ?s de!ar? >indica *aptul ca, daca documentul mentionat este incarcat, sa *ie prezentat intr& un context de navi6are secundar (daca este posi%il , in locul celui curent.> Ce inseamna asta L (n +pera si Mozilla )ire*ox, inseamna >atunci cand dau clic pe acest lin?, atentionez utilizatorul sa creeze un %oo?mar? care, atunci cand este selectat din meniul %oo?mar?uri, desc'ide documentul la care este *acuta le6atura, intr&un side%ar al %ro$serului> (+pera il numeste >panel> in loc de >side%ar> . (nternet Explorer, 7a*ari si C'rome i6nora relJ?s de!ar? si il trateaza ca pe un lin? o%isnuit, Ncazul de utilizare relJ?s de!ar?O relJ?ta'? >indica *aptul ca ta6ul pe care documentul mentionat il reprezinta se aplica documentul curent>. Marcarea ta6urilor (cuvinte c'eie ale cate6oriilor cu atri%ut rel a *ost inventata de Tec'norati pentru a&i a,uta sa&si or6anizeze postarile de pe %lo6. Flo6urile si tutorialele timpurii se re*ereau la aceastea ca la >ta6uri Tec'norati>. (/ti citit %ine: o companie comerciala a convins intrea'a lume sa adau6e metadatele care au *acut mai usoara munca companiei. + trea%a %una : 7intaxa a *ost mai tarziu standardiata in cadrul comunitatii micro& *ormatelor, unde a *ost simplu numita relJ?ta'?. Cele mai multe sisteme de %lo66in6 care permiteau asocierea cate6oriilor, a cuvintelor c'eie sau a ta6urilor cu postari individuale le vor marca cu lin?uri relJ?ta'?. Fro$serele nu *ac nimic special cu eleM ele sunt create pentru a *i *olosite de motoarele de cautare ca indicii despre continutul de pe pa6ina. Codarea caracterelor Cand va 6anditi la >text>, va 6anditi pro%a%il la >caractere si sim%oluri pe care le pot vedea pe ecranul calculatorului>. #ar calculatoarele nu prelucreaza caractere si sim%oluriM ele au de&a *ace cu %iti si %aiti. )iecare %ucata de text pe care o vedetio pe un ecran de calculator este de *apt stocata intr&un anumit cod de caractere. Exista sute de codari di*erite de caractere, unele optimizate pentru anumite lim%i, cum ar *i rusa, c'ineza sau en6leza, si altele care pot *i *olosite pentru mai multe lim%i. (n mare, putem spune despre codarea caracterelor ca o*era o relatie intre lucrurile pe care le vedeti pe ecranul calculatorului si lucrurile care sunt de *apt stocate in memorie si pe disc. (n realitate, este mai complicat de atat. /celasi caracter poate aparea in mai mult de o codare, dar *iecare codare poate sa *oloseasca o secventa di*erita de %aiti pentru stocarea caracterelor in memorie sau pe disc. /st*el, va puteti 6andi la codarea caracterelor ca la un *el de c'eie de decriptare pentru text. +ri de care ori va da cineva o secventa de %iti si pretinde ca este >text>, tre%uie sa stiti ce cod de caractere a *olosit ast*el incat sa decodati %itii in caractere si sa ii a*isati (sau sa ii procesati ori cum vreti sa spuneti . #eci, cum determina %ro$serul dumneavoastra codul de caractere al *luxului de %iti pe care ii trimite un server $e% L Ma %ucur ca ati intre%at. #aca sunteti *amiliarizat cu 'eaderele HTT<, s& ar putea sa *i vazut un 'eader ca acesta: Code:
Co#te#t-Ty)eA te.t*html3 "h,$%et="&t' - B"
<e scurt, aceasta spune ca un server $e% crede ca va trimite un document HTML si ca 43
documentul *oloseste codarea de caractere ET7-C. #in ne*ericire, in intrea%a ma6ni*ica supa care este .orld .ide .e%, putin autori de pa6ini controleaza serverul lor HTT<. 0anditi&va la Flo66er: continul este o*erit de indivizi, dar serverele sunt controlate de 0oo6le. HTML 4 a o*erit o cale de a preciza codarea de caractere in insusi documentul HTML. /ti vazut pro%a%il si aceasta: Code:
<met, htt)-eT&iv="Co#te#t-Ty)e" "o#te#t="te.t*html"3 "h,$%et=&t'-B">
<e scurt, aceasta linie spune ca autorul $e% crede ca a creat un document HTML *olosind codarea de caractere ET7-C /mandoua te'nicile *unctioneaza in HTML-. Headerul HTT< este metoda pre*erata si trece peste ta6ul ,meta0 daca acesta este prezent. #ar nu oricine poate con*i6ura 'eadere HTML, asa incat ta6ul ,meta0 este inca prezent. #e *apt, s&a simpli*icat putin in HTML-. /cum arata asa: Code:
<met, "h,$%et="&t'-B" *>
)untioneaza in toate %ro$serele. Cum s&a a,uns la aceasta sintaxa prescurtata L (ata cea mai %una explicatie pe care am intalnit&o Hatiunea pentru com%inatia de atri%ute ,meta c&arseJ?? 30 este ca implementarile Aser /6ent le includ de,a, deoarece oamenii tind sa lase lucrurile *ara 6'ilimmele, cum ar *i: Code:
<METI HTTP-EUG6J=Co#te#t-Ty)e COFTEFT=te.t*html3 "h,$%et=6<O-BB9;-7>
Exista c'iar cateva cazuri de teste ,meta c&arset0 daca nu crederi ca %ro$serele *ac de,a acest lucru.
41