Hopp til innholdet

cjohansen.no

Semantisk HTML - hvem bryr seg?

I “XHTML er mer enn <div>” skrev jeg litt om de forskjellige rollene XHTML, CSS og Javascript har, og viktigheten av å skille rollene. Å skille rollene mellom disse tre er noe jeg er veldig opptatt av, og en av grunnene til at man bør skrive semantisk HTML. For å se litt på akkurat hvorfor semantisk HTML er så viktig i denne sammenhengen, la oss se på hvordan man går frem for å skille lagene fra hverandre.

Design/CSS

På design-fronten er det første skrittet tatt idet man går bort fra å bruke tabeller til layout. Dette har grensesnittsprogrammerere og designere messet om i en del år allerede, og mange har tatt hintet (men for all del, det er mye å gå på enda, se feks www.stortinget.no, www.oslo.kommune.no, www.vg.no). Når man slutter å bruke tabeller (og annen formatterende markup, feks <font>, <b> osv) er det CSS som gjelder dersom man ønsker å ha et design på nettsidene sine.

Skritt to er dermed å se til at all CSS er samlet i eksterne filer som lenkes inn i HTML-dokumentet. På denne måten kan man også angi for hvilke media man ønsker at stilsettene skal brukes, og dermed også lage forskjellige stilark til forskjellige media - eksempelvis et for utskrift og et for skjerm (den vanligste kombinasjonen).

Oppførsel/Javascript

Et økende antall nettsteder bruker alt fra litt til MYE Javascript for å berike brukeropplevelsen. Skritt en for å skille oppførselen fra strukturen er enkelt å greit å samle all Javascript-kode i eksterne filer og linke disse inn i HTML-dokumentet. Skritt to er å rydde HTML-dokumentet fullstendig for Javascript-kode ved å fjerne “event handlers” (et godt norskt uttrykk her, noen?) Dette legger også grunnlaget for elegant bakoverkompampatibilitet og kompatibilitet med brukere som ikke har aktivert Javascript, eller har nettlesere som ikke støtter koden du har skrevet. (Mer: Unobtrusive Javascript.)

Semantisk HTML

Har du kommet deg gjennom de fire punktene over, er du langt på vei. Hvis du i tillegg har et HTML-dokument som validerer vil nok mange gi seg her og klappe seg selv fornøyd på skuldra. Vi har oppnådd et tydelig skille mellom de tre lagene samtidig som vi ikke har rørt selve HTMLen, og ikke har tenkt på semantikken i markupen.

Så hvorfor skal vi bry oss om å bruke riktige tagger til riktig innhold? Hvorfor skal vi tilstrebe å bruke <h1>-<h6> til overskriftene, hvorfor skal vi bruke et par minutter ekstra på å gi menyen vår et godt “navn” gjennom ID-attributtet, og hvorfor skal vi unngå å bruke <h2> for å få akkurat den font-størrelsen eller å skrive ting som class=”blueBox”?

Hvorfor?

Vi skal bry oss om dette fordi dette er skritt tre på stien til å rense innholdet vårt for design. Å bruke klassenavn som “blueBox” virker som en veldig god ide når man sitter og koder på et design og bestemmer seg for å lage gjenbrukbare komponenter. bluBox er et tydelig navn som sier hva dette er, og du vet hva du får når du tar det i bruk. Fleksibilitet er ofte en av grunnene til at man ender opp med slik klassifikasjon. Publiseringssystemet eller applikasjonen skal gi redaktørene så stor kontroll at man ender opp med elementer som er tett knyttet til designet sitt for å klare kravene.

Dette blir fort et problem allerede under utvikling, når designet en dag forandrer seg slik at de fleste “blueBox”ene du har plutselig er røde bokser. Skjer dette har du enten en ekstrajobb med å navngi alle boksene på nytt, eller et vedlikeholdsproblem. Et annet problem er at HTMLen ikke sier noe som helst om innholdet. Hvis innholdet i vår “blueBox” faktisk er en overskrift kan dette koste oss noen plasseringer i treffet på Google og andre søkemotorer.

Jeg begynte dette innlegget med å prate om skille av roller, og vi har nådd et nivå hvor veldig mange slutter å skille. Dersom man ikke fokuserer på innholdet og strukturen i det når man skriver HTML, VIL man garantert møte på probleme jeg nevner over. Ofte vil man også ende opp med et større navnerom (mange spesifikke navn) og dermed også muligens mer komplisert og repiterende CSS. Motsetningen er et mindre antall unike navn, og å heller benytte seg av kontekst for å implementere designet, tema for et helt annet innlegg.

Blå bokser, semantisk variant

For å ta vår “blueBox” fra tidligere en gang til. Hadde man fokusert på innholdet i disse istedenfor designet der og da ville man kanskje ha kommet frem til noe mer beskrivende som for eksempel “product”, eller “article”. Med disse navnene kan man fortsatt lage blå bokser, og det er ikke noe problem å farge dem røde ved et senere tidspunkt. I tillegg kan man skape et mangfold ved å stile boksene forskjellig etter hvilken tag som bruker navnet (for eksempel <li>, <div>), hierarkiet de står i (under en div med id=”content”, eller div med id=”navigation”) eller annet.

Som en tilleggsbonus er det større sjanser for at automatiske tjenester som leser tjenesten vår kan gjøre noe fornuftig med innholdet ( Google Products vil sannsynligvis sette større pris på boksen/seksjonen “product” enn blokken “blueBox”). Og for å være ærlig: det er da ikke mye mer jobb å tenke ut at noe er et produkt enn å tenke ut at noe er en blå boks er det vel?

Dette innlegget er desverre ekstra utsatt for spam, og inntil jeg har tid til å sette opp noe spambeskyttelse har jeg sett meg nødt til å stenge kommentarer for dette innlegget. Dine innspill er velkommen på de fleste andre innlegg!

Muligens relatert

2006 - 2012 Christian Johansen Creative Commons Lisens