Best practices inom HTML (och generell webbutveckling)

Permalänk
Inaktiv

Best practices inom HTML (och generell webbutveckling)

Hej,

är ganska ofta man ser folk som till exempel använder tabeller för design eller onödigt långa doctypes. I denna tråden tänkte jag ta upp lite best practices inom HTML och generell webbutveckling som är bra att följa. Om du är ny till webbutveckling kanske detta inte direkt är något för dig, då rekommenderar jag istället Webboken.

Sluta använd W3Schools som referens
Snälla... Sluta rekommendera W3Schools till andra, det är helt enkelt inte en bra webbplats.
http://www.wordpressguru.se/sluta-anvanda-w3schools-som-refer...
http://w3fools.com/

Om du vill ha några andra sidor att länka till finns det i den första länken ovan. Två sidor som jag tycker är väldigt bra och bör uppmuntras är:
http://sigurdhsson.org/webboken/v2/ och https://developer.mozilla.org/

Använd doctypen för HTML 5
Det finns ingen anledning att inte använda doctypen till HTML 5. Den är speciellt framtagen för att få webbläsare (även äldre) att rendera sidan i strict mode. Den är bra mycket kortare än äldre doctypes och enklare att komma ihåg.

<!doctype html>

Använd alltid UTF-8 som teckenkodning
Den mest använda teckenkodningen är UTF-8 och borde användas i alla fall. Spara dina filer som UTF-8 (utan BOM, Byte Order Mark). Spara även databaser i någon av UTF-8 Collationerna (utf8_general_ci t.ex. där ci står för case insensitive). Använd även en meta tagg i din head för att makera filen som UTF-8:

<meta charset="utf-8" />

Använd INTE tabeller för design
Tabeller är till för att presentera data, inte för att skapa en design för en hemsida. Det var vanligt förr i tiden att använda tables för design men det är helt enkelt inte rätt längre. Använd istället HTML element som är gjort för det, t.ex.. div. Man ser ofta att folk använder tabeller för att skapa formulär där text och input ligger på samma rad, men det är enkelt, om inte enklare, att göra det utan tabeller. Brukar ofta se folk som gör tabeller för formulär, men det finns enklare, snabbare och finare sätt att göra det: http://jsfiddle.net/pDfcn/1/

Separera presentation, design och logik
Du bör inte använda inline CSS (style="") eller Javascript (onclick=""). Använd istället en extern stilmall för att styla alla element. Det blir enklare att ändra sidan och håller presentation och design isär. Det finns självklart undantag för detta, t.ex. om sidan är dynamiskt generad (dvs. om användarna kan välja en egen färg t.ex.), men försök att hålla dig till externa stilmallar. För Javascript kan du istället skapa ett event i en extern Javascript fil som exekverar när du t.ex. trycker på ett element istället för att använda t.ex. onclick="". Använder du jQuery blir detta ännu enklare att göra.

Lägg dina Javascript filer i botten
Tänk på att lägga dina Javascript i bottnen av sidan (precis innan </body>). Varför? För att när din webbläsare behöver ladda ner ett Javascript stannar laddningen av resten av sidan och får din hemsida att framstå som seg.

Använd feature detection, inte navigator detection

Skrivet av Alling:

Testa helst inte vilken klient som används för att avgöra vilka JS-kodsnuttar som ska köras. Testa istället om klienten har stöd för funktionen/egenskapen.

Undvik detta:

