Webbutveckling - Klientsidan

David Rogers

Uppgift 1.1 Grunderna i HTML5

Grundläggande struktur och uppbyggnad

HTML är ganska logiskt skrivet och enkelt indelat i olika element. Dessa element är tänkta att ha ett ganska specifikt användingsområde men har i vissa fall använts till något helt annat. Det finns till exempel flera exempel på hur Tables (som är till för att göra tabeller) har använts för den överliggande formateringen på en hemsida.

Alla HTML element skrivs inom dessa tecken: <>. När man startar elementet så anger man dess namn inom dessa tecken och för att avsluta det gör man samma sak fast med ett / tecken tillagt innan själva namnet. Alltså <html> för att starta ett html element och </html> för att avsluta det.
Den text som hamnar utanför dessa element tolkas som ren text och läggs till där den är skriven.

HTML dokument skall börja med ett element som heter !DOCTYPE. Detta element är till för att säga vad det är för typ av dokument som tolkas. Typen av dokument är olika verisioner av HTML. För HTML5 så skrivs denna typ helt enkelt som html. Den fullständiga koden för doctype för ett HTML5 dokument blir då: <!DOCTYPE html>.
Det är värt att notera att webläsare kan tolka ett HTML dokument som inte har detta element men utan det så försöker webläsaren i allmänhet att gissa sig till vliken verision dokumentet är. I vissa falla så går webläsaren tillbaka till äldre (och väldigt buggiga) sätt att tolka dokumentet. Det är alltid värt att ha med detta element även om allt funkar utan det. Detta gäller för flera element och i allmänhet är det alltid bäst att ha med dem.
I äldre verisioner av HTML har denna tag varit betydligt längre och inte alls lika lätt att förstå. HTML 4.01 har t.ex. doctype som ser ut så här: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Man får då lite mer information men det betyder också att man måste gå in och ändra i koden om man använder någon ny funktion i språket. Själva meningen med att ha en enkel html är att det är tänkt att HTML skall vara ett "levande språk", alltså ett språk under konstant utveckling, och att man inte ska behöva ändra ens doctype bara för att det tillkommit funktioner.

Efter att man har deklarerat doctype så kommer ett element som heter <html>. Detta är då för att markera vart själva html koden börjar och slutar. Man bör också ange vilket språk själva sidan är skriven i. Alltså inte programmeringsspråk utan semantiskt språk. Detta görs genom att lägga till ett attribut till html elementet. Detta görs helt enkelt så här: <html lang="en">. Det attribut vi lade till är då lang som då anger vilket språk som sidan är skriven i. I detta fall är det engelska som är språket.
Det är värt att nämna att i XHTML så var det krav på att ha citattecken runt värden (det som kommer efter =) men webläsaren kan tolka det utan. Det är dock bra att alltid ha dessa för att undvika konstiga misstag. Det finns tecken som skapar problem om dom inte är inom citattecken (vanligast är <, > eller =).

Ett element som används för en mängd information om sidan är <head> och brukar finnas tidigt i ett html dokument. I detta element så kan man lägga en mängd andra element för diverse saker. Vanliga saker att nämna här är t.ex: <title> som anger vad som skall stå som titel (på webläsarens fönster eller tab) eller <meta> som är till för diverse metainformation (information som inte skrivs ut på själva sidan). Dessa kan vara t.ex. namnet på författaren, beskrivning av sidan, sökord, o.s.v. Detta anges genom att ange ett par attribut i form av name och content. Så om man skall ange författare så skriver man: <meta name="author" content="David Rogers">. Detta format används på nästan alla meta tags. Det finns vissa tags som inte är lika enkla att förstå och bland dessa finns det t.ex. robots, generator och http-equiv. Robots används för att ange information för de botar (kallas ibland spindlar eller robots) som indexerar för sökmotorer. Man kan ange om sidan skall bli indexerad och om länkar på sidan skall följas eller inte. Generator är en tag som läggs till om sidan är genererad av ett webutvecklingsverktyg. Http-equiv tag skall inte användas tillsammans med name tagen. Http-equiv simulerar något som kallas HTTP response header. Detta är den information som en webserver får efter att den gjort en request. Eftersom man inte alltid har tillåtelse att konfigurera den webserver man använder kan man använda http-equiv för att som sagt simulera vad för respons man vill skicka till webservern. Denna information ges då allmänt inom header elementet men http-equiv låter en göra lite extra. Man kan t.ex. säga att en sida skall laddas om vid ett visst intervall. Varjde sida bör ange vilken teckenkodning som används och det görs genom en tag kallad charset. Denna sida använder t.ex. utf-8. Detta anges på följande sätt: <meta charset="utf-8">.
Head används också till att länka till filer med CSS eller JavaScript kod. Man kan också lägga in CSS kod via <style> element och JavaScript kod via <script> element.

