Oorspronkelijk diende HTML om structuur aan een tekst te geven, maar niet om het uiterlijk ervan vast te leggen. Daarom waren er "tags" (de "commando's" die tussen < en > staan) voor een titel, koppen op diverse niveaus (<H1>, <H2>, <H3>, enz.), alinea's <p>, opsommingen en hyperlinks.
Hoe de tekst er uit moest komen te zien bepaalde de browser, op basis van de structuur en de mogelijkheden van de monitor, maar dat stond niet gespecificeerd.
Later wilden mensen dat toch kunnen, en er kwamen "tags" bij om lettertypen, corpsgrootte, tekstkleur, achtergrondkleur enz. enz. aan te geven. Dat lijkt leuk, maar het heeft vele nadelen:
Met CSS (Cascading Style Sheets) zijn al deze problemen elegant op te lossen.
Met CSS koppel je uiterlijke eigenschappen aan een element
in HTML. Die eigenschappen kunnen met weinig of veel details
beschreven zijn, maar het gebeurt maar één keer, niet steeds
opnieuw. Het beste is de standaard HTML-elementen te gebruiken
(bijvoorbeeld body, h1, h2, p, strong), dan hoeft er in de inhoud
(HTML) niets speciaals te staan over het uiterlijk (CSS).
Voorbeeld:
Stel ik wil voor al mijn pagina's een fraai font. Ik kies er
een uit, en zet in het CSS-bestand waarnaar ik verwijs:
body { font-family: Trebuchet MS, Arial, sans-serif; margin: +32pt; }
Ik vind namelijk Trebuchet wel een aardig font, smaken verschillen.
Maar het is een Windows-font, andere systemen kennen het waarschijnlijk
niet. Het kan ook wel zijn dat alleen de wat nieuwere Windows-versies
het hebben, en oudere niet. Dat weet ik niet precies, en dat wil
ik ook niet weten, en niet hoeven weten. Ik kan dat doen door ook
alternatieve
fonts op te geven. Als de browser het eerste font niet kent mag het het
tweede gebruiken, en anders het derde. Arial is ook schreefloos, en
bestaat op alle Windows-versies vanaf 3.1.
Sans-serif (letterlijk: schreefloos)
is op alle systemen in een of andere vorm wel geïmplementeerd.
Mijn pagina's zullen er nu dus niet op alle systemen
precies
hetzelfde uitzien, maar wel ongeveer zoals ik het
bedoeld heb.
Ik heb ook nog een linker- en rechtermarge opgegeven, uitgedrukt in
points (pt).
Doordat ik het font opgeef voor de body geldt het
meteen ook voor p, h1, h2, li, strong enz. Ik kan ook wel voor elk
van die elementen een apart lettertype opgeven, maar dat hoeft niet.
Als ik hetzelfde wil, hoef ik het niet te herhalen. Dat spaart ruimte,
complexiteit, en interpreteertijd voor de browser.
Microsoft®
Word®
doet het vaak heel anders, veel
onhandiger.
Sommige elementen hebben nog nadere onderverdelingen, bijvoorbeeld
het Anchor van de HREF, dat kent
link (een nog niet bezochte hypertekst-verwijzing),
visited (een al wel bezochte verwijzing),
active (de link waar de cursor op staat, meestal te
verplaatsen met toetsen Tab en Shift-Tab),
hover (de link maar de muisaanwijzer boven hangt,
nog zonder te klikken).
Om hiervoor allemaal verschillende
kleuren
te hebben, kan bijvoorbeeld dit in het stijlblad (style-sheet) staan:
a:link {color: #66ffbb; } a:visited {color: #ff8800; } a:active {color: #5577ff; } a:hover {color: #5577ff; }
De kleuren kunnen ook overigens ook gewoon met namen worden aangeduid.
Eerder zagen we hoe je een stukje tekst vet
of cursief kunt maken of kan onderstrepen om er de nadruk op te
leggen. Nadeel is dat de vorm van de benadrukking al vastligt, en
bij wijziging van die benadrukkingsstijl moet je alles weer door.
Het is daarom beter alleen vast te leggen dat
iets benadrukt moet worden, maar niet hoe, want
dat staat dan apart in CSS, geldig voor alle pagina's die van die
definitie gebruik maken.
HTML heeft daarvoor de aanwijzing <strong>, door tekst
daartussen te plaatsen krijgt het een bijzonder uiterlijk. Ik
deed dat hierboven met de woorden <strong>dat</strong> en
<strong>hoe</strong>.
Het is niet nodig hiervoor iets in CSS te zetten, omdat de browser zelf
al een manier heeft om <strong> te laten zien, bijvoorbeeld
vette tekst. Maar wil je iets anders, bijvoorbeeld cursief en een kleur,
neem je in het CSS-stijlblad op:
strong { font-style: italic; color : red; }
Het is ook mogelijk eigen subklassen te definiëren. Ik deed dat hierboven om de opgesomde nadelen meer op te laten vallen. Ik maakte een subklasse disadv (van disadvantage, nadeel) van het standaard li (list-item). In de HTML schrijf ik dan in plaats van <li> : <li class="disadv">, waardoor die punten van de opsomming tot die klasse gaan behoren, en het bijbehorende uiterlijk aannemen. Dat uiterlijk definieer ik in CSS, als volgt:
li.disadv { color : green; font-style: italic; }
De subklasse disadv hoort dan speciaal bij <li>. Maar ik kan ook een algemene subklasse vastleggen:
.disadv { color : green; font-style: italic; }
Dan kan ik ook midden in een tekst een nadeel
extra laten uitkomen, dus het in de HTML zo aan te geven:
<span class="disadv">nadeel</span>
Met CSS is nog veel meer mogelijk. Zie voor
uitgebreide uitleg
w3.org
en de specificaties.
Hans de Jong geeft deze
uitleg
in het Nederlands.
Verder is het boek "Webdesign in de praktijk" van Peter Kentie
(2003
of
2005)
aan te raden, en niet alleen voor wie meer over CSS wil weten.
Zie ook deze toelichtende notitie.
Zelf ben ik pas CSS gaan gebruiken na de uitleg (geschreven door
Edwin Martin) in zijn boek doorgenomen te hebben, nadat eerdere pogingen
met alleen de specs strandden doordat ik er niets van begreep.
Voor deze uitleg heb gebruik ik het stijlblad "../html_en/style.css". Merk op dat er maar één stijlblad is voor alle talen, reden dat ik hem in een andere directory heb geplaatst dan de html-bestanden voor het Nederlands. Ik wil namelijk hetzelfde uiterlijk voor de Engelse en de Nederlandse versie, zodat er een gemeenschappelijk stijlblad kan zijn.
Het is mogelijk een basisstijlblad op te zetten, die voor veel pagina's
geldt. Aanvullende, gespecialiseerde eigenschappen voor kleinere groepen
pagina's kunnen dan in andere stijlbladen staan. Die kunnen het algemene
weer oproepen, als volgt:
@import url("basis.css");