Obrazec v HTML opišemo z elementom form. Med njegove najpomembnejše lastnosti spadajo method, ki določa način prenosa podatkov do strežnika (možni vrednosti sta get in post), enctype določa način kodiranja podatkov, action pa naslov programa (spletne strani), ki bo obdelal v obrazec vnešene podatke.
<form method="..." enctype="..." action="..."> ... </form>
Pri sestavljanju obrazca imamo na voljo različna polja, ki jih lahko uporabimo. Če želimo vrednost polja po kliku na gumb prenesti na strežnik, moramo polje poimenovati (ime določimo z lastnostjo name).
<form action="porocilo.html"><p> Ime in priimek: <input type="text" name="ime" size="30" /><br /> Spol: <input type="radio" name="spol" value="m" /> moški <input type="radio" name="spol" value="z" /> ženski <br /> Starost: <select name="starost"> <option value="<10"> manj kot 10 </option> <option value="10-20"> med 10 in 20 </option> <option value="20-30"> med 20 in 30 </option> <option value="30<"> več kot 30 </option> </select> <br /> Telefon: <input type="text" name="telefon" /> <br /> <input type="submit" value=" OK " /> </p></form>
Poleg zgoraj omenjenih gumbov (polja tipa submit, reset, button in image) lahko uporabljamo tudi gumbe, ki jih opišemo z elementom button. Vrsto gumba v tem primeru določimo z lastnostjo type, ki ima lahko eno izmed vrednosti button, submit ali reset. Napis in/ali sliko na gumbu vpišemo kot vsebino elementa button.
<button type="button" onClick="...">...</button> <button type="submit">...</button> <button type="reset">...</button>
Opcije pri poljih select lahko razdelimo v več skupin. To storimo tako, da več opcij postavimo v skupino, ki jo opišemo z elementom optgroup. Posebej koristno je to pri dolgih seznamih opcij, kjer imamo več med seboj sorodnih opcij (te postavimo v isto skupino). Skupine ne morejo biti gnezdene (znotraj skupine ne moremo definirati podskupine). Z lastnostjo label določimo besedilo, ki se bo pojavilo v seznamu izbir (tega besedila ne bo možno izbrati).
<select name="..." size="..."> <optgroup label="..."> <option value="...">...</option> <option value="...">...</option> ... </optgroup> ... </select>
Medtem, ko nekaterim poljem v obrazcu lahko določimo opise (napisi na gumbih), drugim tega brez uporabe dodatnih elementov ne moremo. Pred polje za vnos besedila moramo sami napisati, kaj naj uporabnik vnese, za vsakim radijskim gumbom moramo sami napisati, kaj tisti gumb pomeni ... Problem je, da če uporabnik klikne na tak opis, se ne zgodi ničesar (radijski gumb lahko vklopimo samo, če kliknemo nanj). Težavo rešimo z uporabo elementa label. Uporabimo ga lahko na dva načina. Najbolje bo, da si ju pogledamo kar na primeru.
<label>Priimek: <input type="text" name="priimek" /></label> <label for="priimek">Priimek:</label> <input type="text" name="priimek" id="priimek" />
V prvem primeru element label vsebuje opis in polje za vnos besedila. Ta način uporabe je primeren, kadar opis in polje nastopata skupaj (vmes ni nič drugega). V večini primerov pa za razmeščanje opisov in polj uporabljamo tabelo, tako da je med njima še kakšna značka za prehod v naslednjo celico ali celo vrstico tabele. V takih primerih nam preostane samo drugi način uporabe, kjer opis in polje definiramo vsakega posebej, povežemo pa ju tako, da polju damo neko oznako (definiramo lastnost id), v opisu pa se skličemo nanj (definiramo lastnost for).
Pri razmeščanju polj nam bo v pomoč element fieldset, s katerim definiramo skupino polj. Skupina se obnaša kot celota, tako da jo je veliko lažje prestavljati in oblikovati. Prikaže se kot pravokotnik z robom, znotraj katerega so razmeščena vse polja te skupine. Skupina ima lahko tudi naslov, ki ga določimo z elementom legend znotraj skupine. Naslov skupine se prikaže na zgornjem robu pravokotnika.
<fieldset> <legend>...</legend> <!-- razmestitev polj --> </fieldset>
Preden polju spremenimo vrednost, ga moramo aktivirati. Aktiviramo ga tako, da kliknimo nanj, lahko pa tudi večkrat pritisnemo tipko TAB. Pri uporabi tipke TAB se polja aktivirajo v takem vrstnem redu, kot so našteta v datoteki HTML. Lahko pa vrstni red spremenimo, če poljem definiramo lastnost tabindex. Pri vsakem polju damo tej lastnosti drugačno vrednost (celo število med 0 in 32767). Polja se aktivirajo po vrsti od tistega z najmanjšo vrednostjo do tistega z največjo vrednostjo. Izjema so polja z vrednostjo 0 in polja brez vrednosti, ki se aktivirajo na koncu v takem vrstnem redu, kot so našteta v datoteki.
Vsakemu polju lahko predpišemo še dve lastnosti brez vrednosti. Prva je lastnost readonly, ki onemogoči spreminjanje vrednosti polja (polje še lahko aktiviramo), druga pa je disabled, ki onemogoči tudi aktiviranje polja in pošiljanje vrednosti na strežnik.