Allt som nu blivit beskrivet är en bra början på en sida. Vi har angett vad för dokument det är och angett den information som behövs i bakgrunden. Följande är ett exempel på hur denna start skulle kunna se ut i html kod:

			
				<!DOCTYPE html>
					<html lang="sv">
						<head>
							<title>HTML tutorial</title>
							<meta charset="utf-8">
							<meta name="author" content="David Rogers">
							<meta name="description" content="Short HTML5 tutorial">
							<meta name="keywords" content="HTML, HTML5">
							<meta name="robots" content="NOINDEX, NOFOLLOW">
							<meta name="generated" content="brainpower">
						</head>
						...
					</html>
			
			

Generated skulle självklart ha ett annat värde om det var genererat av ett verktyg. Det skulle ha namnet på verktyget och förmodligen verisionen. Om det inte är genererat så skall den meta tagen inte vara med egentligen.

Innehållet på en sida

För själva innehållet på sidan så använder man sig av <body> elementet som då är "kroppen" på ens sida (alltså det huvudsakliga innehållet). Ett vanligt sätt att dela in ens innehåll i logiska delar är att använda <div> elementet. Detta kan sedan stilsättas via CSS på enkla sätt. I HTML5 finns det dock nya semantiska indelningar som tar över rollen för den mer generella (och ibland svåra att förstå) <div>. Dessa kommer gås igenom i andra delen.

Det finns väldigt många taggar för att formatera text i HTML. De flesta har väldigt specifika användningsområden och jag kommer gå igenom några.

<abbr> är en tag för förkortningar. Abbr är själv en förkortning på engelskan abbreviate som då betyder förkortning. Denna tag används på följande sätt: <abbr title="abbreviate">abbr</abbr>.
Resultatet blir då abbr (håll muspekaren över "abbr").

<acronym> gör rent tekniskt exakt samma sak som <abbr> . P.g.a. detta så har acronym slutat användas i HTML5 och man bör använda abbr istället. Det går att använda acronym utan några större problem och det är väldigt vanligt att man ser det på redan skrivna sidor. Man bör dock använda abbr eftersom om det kommer ändringar som ändrar dess beteende så gäller det inte för acronym. Acronym kommer också att flaggas av validators.

<address> är en tag för precis vad det låter som; en adress. I många webläsare ändras fonten texten till italic inom adress. Det finns inga specifika krav på hur en adress skrivs (eller ens vad som finns där). Den används som en enkel tag precis som tidigare: <address> Gata: Hittapåvägen 5 <br>Postort: Fantasi, 66554</address>
blir:

Gata: Hittapåvägen 5
Postort: Fantasi, 66554

Ni märkte kanske att <br> taggen användes i det tidigare exemplet. Det är en tag som gör ett radavbrott. Ren text i HTML skrivs på en rad i den mån möjligt och bryts när den inte får plats längre. Med br (som är en förkortning för break, alltså line break) kan man dock ange att man vill ha ett radavbrott själv. Det finns vissa skillnader för hur den används jämfört med tidigare taggar. Till att börja med så har den ingen start och inget slut. Det är helt onödigt eftersom det gör ett enkelt radavbrott och att därför kräva ett avslut på den är dumt. Den används väldigt enkelt: Te<br>xt blir: Te
xt