if (navigator.appName == 'Microsoft Internet Explorer') { // kod för IE } else { // kod för andra webbläsare }

Dold text

Försök istället använda detta:

if (window.localStorage) { // kod som körs om webbläsaren stöder localStorage } else { // kod som körs om den inte gör det }

Dold text

http://www.modernizr.com/ gör även detta mycket enklare.

Det är en skillnad mellan id och class
Ett id får endast användas en gång på en sida och bör endast användas på element såsom headern på din sida. Klasser är snabbare i CSS och bör således användas oftare. Id brukar å andra sidan användas flitigt i Javascript.

Använd alltid små bokstäver
Finns inte mycket att säga här förutom att du bör använda små bokstäver. Det är tom. ett krav att taggar ska använda små bokstäver i XHTML 1.0.

Använd H1-H6 elementen
Sökmotorer använder H1-H6 elementen för att kunna leta upp det mest relevanta innehållet. H1 bör till exempel användas till sidans titel i headern (dvs. endast en gång). H2 till sid rubriker och H3 till underrubriken till exempel.

Lär dig känna många olika element
Det finns många element som folk oftast inte känner till eller inte använder. Här finns en lista av HTML5 elementen; http://www.w3.org/TR/2010/WD-html-markup-20101019/elements.ht....

Skrivet av phz:

Allmänt är det bra att vara välbekant med taggar, även de mindre vanliga. <fieldset>/<legend>, <address>, <dt> m fl bidrar alla till att hjälpa webbläsare att tolka sidan. För 5–10 år sedan var detta något som "fundamentalister" förespråkade men få lyssnade på, i och med att i stort sett all access skedde med desktop-browsers, men med smartphones så har den mer semantiska stilen återkommit, och den lär ofrånkomligen behöva bli viktigare och viktigare.

Genom att använda rätt taggar så möjliggör man även alternativa visningssätt, så som verktyg för synskadade, små enheter, textbaserade läsare, webcrawlers, bakåtkompatibilitet, mm.

Ett element som oftast brukar glömmas är label elementet. Det är bra att använda när du skapar forms då man enkelt kan klicka på texten i labelen för att lägga fokus på respektive input.

Exempel på hur en label relaterar till en input

<form action="" method=""> <label for="username">Username</label> <input type="text" id="username" /> </form>

Dold text

Använd oordnade listor för menyer
En meny är en lista av valmöjligheter inte sant? Detta är det mest semantiska elementet att använda. Självklart måste du modifiera listan för att få den att se ut som du vill. Listor har som default en ganska stor padding och en list-style som kanske inte passar för menyer.

Använd alt attributet på bilder
En img tag kräver att du har ett alt attribut. Den attributen är till för att kort berätta vad som är på bilden, för blinda människor till exempel. Detta gör det även enklare för sökmotorer att indexera bilderna.

Använd ej   som padding
För det första brukar inte flera   på rad fungera, precis som flera vanliga mellanslag inte fungerar. Sedan brukar man se många som använder för att få texten att åka in en bit. Använd istället CSS attributet padding eller text-indent.

Jag kommer att lägga till saker jag stöter på efterhand som är bra att veta och viktiga att kunna som en webbutvecklare. Jag hoppas verkligen att vi kan hålla denna tråden i toppen på forumet för att nå ut till så många användare som möjligt. Kom gärna med förslag på saker som kanske behöver andras eller som behövs läggas till!

Om din lärare säger till dig att använda t.ex. tabeller för design tycker jag du ska berätta för denna att hon eller han lever kvar i forntiden. Be hon eller han att ta en titt på en riktig hemsida som är hyfsat ny och läsa igenom tex. Webboken. Finns inget värre att se än när elever tror att de lär sig något modernt när de egentligen lär sig något man använde för 10 år sedan.

Permalänk
Skrivet av anon150287:

Hej,

[SPOILER]är ganska ofta man ser folk som till exempel använder tabeller för design eller onödigt långa doctypes. I denna tråden tänkte jag ta upp lite best practices inom HTML och generell webbutveckling som är bra att följa. Om du är ny till webbutveckling kanske detta inte direkt är något för dig, då rekommenderar jag istället Webboken.

Använd doctypen för HTML 5
Det finns ingen anledning att inte använda doctypen till HTML 5. Den är speciellt framtagen för att få webbläsare (även äldre) att rendera sidan i strict mode. Den är bra mycket kortare än äldre doctypes och enklare att komma ihåg.

<!doctype html>

Använd INTE tabeller för design
Tabeller är till för att presentera data, inte för att skapa en design för en hemsida. Det var vanligt förr i tiden att använda tables för design men det är helt enkelt inte rätt längre. Använd istället HTML taggar som är gjort för det, t.ex.. div. Man ser ofta att folk använder tabeller för att skapa formulär där text och input ligger på samma rad, men det är enkelt, om inte enklare, att göra det utan tabeller. Ett exempel på KORREKT användning av tabeller:

<h2>Googles och Microsofts omsättning</h2> <table> <tr> <th>Q1</th> <th>Q2</th> <th>Q3</th> <th>Q4</th> </tr> <tr> <td>$ 6,78 miljarder</td> <td>$ 6,82 miljarder</td> <td>$ 7,29 miljarder</td> <td>$ 8,44 miljarder</td> </tr> <tr> <td>$ 16,2 miljarder</td> <td>$ 19,9 miljarder</td> <td>$ 16,4 miljarder</td> <td>$ 17,4 miljarder</td> </tr> </table>

Använd inte inline CSS eller Javascript
Du bör inte använda inline CSS (style="") eller Javascript (onclick=""). Använd istället en extern stilmall för att styla alla element. Det blir enklare att ändra sidan och håller presentation och design isär. Det finns självklart undantag för detta, t.ex. om sidan är dynamiskt generad. För Javascript för du istället skapa en event i en extern Javascript fil. Använder du jQuery blir detta ännu enklare att göra.

Lägg dina Javascript filer i botten
Tänk på att lägga dina Javascript i bottnen av sidan (precis innan </body>). Varför? För att när din webbläsare behöver ladda ner ett Javascript stannar laddningen av resten av sidan och får din hemsida att framstå som seg.

Använd alltid små bokstäver
Finns inte mycket att säga här förutom att du bör använda små bokstäver. Det är tom. ett krav att taggar ska använda små bokstäver i XHTML 1.0.

Använd H1-H6 taggarna och label taggen
Sökmotorer använder H1-H6 taggarna för att kunna leta upp det mest relevanta innehållet. H1 bör till exempel användas till sidans titel i headern (dvs. endast en gång). H2 till sid rubriker och H3 till underrubriken till exempel. Label taggen brukar också glömmas men den är bra att använda när du skapar forms då man enkelt kan klicka på texten i labelen för att lägga fokus på respektive input. Exempel:

<form action="" method=""> <label for="username">Username</label> <input type="text" id="username" /> </form>

Använd oordnade listor för menyer
En meny är en lista av valmöjligheter inte sant? Detta är det mest semantiska elementet att använda. Självklart måste du modifiera listan för att få den att se ut som du vill. Listor har som default en ganska stor padding och en list-style som kanske inte passar för menyer.

Använd alt attributet på bilder
En img tag kräver att du har ett alt attribut. Den attributen är till för att kort berätta vad som är på bilden, för blinda människor till exempel.

Jag kommer att lägga till saker jag stöter på efterhand som är bra att veta och viktiga att kunna som en webbutvecklare. Jag hoppas verkligen att vi kan hålla denna tråden i toppen på forumet för att nå ut till så många användare som möjligt. Kom gärna med förslag på saker som kanske behöver andras eller som behövs läggas till!

Om din lärare säger till dig att använda t.ex. tabeller för design tycker jag du ska berätta för denna att hon eller han lever kvar i forntiden. Be hon eller han att ta en titt på en riktig hemsida som är hyfsat ny och läsa igenom tex. Webboken. Finns inget värre att se än när elever tror att de lär sig något modernt när de egentligen lär sig något man använde för 10 år sedan.

[/SPOILER]

Bra initiativ! Man lär sig tillochmed själv nya saker i det du tog upp

Visa signatur
Permalänk
Medlem
Skrivet av anon150287:

Det finns självklart undantag för detta, t.ex. om sidan är dynamiskt generad.

Ang. detta så är det nog ganska så extrema fall skulle jag säga. Om man ändå dynamiskt genererar element är det ju smidigare att slänga med ett class-/id-attribut på taggen istället för att direkt i koden skriva CSS. Det kanske inte alltid är möjligt dock, vad vet jag. Själv skriver jag PHP och där blir det extremt enkelt att undvika inline-styling om man genererar element.

--
EDIT: Säger dock inte att det inte finns några sådana fall. Bara att jag inte kommer på något fall där man behöver göra det.
--

I övrigt ser det bra ut, speciellt om man inte skrivit HTML speciellt länge

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk

Bra tråd, ska följas.

Visa signatur

citera mig, annars är risken överhängande stor att jag ej hittar tillbaka.

Permalänk
Medlem

Bra, med undantag för förvirringen gällande tagg vs. element. Du menar oftast element när du säger tagg.

Permalänk
Hedersmedlem

Allmänt är det bra att vara välbekant med taggar, även de mindre vanliga. <fieldset>/<legend>, <address>, <dt> m fl bidrar alla till att hjälpa webbläsare att tolka sidan. För 5–10 år sedan var detta något som "fundamentalister" förespråkade men få lyssnade på, i och med att i stort sett all access skedde med desktop-browsers, men med smartphones så har den mer semantiska stilen återkommit, och den lär ofrånkomligen behöva bli viktigare och viktigare.

Genom att använda rätt taggar så möjliggör man även alternativa visningssätt, så som verktyg för synskadade, små enheter, textbaserade läsare, webcrawlers, bakåtkompatibilitet, mm. Detta inkluderar även i stor del anledningen till att inte använda tabeller för design eller Flash i onödan (dvs nästan alltid så som det används idag).

Separera design från innehåll — detta mantra tål att upprepas. Det är egentligen vad man gör i ett uppmärkningsspråk.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Avstängd

Jag tycker att även MVVM inom javascript borde lyftas upp som best practice.
http://knockoutjs.com/

Visa signatur
Permalänk
Inaktiv

Har ändrat en del och tagit upp det folk har förslagit. Citerade även phz inlägg då jag inte kunde beskrivit det bättre själv.

Skrivet av CyberVillain:

Jag tycker att även MVVM inom javascript borde lyftas upp som best practice.
http://knockoutjs.com/

Sidan svarar inte så lägger inte till det för tillfället.

Permalänk
Medlem

Angående MVVM så visst, men är det relevant som best practice inom javascript för någon som är på nivån att han behöver lära sig att man inte bör använda tabeller för design i HTML? Kanske skulle börja med ta upp varför man bör använda var när man deklarerar sina variabler t ex..

Visa signatur

Detta är första varningen va, jag ämnar brisera ur denna japanska kampställning och fullständigt förinta dig om inte du försvinner härifrån.

Permalänk
Medlem
Skrivet av CyberVillain:

Jag tycker att även MVVM inom javascript borde lyftas upp som best practice.
http://knockoutjs.com/

Visst ser det bra ut, dock känns det lite som inline-scripting.

Permalänk
99:e percentilen

Testa helst inte vilken klient som används för att avgöra vilka JS-kodsnuttar som ska köras. Testa istället om klienten har stöd för funktionen/egenskapen.

Undvik detta:

if (navigator.appName == 'Microsoft Internet Explorer') { // kod för IE } else { // kod för andra webbläsare }

Dold text

Försök istället använda detta:

if (window.localStorage) { // kod som körs om webbläsaren stöder localStorage } else { // kod som körs om den inte gör det }

Dold text
Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Inaktiv

input element får inte ligga direkt i ett form element om det ska vara en giltig validering på koden då både form och body endast godtar block element.

Permalänk
Medlem

Alt-attributet ger ju beskrivning om bilden vid hovring och visas även om man surfar utan bilder eller om bilden inte laddas. Exemplet med blinda är inget som motiverar en att använda elementet.

Permalänk
Inaktiv
Skrivet av jocke92:

Alt-attributet ger ju beskrivning om bilden vid hovring och visas även om man surfar utan bilder eller om bilden inte laddas. Exemplet med blinda är inget som motiverar en att använda elementet.

Alt ger inte beskrivning när du håller musen över bilden för det kräver det att du använder title attributen

Permalänk
Inaktiv
Skrivet av Alling:

Testa helst inte vilken klient som används för att avgöra vilka JS-kodsnuttar som ska köras. Testa istället om klienten har stöd för funktionen/egenskapen.

Undvik detta:

if (navigator.appName == 'Microsoft Internet Explorer') { // kod för IE } else { // kod för andra webbläsare }

Dold text

Försök istället använda detta:

if (window.localStorage) { // kod som körs om webbläsaren stöder localStorage } else { // kod som körs om den inte gör det }

Dold text

Tar och lägger till det.

Skrivet av ckrudelux:

input element får inte ligga direkt i ett form element om det ska vara en giltig validering på koden då både form och body endast godtar block element.

HTML5 tillåter input element direkt i ett form element medan HTML4.01 inte gör detta. Och eftersom jag personligen förespråkar HTML5 och tycker man ska använda det så måste jag tyvärr skippa att lägga till detta.

Permalänk
Inaktiv
Skrivet av anon150287:

Tar och lägger till det.

HTML5 tillåter input element direkt i ett form element medan HTML4.01 inte gör detta. Och eftersom jag personligen förespråkar HTML5 och tycker man ska använda det så måste jag tyvärr skippa att lägga till detta.

Se där ja det visste jag inte, alltid något att lära sig

Permalänk
Entusiast

För en tid sedan, då webbläsarna var mycket dåliga på W3C-standarder, använde jag tabeller (Tables) för layout.
Det fanns en anledning till att många valde att gå den vägen, även om man visste att tabeller inte var designade för det.
(Idag använder jag i div-block till allt. Även tabelldata.)

För ett tag sedan, hanterade webbläsare p, span och div block på helt olika sätt, och olika webbläsare tolkade CSS/styles på helt olika sätt. Detta gjorde det oerhört svårt att skriva css/styles som passade alla webbläsare. I vissa fall var det till och med omöjligt att få till en viss layout som passade alla webbläsare.
Någon kom på att tables hade bättre "korskompatibilitet", och utnyttjade tabeller till layout och fick till bättre resultat, som vid tidpunkten inte gick att lösa på annat sätt.

Efter en tid blev det "standard praxis" att använda tabeller till i princip allt. Och som vi alla vet, är en vana svår att ändra.
Idag är div-block mycket bättre, och de flesta webbläsare har börjat tolka W3C satta HTML-standarder på rätt sätt.
För bara några enstaka år sedan, tolkade makarna av webbläsarna W3C-standarderna på sina egna sätt, och med det följde kaos.

Vems "fel" är/var då detta?
Jag själv skyller på organisationerna bakom W3C, som inte skriver tydligare regler.
Regler och rekommendationer från W3C är många gånger svårtolkade eller så kan dem tolkas på mer än ett sätt.

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk
Inaktiv
Skrivet av SysGhost:

(Idag använder jag i div-block till allt. Även tabelldata.)

Men då använder du ju inte rätt element för det du gör. Det funkar åt båda hållen.

Skrivet av SysGhost:

Vems "fel" är/var då detta?
Jag själv skyller på organisationerna bakom W3C, som inte skriver tydligare regler.
Regler och rekommendationer från W3C är många gånger svårtolkade eller så kan dem tolkas på mer än ett sätt.

Ja, är väl delvis W3Cs fel men även de som gjorde webbläsare. Om reglerna nu var så otydliga kunde man ju istället för att implementera vad man trodde va rätt ta en snack med både W3C och de andra företagen. Sen har väl Microsoft med IE6 en stor det i det hela genom att de helt enkelt inte stödde en del standarder alls eller implementerade massa "coola" nya saker som sedan skapade förvirring.

Permalänk
Entusiast
Skrivet av anon150287:

Men då använder du ju inte rätt element för det du gör. Det funkar åt båda hållen.

Jag fann att det var mycket enklare att få innehållet i "cellerna" att bete sig som jag vill, när jag använder div-block istället för vanliga tabeller.
Upptäckte också att webbläsarna stödjer div bättre än dem stödjer tabeller idag. Lustigt, jo. Men fungerar bättre gör det.
Och som mos på grädden så knasar inte div-blocken ur fullkomligt utifall data "råkar" saknas i någon av cellerna.

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk
Medlem

Bra tråd!
Blir helt klart att bokmärka den.
Såg att det var lite småsaker som man faktiskt inte visste.
Tex det med H1 osv.
Kör för närvarande span i ett p-element när jag ska göra en rubrik.
Blir att ändra på!

Visa signatur
Permalänk
Entusiast

Ett till tips:
Använd alltid UTF-8 / Unicode teckentabell som standard.
På så sätt behöver man inte lägga ner tankeverksamhet åt vilka teckentabeller man bör använda.
Det finns egentligen inga anleningar idag att använda någon annan teckentabell. ANSI-tabellen är en gammal kvarleva från amerikanska skrivmaskiner. Den borde ha skrotats för länge sedan.

Detta görs enkelt med meta Content-Type taggen:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Se dock till att html-filerna är sparade i text-formatet: "UTF-8 utan BOM" / "UTF-8 Without Byte-Order Mark"

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk
Medlem
Skrivet av SysGhost:

Ett till tips:
Använd alltid UTF-8 / Unicode teckentabell som standard.
På så sätt behöver man inte lägga ner tankeverksamhet åt vilka teckentabeller man bör använda.

Detta görs enkelt med meta Content-Type taggen:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Se dock till att html-filerna är sparade i text-formatet: "UTF-8 utan BOM" / "UTF-8 Without Byte-Order Mark"

Eller den enklare varianten:

<meta charset='utf-8' />

Permalänk
Medlem

Kan även vara värt att nämna att alt i bild även underlättar för sök av bilder på sökmotorer.
Kanske redan nämnts.

Mycket bra tråd! Kommer följas

Visa signatur

AMD Phenom II X6 1100T BE @ 4.3 Ghz , Gigabyte GA-990FXA-UD3 AM3+, Corsair 8GB CL9 1866Mhz, Gigabyte R9 280X 3Gb OC, SSD 120GB OCZ Vertex 2

Permalänk
Avstängd
Skrivet av htux:

Visst ser det bra ut, dock känns det lite som inline-scripting.

Inline scripting? Nej, det är html5 data atribut för att märka upp hur htmlen ska databindas, javascriptet lägger du i en saparat js-fil, kan inte bli mer unobtrusive än så

Visa signatur
Permalänk
Medlem
Skrivet av CyberVillain:

Inline scripting? Nej, det är html5 data atribut för att märka upp hur htmlen ska databindas, javascriptet lägger du i en saparat js-fil, kan inte bli mer unobtrusive än så

Visst, jag förstår att det är en helt annan sak, men det känns fortfarande som att man bäddar in lite beteende i koden.

Permalänk
Avstängd

Det är MVVM, lika dant om du kör MVVM för tex WPF eller Silverlight... Inga konstigheter, jag ser inga problem med att ha det i markupen, precis på samma sätt som man har tex data-customer-id="5"

Visa signatur
Permalänk
Entusiast

Kan ju lägga till också att id taggar bara får användas en gång, medan class taggar får användas hur mycket man vill

Korrekt användning, ex:

<div id="comments"> <div class="comment"></div> <div class="comment"></div> <div class="comment"></div> </div>

Dold text

Det är något ändå ganska många gör fel på eller är förvirrade över

Permalänk
Medlem
Skrivet av Blargmode:

Kan ju lägga till också att id taggar bara får användas en gång, medan class taggar får användas hur mycket man vill
Det är något ändå ganska många gör fel på eller är förvirrade över

ja, det ser man rätt ofta av någon anledning.
jag brukar likna det vid personnummer respektive födelsedatum när jag försöker förklara skillnaden.
id är som personnummer; det finns bara en enda person som har ett specifikt personnummer.
class är som födelsedatum; det finns flera personer som är födda samma datum.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av Blargmode:

Kan ju lägga till också att id taggar bara får användas en gång, medan class taggar får användas hur mycket man vill
Det är något ändå ganska många gör fel på eller är förvirrade över

Faktiskt något som min lärare i webbdesign sa fel om, var kul att få rätta han lite.

Visa signatur
Permalänk
Medlem
Skrivet av anon150287:

Exempel på hur en label relaterar till en input

Som exempel för <label> tycker jag personligen att det är enklare och tydligare att använda följande format, än att börja speca massa ID:n överallt...

<label> Namn: <input type="text" /> </label>