Declaratia de tip — <!DOCTYPE html>
<!DOCTYPE html>. Nu este un element HTML obisnuit — nu are eticheta de inchidere si nu afiseaza nimic pe pagina. Rolul ei este sa spuna browserului: "acest fisier respecta regulile actuale HTML5, foloseste-le pe acelea ca sa afisezi pagina". Fara aceasta declaratie, unele browsere pot trece intr-un mod vechi de afisare ("quirks mode" — mod compatibilitate cu pagini foarte vechi din anii '90), in care unele reguli de aranjare in pagina se aplica altfel decat te astepti.
<!DOCTYPE html>
Intreaga declaratie de tip este insensibila la majuscule — <!DOCTYPE html> si <!doctype HTML> inseamna acelasi lucru pentru browser. Regula care chiar conteaza: nu se adauga alte cuvinte in declaratie, asa cum cereau versiunile vechi de HTML (HTML 4, XHTML), cu un rand de declaratie mult mai lung, cu adrese catre documente de specificatie; HTML5 a simplificat totul la acest singur rand, scris mereu <!DOCTYPE html> (indiferent de majuscule/minuscule folosite).
<DOCTYPE HTML> fara semnul de exclamare) nu blocheaza afisarea paginii — browserul tot deschide fisierul, dar poate trece in modul compatibilitate, iar odata ce adaugi reguli de aspect (CSS), unele dimensiuni si aliniamente pot iesi diferit fata de ce ai proiectat. Recunosti problema cand pagina "arata ciudat" fara motiv aparent; solutia e sa verifici mereu ca primul rand din fisier este exact <!DOCTYPE html>.
Elementul radacina — <html>
<html>, numit elementul radacina (root): toate celelalte elemente ale paginii — inclusiv zona de antet si corpul paginii, pe care le vezi mai jos — sunt scrise in interiorul lui, intre eticheta de deschidere <html> si cea de inchidere </html>. Este singurul element care sta direct langa DOCTYPE si contine absolut tot restul fisierului.
<!DOCTYPE html> <html lang="ro"> </html>
Atributul lang se scrie in eticheta de deschidere a lui <html>, cu un cod scurt de limba: lang="ro" pentru romana, lang="en" pentru engleza, lang="fr" pentru franceza. Se refera la limba principala a intregii pagini.
Zona de antet — <head>
<html>, prima "cutie" este <head> — zona de antet. Nu contine text vizibil pe pagina (cu o singura exceptie, titlul din tab); contine informatii despre pagina, pe care browserul, motoarele de cautare si alte programe le citesc inainte de a afisa continutul propriu-zis. In aceasta lectie retii doua elemente obligatorii ale antetului.
Un calculator nu stocheaza literele ca litere, ci ca numere; codificarea (encoding) este regula dupa care fiecare numar se transforma inapoi in litera corecta pe ecran. UTF-8 este codificarea universala, folosita azi pe aproape toate site-urile, pentru ca acopera si literele romanesti cu diacritice si alte alfabete. Declaratia trebuie pusa cat mai devreme in <head>, ca prim element, ca sa fie citita inainte de restul textului.
<title> contine textul care apare in tab-ul browserului, in rezultatele motoarelor de cautare si in lista de pagini favorite (bookmarks). Fiecare pagina are exact un singur <title>, scris in <head>, cu text scurt si descriptiv — nu apare nicaieri in corpul vizibil al paginii.
<!DOCTYPE html>
<html lang="ro">
<head>
<meta charset="UTF-8">
<title>Atelier Tamplarie Ionescu</title>
</head>
</html>
<head> (dupa alt continut), browserul poate deja sa fi inceput sa interpreteze textul cu o codificare gresita pana ajunge la declaratie. Recunosti problema cand literele cu diacritice apar stricate pe pagina, desi in fisierul sursa sunt scrise corect. Solutia: <meta charset="UTF-8"> ca prim rand din <head>, mereu.
Corpul paginii — <body> si titlurile pe niveluri
<body> — corpul paginii, singura zona cu continut vizibil in fereastra browserului: tot textul, titlurile, imaginile, listele si restul elementelor pe care le vei invata in lectiile urmatoare. Exista un singur <body> pe pagina, plasat dupa </head>, in interiorul lui <html>.
HTML ofera sase niveluri de titlu: <h1> (cel mai important) pana la <h6> (cel mai putin important). Nu sunt doar "litere mari sau mici" — formeaza o ierarhie logica, la fel ca un cuprins de carte: <h1> = titlul principal al paginii, folosit o singura data; <h2> = sectiunile mari ale paginii; <h3> = subsectiuni ale unui <h2>, si tot asa. Marimea literelor pe ecran e doar o consecinta vizuala implicita a browserului — ierarhia logica e cea care conteaza, si pe ea se bazeaza si cititoarele de ecran cand "navigheaza din titlu in titlu".
<body>
<h1>Atelier Tamplarie Ionescu</h1>
<h2>Despre noi</h2>
<h2>Servicii</h2>
</body>
Paragrafele — <p> si atributele HTML
<p>, este elementul de baza pentru text obisnuit: fiecare bucata de text separata logic (o idee, o descriere) se pune intr-un <p> propriu. Browserul adauga automat un spatiu vizual inainte si dupa fiecare paragraf, ca sa se vada clar unde incepe si unde se termina.
HTML trateaza orice grup de spatii, tab-uri sau treceri de rand consecutive din fisierul sursa ca un singur spatiu la afisare — indiferent cate ai pus tu. De aceea, textul scris fara <p>, chiar aranjat frumos pe randuri in editor, apare pe pagina ca un singur bloc continuu. Solutia este sa imparti explicit textul in paragrafe cu <p>...</p>, nu prin spatii sau randuri goale.
<p>Executam mobilier la comanda din lemn masiv.</p> <p>Lucram cu stejar, fag si brad, in functie de proiect.</p>
Acesta este raspunsul la provocarea de la inceputul lectiei: textul tau aparea lipit pentru ca nu era impartit in <p>, iar titlul din tab lipsea pentru ca fisierul nu avea <title> in <head>.
Un atribut este o informatie in plus, atasata unui element, scrisa in eticheta de deschidere, dupa numele elementului, in forma nume="valoare". Ai vazut deja doua atribute in aceasta lectie: lang="ro" pe <html> si charset="UTF-8" pe <meta>. Un element poate avea mai multe atribute deodata, separate prin spatiu, in orice ordine.
Element de pornit: <img src="banc-lucru.jpg" alt="Banc de lucru din atelier" width="400"> (acest element il vei folosi in detaliu in lectia urmatoare, despre imagini).
Numaram fiecare pereche nume="valoare" din interiorul etichetei:
1. src="banc-lucru.jpg" — al 1-lea atribut
2. alt="Banc de lucru din atelier" — al 2-lea atribut
3. width="400" — al 3-lea atribut
Rezultat: 3 atribute.
Daca acelasi element ar mai avea si height="300", rezultatul ar deveni 4 atribute — regula e simpla: numeri fiecare pereche nume="valoare" scrisa in eticheta de deschidere.
Site static fata de site dinamic
Static: o pagina de prezentare a unei pepiniere, cu numele speciilor de puieti disponibile scrise direct in text. Cand apare o specie noua, cineva deschide fisierul HTML, adauga un paragraf nou si il incarca din nou pe server — pana atunci, pagina arata la fel pentru oricine o viziteaza.
Dinamic: un catalog online in care numarul de puieti disponibili si pretul sunt citite dintr-o baza de date la fiecare vizita si afisate automat actualizate — daca stocul scade dupa o comanda, urmatorul vizitator vede deja noul numar, fara interventie manuala asupra fisierului HTML.
Recapitulare — documentul HTML complet
<!DOCTYPE html>
<html lang="ro">
<head>
<meta charset="UTF-8">
<title>Atelier Tamplarie Ionescu</title>
</head>
<body>
<h1>Atelier Tamplarie Ionescu</h1>
<h2>Despre noi</h2>
<p>Executam mobilier la comanda din lemn masiv, din anul 2015.</p>
<h2>Servicii</h2>
<p>Lucram cu stejar, fag si brad, in functie de proiectul clientului.</p>
</body>
</html>
Rand cu rand: <!DOCTYPE html> — regula de afisare; <html lang="ro"> — radacina, in romana; <head> — antet cu codificare si titlu de tab; <body> — tot ce se vede: un titlu principal (h1), doua sectiuni (h2), fiecare cu paragraful ei (p).
La aceasta proba ti se pot cere sarcini de tipul "creeaza o pagina web cu un titlu si doua paragrafe" sau "gaseste si corecteaza greseala dintr-un cod HTML dat". Verificarea de baza e mereu aceeasi: fisierul incepe cu declaratia de tip, are <html> cu limba potrivita, <head> cu <meta charset> si <title>, apoi <body> cu continutul cerut, structurat cu titlurile si paragrafele potrivite.
Ai scheletul unei pagini valide. In lectia urmatoare adaugi continut mai bogat inauntrul lui <body>: liste, tabele, imagini cu text alternativ, sunet, video si campuri de formular.