<q> används för citat. Taggen heter q för engelskan quote som betyder citat. Förutom <q> så finns <blockquote> och <cite> för citat. De används som de enklaste taggarna genom att helt enkelt omge vald text med öppning och stänging av taggen. Tanken är att man ska ha olika taggar beroende på längden eller syftet med ens citat. <q> är till för kortare citat, <blockquote> är till för långa citat och <cite> är till för referenser. Webläsare brukar också visa dem olika. <q> brukar visas med citattecken, <blockquote> brukar indenteras och <cite> brukar visas kursivt. Ex:

q
blockquote
cite

Notera att blockquote används helt felaktigt i exemplet eftersom det ju är till för längre innehåll. I XHTML var det ett krav att blockquote skulle innehålla minst en tag för text. Denna regel är bra att ha i åtankte när man ska välja vilken tag man bör använda. Det är vanligt att se sidor helt utan <cite> där man istället använder <q>.

Det finns flera taggar som är till för att definiera vad det är för typ av text inom dem. De har väldigt specifika användningsområden och webläsare visar dom ofta med en annan stil än den vanliga texten. Innan jag går igenom några av dessa ska jag nämna att man kan ange attribut till taggar. Det har visats vissa exempel på dessa men t.ex. title atributet går att lägga till många. Vad man får då är precis som vid <abbr> taggen att det som står efter title syns om man muspekaren över texten i denna tag. Just attributet title är vanligt att använda vid flera av de kommande taggarna.

<code> är till för programmeringskod och webläsare ändrar ofta vilken font texten syns i (om man inte angett vilken font som ska användas för code taggen via CSS). Det är vanligt att man anger vilket programmeringsspråk texten är skriven i genom title attributet. Ex: public int count = 0; .

<dfn> är till för definitioner. Det ord som definieras är den text som då ska ligga inom taggarna. Det ska noteras att om texten som ska definieras är en förkortning så ska <abbr> taggen användas för att ange den fullsätndiga texten. Om vi tar termen HTML som exempel: <dnf><abbr title="HyperText Markup Language">HTML</abbr></dfn> blir: HTML.

<em> används för att ange att en text har en annan betoning. Taggen tar sitt namn från engelskans emphasis. Innan XHTML kom användes taggen <i> för samma sak (och används så fortfarande). En annan tag som har samma problem är <strong>. Innan XHTML (och efter!) så användes taggen <b> för precis samma sak. Saken är den att alla dessa tags ändrar utseendet på texten; <em> och <i> gör texten kursiv medans <strong> och <b> gör texten fetstilt. Det kan verka förvirrande med taggar som gör ungefär samma sak men det finns vissa tumregler när man ska använda dessa. <em> ska användas när ett ord har en annan betoning än den övriga texten. Ofta en starkare betoning än den övriga texten. Ex: När jag säger 100% så menar jag 100%. Grannen <i> används för text som inte skiljer sig i betoningen men används för text som skiljer sig från den övriga texten på nåt sätt, t.ex. ett annat språk eller en teknisk term. Det man kan se som kursivt i en bok hamnar ofta inom <i>. Ex: Det var som att han gjorde en touchdown. <strong> används för text som har en viktigt innebörd och som snabbt ska stå ut från övrig text, t.ex. varningar eller notiser. Ex: Varning toaletten på våning 3 är trasig. <b> används för sånt som traditionellt är fetstilt men inte har extra viktig innebörd t.ex. namn eller nyckelord i en text. Ex: När jag gick genom dörren så började mitt svärd vibrera och ljuset slocknade.

<kbd> är en tag som används för att ange tangentbords input. Taggen tar sitt namn från engelskans keyboard och med det menas då keyboard input. Används för att ange vad läsaren ska ange för input. Webläsaren ändrar oftast fonten till en mer enhetlig font. Ex: Skriv c:\windows för att ställa dig i rätt katalog.

<samp> används för output från ett datorprogram. Är på vissa sätt motsvarigheten till <kbd>. Ex: Type delete *.class and you will be promted Are you sure? Y/N.

