Liste: ordonate, neordonate si de definitii
<ul> (unordered list) — lista neordonata, cu buline, pentru elemente fara ordine obligatorie.
<ol> (ordered list) — lista ordonata, cu numerotare automata (1, 2, 3...), pentru pasi sau clasamente.
<dl> (definition list) — lista de definitii, perechi termen-explicatie.
In toate, fiecare element al listei sta intr-o eticheta <li> (list item) — cu exceptia <dl>, care foloseste <dt> (termen) si <dd> (definitie).
<ol> <li>Masurare si trasare pe placa de PAL</li> <li>Debitare cu fierastraul circular</li> <li>Slefuire margini</li> <li>Aplicare cant PVC pe margini</li> <li>Gaurire pentru balamale</li> </ol>
Browserul afiseaza automat: 1. Masurare si trasare... 2. Debitare... 3. Slefuire... si asa mai departe. Nu scrii tu cifrele — daca adaugi sau muti un <li>, numerotarea se recalculeaza singura.
<dl> <dt>PAL</dt> <dd>Placa aglomerata din lemn, obtinuta prin presarea de aschii cu adeziv</dd> <dt>MDF</dt> <dd>Placa fibrolemnoasa de densitate medie, mai fina decat PAL</dd> </dl>
Tabele: randuri, coloane si celule unite
<table> <thead> <tr> <th>Esenta</th> <th>Densitate (kg/m3)</th> <th>Utilizare</th> </tr> </thead> <tbody> <tr> <td>Stejar</td> <td>720</td> <td>Mobilier masiv</td> </tr> <tr> <td>Fag</td> <td>680</td> <td>Placaj, mobilier curbat</td> </tr> <tr> <td>Brad</td> <td>450</td> <td>Constructii, cherestea</td> </tr> </tbody> </table>
Asa arata rezultat, afisat de browser:
| Esenta | Densitate (kg/m3) | Utilizare |
|---|---|---|
| Stejar | 720 | Mobilier masiv |
| Fag | 680 | Placaj, mobilier curbat |
| Brad | 450 | Constructii, cherestea |
colspan="2" pe un <th> sau <td> il intinde pe 2 COLOANE alaturate, pe orizontala. rowspan="2" il intinde pe 2 RANDURI alaturate, pe verticala. Se folosesc cand un titlu sau o valoare acopera mai multe celule (ex: un antet "Pret (lei)" deasupra a doua coloane "Cu TVA" si "Fara TVA").
<tr> <th rowspan="2">Esenta</th> <th colspan="2">Pret (lei/m3)</th> </tr> <tr> <th>Fara TVA</th> <th>Cu TVA</th> </tr>
Imagini cu text alternativ si harti de imagine
<img src="dulap-stejar.jpg" alt="Dulap din lemn masiv de stejar, cu doua usi si rafturi interioare" width="400" height="300">
alt descrie CE se vede, nu repeta numele fisierului si nu scrie doar "imagine" sau "poza". width si height (in pixeli) rezerva spatiul pentru imagine inainte ca aceasta sa se incarce, ceea ce evita "saltul" continutului paginii.
O harta de imagine transforma zone dintr-o singura imagine in linkuri diferite — util pentru o schema a atelierului sau o harta a unui traseu, unde fiecare zona duce spre o pagina diferita. Se leaga o imagine de o harta cu atributul usemap, iar zonele se definesc in <map> cu etichete <area>.
<img src="schema-atelier.jpg" alt="Schema atelierului cu zonele de lucru" usemap="#harta-atelier"> <map name="harta-atelier"> <area shape="rect" coords="0,0,200,150" href="zona-debitare.html" alt="Zona de debitare"> <area shape="rect" coords="200,0,400,150" href="zona-slefuire.html" alt="Zona de slefuire"> <area shape="circle" coords="350,200,40" href="depozit-materiale.html" alt="Depozit de materiale"> </map>
coords se citeste diferit dupa forma din shape: pentru "rect" sunt 4 numere — x1,y1 (coltul stanga-sus) si x2,y2 (coltul dreapta-jos), in pixeli fata de coltul stanga-sus al imaginii. Pentru "circle" sunt 3 numere — x,y (centrul) si raza. Pentru "poly" (poligon) e o lista de perechi x,y, cate una pentru fiecare colt al formei.
Sunet si video redate direct in pagina
<audio controls> <source src="instructiuni-siguranta.mp3" type="audio/mpeg"> Browserul tau nu suporta elementul audio. </audio>
Textul de dupa <source> (aici "Browserul tau nu suporta...") este continut de rezerva — se afiseaza DOAR daca browserul nu poate reda niciunul dintre formatele oferite. In browserele moderne, in mod normal, nu se vede — apare doar bara de comenzi audio.
<video width="480" height="270" controls> <source src="tutorial-slefuire.mp4" type="video/mp4"> <source src="tutorial-slefuire.webm" type="video/webm"> Browserul tau nu suporta elementul video. </video>
Browserul incearca fisierele <source> in ordine si il reda pe primul pe care il intelege. Doua formate (mp4 si webm) acopera aproape toate browserele fara sa depinzi de unul singur.
Marimea aproximativa a unui fisier audio se calculeaza asa: marime (KB) = bitrate (kbps) × durata (secunde) ÷ 8 (imparti la 8 pentru ca bitrate-ul e in biti, iar marimea fisierului o vrei in Bytes — 1 Byte = 8 biti).
Un fisier instructiuni-siguranta.mp3 codat la 128 kbps, cu durata de 3 minute (180 secunde):
marime = 128 × 180 ÷ 8 = 23.040 ÷ 8 = 2.880 KB ≈ 2,8 MB.
Poti reface acest calcul pentru orice fisier: un clip de 90 de secunde la acelasi bitrate de 128 kbps ar avea 128 × 90 ÷ 8 = 1.440 KB ≈ 1,4 MB.
Butoane si campuri de formular
<form action="/trimite-comanda" method="post"> <label for="nume">Nume complet:</label> <input type="text" id="nume" name="nume" required><br> <label for="telefon">Telefon:</label> <input type="tel" id="telefon" name="telefon" required><br> <label for="esenta">Esenta lemn dorita:</label> <select id="esenta" name="esenta"> <option value="stejar">Stejar</option> <option value="fag">Fag</option> <option value="brad">Brad</option> </select><br> <label for="mesaj">Detalii comanda:</label><br> <textarea id="mesaj" name="mesaj" rows="4" cols="30"></textarea><br> <input type="checkbox" id="acord" name="acord" required> <label for="acord">Sunt de acord cu prelucrarea datelor</label><br> <button type="submit">Trimite comanda</button> <button type="reset">Sterge formularul</button> </form>
action (pe <form>) — adresa unde se trimit datele cand formularul e trimis (aici, "/trimite-comanda" pe server).
method (pe <form>) — cum se trimit: post trimite datele ascunse, in corpul cererii (folosit la formulare care schimba ceva pe server, ca o comanda); get le pune vizibile in URL (folosit la cautari, filtre).
name (pe fiecare camp — input, select, textarea) — eticheta cu care ajunge acea valoare la server; fara name, campul se completeaza pe ecran, dar valoarea lui NU se trimite deloc.
value (pe fiecare <option> dintr-un <select>) — ce se trimite efectiv la server pentru acea alegere; textul vizibil intre <option> si </option> e doar ce vede utilizatorul, value poate fi diferit (ex: un cod scurt).
rows si cols (pe <textarea>) — inaltimea (in randuri) si latimea (in caractere) zonei de text vizibile pe ecran.
text — o linie de text liber (nume, adresa)
email — browserul verifica de bunavoie forma de e-mail (contine @)
tel — camp pentru numar de telefon (pe mobil deschide tastatura numerica)
number — accepta doar cifre (ex: cantitate)
checkbox — bifa DA/NU, independenta de celelalte
radio — alegere UNICA dintr-un grup (folosind acelasi name la toate optiunile)
submit — trimite formularul catre server
Atributul required (fara valoare) blocheaza trimiterea formularului daca acel camp e gol — browserul afiseaza singur un mesaj de atentionare, fara cod suplimentar.
Cadre (frames) — de ce nu se mai folosesc
<!-- Tehnica veche, eliminata din HTML5 — doar pentru intelegere istorica --> <frameset cols="20%,80%"> <frame src="meniu.html"> <frame src="continut.html"> </frameset>
URL unic pentru tot ce vede utilizatorul — indiferent ce cadru navighezi, adresa din bara ramane aceeasi; nu poti trimite cuiva un link direct catre pagina exacta pe care o vede.
Buton Inapoi imprevizibil — navigarea intre cadre nu se comporta natural cu istoricul browserului.
Indexare greoaie in motoarele de cautare — Google trebuie sa proceseze fiecare cadru ca pagina separata, fara context clar despre pagina "intreaga".
Printare si afisare pe mobil dificile — layout-ul rigid pe cadre fixe nu se adapteaza la ecrane mici.
Probleme de accesibilitate — cititoarele de ecran au dificultati sa explice utilizatorului ca pagina e impartita in zone independente.
Pentru un layout cu meniu fix si continut variabil, site-urile moderne folosesc pagini HTML separate complete (fiecare cu propriul <head> si <body>, propriul URL), cu meniul de navigare repetat identic in fiecare pagina — exact tehnica din urmatoarea lectie a acestui modul. Elementul <iframe> (inline frame) inca exista in HTML5, dar are alt rol: insereaza un CONTINUT extern PUNCTUAL, in interiorul unei pagini normale cu URL propriu — de exemplu o harta:
<iframe src="https://www.google.com/maps/embed?pb=..." width="600" height="450"></iframe>
Diferenta esentiala: un <iframe> e o fereastra mica DIN INTERIORUL unei pagini normale, in timp ce <frameset> inlocuia elementul <body> al paginii cu o grila de cadre (structura ramanea <html><head>...</head><frameset>...</frameset></html> — <html> ramanea elementul radacina) — de-asta primul e acceptat azi, iar al doilea nu.
Recapitulare si conexiuni
Liste — <ul>/<li> (neordonata), <ol>/<li> (ordonata), <dl>/<dt>/<dd> (definitii)
Tabele — <table> > <tr> > <th>/<td>, cu colspan si rowspan pentru celule unite
Imagini — <img src alt>, cu alt obligatoriu descriptiv
Harti de imagine — <img usemap> + <map> + <area shape coords href>
Sunet si video — <audio>/<video> + <source> + controls
Formulare — <form> + <input>/<select>/<textarea>/<button>, cu <label for> asociat prin id
Cadre — <frameset>/<frame> eliminate din HTML5; <iframe> ramane, pentru continut extern punctual
Acum stii sa umpli o pagina cu continut. In lectia urmatoare inveti cum se LEAGA mai multe pagini intr-un sit intreg: pagina de start, cai relative fata de cai absolute, meniu de navigare repetat pe toate paginile si legaturi interne cu ancore catre o zona anume din aceeasi pagina.
Orice imagine cu continut real trebuie sa aiba alt descriptiv — verificat explicit la evaluare.
Un tabel foloseste <th> pentru antet, nu <td> ingrosat manual.
Un formular functional are <label for> = <input id> pe fiecare camp.
<frameset>/<frame> NU se mai folosesc — daca apar intr-un raspuns, e semn de continut invechit.