<var> används för text som är en variabel, t.ex. en variabel i matematik eller programmering. Ex: Och via a1 kan du då komma åt elementet på arrayens plats 1.

<span> används för att dela in en del av en text i ett eget logiskt element. Det blir ingen visuell skillnad men man kan genom span ange attribut som sedan låter CSS göra visuella förändringar. Kan användas till en mängd olika saker och det är egentligen bara fantasin som begränsar.

<pre> är till för text med annorlunda format. Taggens namn kommer från preformatted alltså redan formaterad text. Text inom denna tag byter font (oftast till Courier) och har kvar all formatering. Används väldigt ofta när man ska visa programmeringskod (som ju har speciell indentering). Utan denna tag blir det nästintill oläsligt. Ex: se tidigare (Här) när jag ger exempel på hur en start på en sida skulle kunna se ut. Utan <pre> tag skulle indenteringen försvinna.

<h1> - <h6> är till för rubkriker. Namnet kommer delvis av engelskans heading och siffran står för vilken vikt den har. 1 har störst vikt och 6 minst. Webläsare ändrar ofta storleken på fonten och gör de viktigare (lägre siffror) större. Dessa används ofta lite slött på många sidor men det är väldigt bra att verkligen se till att använda dem som de ska användas. Det hjälper delvis för sökverktyg men också för läsare för folk med handikapp, t.ex. blinda. Ex:

Detta är skrivet i <h1>

medans detta är skrivet i <h6>

<p> är till för paragrafer. Det blir lite avstånd innan och efter text som hamnar inom dessa taggar. Används precis som en paragraf och i allämnhet anges fri text inom <p> taggen om den inte ligger inom en annan mer specifik tag. Ex:<p>Första paragrafen</p><p>Andra paragrafen</p> blir:

Första paragrafen

Andra paragrafen

Det finns också några taggar för att bygga listor i HTML. <ol> och <ul> står för ordered list samt unordered list och är precis vad dom heter. För att bygga en lista anger man vilken typ av lista som skall användas och sedan lägger man varje punk i listan inom <li> taggen, som står för list item. För en oordnad lista blir då koden:

				
					<ul>
						<li>Punkt 1</li>
						<li>Punkt 2</li>
						<li>Punkt 3</li>
					</ul>
				
			
Resultatet av detta blir:

Som synes så markeras varje punkt i listan och har ett jämnt avstånd mellan varandra. För ordnade listor så markeras punkterna med en ordning, vanligast med enkla siffror. Ex:

  1. Punkt 1
  2. Punkt 2
  3. Punkt 3

Man kan däremot ange olika typer av markering genom attributet type. Dessa typer är: 1 för vanliga siffror, A för stora bokstäver (enligt engelska alfabetet), a för små bokstäver, I för romerska siffror skrivet med stora bokstäver och i för romerska siffror med små bokstäver. Om man använder bokstäver som typ och går över 26, som är antalet bokstäver i engelska alfabetet, så skrivs nästa punkt ut med AA (eller aa om man använder små bokstäver) och fortsätter med AB. Om man går ännu ett varv så byts första ut mot B och så fortsätter det. Går man tillräckligt långt så läggs ytterligare en bokstav till så det blir AAA. Romerska siffror kan bara användas upp till 4999 sedan ersätts dom med vanliga siffror. Man kan också ange på vilken siffra listan skall starta genom attributet start. Detta anges då med en siffra och i fallet med bokstäver så är denna siffra den ordning som bokstaven kommer i alfabetet (så 1 är A och 26 är Z). Det går också att skriva ut listan baklänges med attributet reversed, som skrivs ut reversed="reversed". Så om den tidigare listan skrivs om med romerska siffror med start på nummer 10 och som går baklänges så skulle <ol> taggen se ut på detta sätt: <ol type="I" start="10" reversed="reversed">. Och resultatet blir då:

  1. Punkt 1
  2. Punkt 2
  3. Punkt 3

Förutom <ol> och <ul> finns <dl> som står för definition list som är ungefär vad det låter som, en lista där man kan ange definitioner för varje punkt. Rent tekniskt så fungerar den på så sätt att varje punkt i listan anges med <dt> och varje definition anges med <dd>. Man kan använda flera stycken <dd> taggar inom varje <dt> och på så sätt bygga "listor inom en lista". Ex:

				
					<dl>
						<dt>Banan</dt>
							<dd>Frukt</dd>
							<dd>Exotisk</dd>
						<dt>Gurka</dt>
							<dd>Grönsak</dd>
							<dd>Lokal</dd>
					</dl>
				
			
Blir:
Banan
Frukt
Exotisk
Gurka
Grönsak
Lokal

För att göra tabeller så finns taggen <table> att använda. Som nämnt tidigare så användes tabeles ibland tidigare för att sköta layouten på en sida men det är inte vad den är tänkt för och de nuvarande taggarna är bättre att använda. En tabell byggs upp med flera olika taggar men de grundläggande (förutom då <table>) är <tr> för att ange rader och <td> är för varje cell. Det finns också ett attribut för att ange om tabellen skall ha en ram eller inte och detta attribut heter border. Denna skrivs: border="1". De värden den kan ha är "1" eller "" där den sista då betyder ingen visuell ram. Ex:

				
					<table border="1">
						<tr>
							<td>Namn</td>
							<td>Ålder</td>
						</tr>
						<tr>
							<td>David</td>
							<td>28</td>
						</tr>
					</table>
				
			
Skulle se ut så här:
Namn Ålder
David 28

Nu finns det många flera taggar för att förenkla användningen av tabeller. Det finns t.ex. <thead>, <tbody> och <tfoot> som fungerar som taggarna <header>, <body> och <footer> fast bara inom själva tabellen. Det betyder då att alla rader inom <tfoot> hamnar överst i tabellen, <tbody> i mitten och <tfoot> nederst. Det finns också <th> som gör att texten blir centrerad och fetstil och är då till för de celler som har titlar för kolumner. Det finns också <colgroup> och <col> som är till för att underlätta stilsättningen på tabellen. Innan dessa fanns så var man tvungen att återupprepa koden för stil för varje cell men med dessa så kan man sätta still för hela kolumner. En <colgroup> måste skrivas innan andra indelningar såsom <thead>. <col> anger då kolumner inom denna <colgroup> och kan ha attributet span som anger hur många kolumner som den ska sträcka sig. Om man då har två stycken <col> taggar efter varandra och den första har span="2" så gäller den de två första kolumnerna (från vänster) och den andra gäller den tredje kolumnen. Det finns också <caption> som är titeln för hela tabellen. Denna måste anges direkt efter <table> taggen och blir då en text som är centrerad över tabellen. Så om man skulle skriva en större och lite korrektare tabell så kan den se ut så här:

				
					<table border="1">
						<caption>Kurser</caption>
						<colgroup>
							<col span="2" id="course_column">
						</colgroup>
						<thead>
							<tr>
								<th>Namn</th>
								<th>Poäng</th>
							</tr>
						</thead>
						<tfoot>
							<tr>
								<td>Summa</td>
								<td>15p</td>
							</tr>
						</tfoot>
						<tbody>
							<tr>
								<td>Webutveckling - Klientsidan</td>
								<td>7.5p</td>
							</tr>
							<tr>
								<td>Webutveckling - Serversidan</td>
								<td>7.5p</td>
							</tr>
						</tbody>
					</table>
				
			
Kurser
Namn Poäng
Summa 15p
Webutveckling - Klientsidan 7.5p
Webutveckling - Serversidan 7.5p

Notera att <colgroup> och <col> faktiskt inte gör någonting men kan stilsättas via CSS enkelt. För att förbereda detta har <col> fått ett globalt attribut som heter id och som är till för att identifiera en viss tagg. Man kan också använda class som då är till för ungefär samma sak men är tänkt till att användas på flera taggar som skall ha samma stilsättning.s