In de voorgaande hoofdstukken zagen we dat we documenten al een behoorlijke structuur konden meegeven enkel via de XHTML 1.0. De combinatie XHTML en CSS (Cascading Style Sheets) is uitstekend om de lay-out van het document nog meer tot haar recht te doen komen. Nu behandelen we CSS 2.1 en later in dit werk gaan we in op XML (eXtensible Markup Language).
Een CSS document kan men bovendien op meerdere XHTML pagina's toepassen. Hierdoor kunnen we met een minimum aan werk een maximum aan resultaat bereiken. Bovendien is het later vrij gemakkelijk om het uitzicht van een volledige website te wijzigen en dit enkel en alleen door enkele CSS code regeltjes te wijzigen. Als dit niet veelbelovend is!
CSS maakt optimaal gebruik van de boomstructuur van een XHTML document. Dit is de reden waarom de combinatie XHTML en CSS zo bijzonder krachtig is. Als je document goed gestructureerd is, kan je met een minimum aan CSS regels het grotendeels vormgeven. Waarom? In een XHTML document is er overerving (inheritance) tussen parents en childs. De childs erven de eigenschappen van de parents. We illustreren dit aan de hand van een voorbeeld.
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en">
<head>
<title>De boomstructuur</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>
<body>
<h1>De boomstructuur van een XHTML
document</h1>
<p>Als we het hebben over
<em>XHTML</em> hebben we
steeds de boomstructuur in gedachten. Wenst u meer te weten over deze
structuur klik dan op <a
href="boompagina.htm">boomstructuur</a>.</p>
<p>Hieronder sommen we de belangrijkste zaken
op</p>
<ul>
<li>Het ontstaan van XHTML</li>
<li>Wat is een boomstructuur?</li>
<li>Hoe maken we een boomstructuur.</li>
<li>Voor concrete voorbeelden verwijzen we u naar
<a
href="allebomen.htm">alles over de
boomstructuur</a>.</li>
</ul>
<p>Dit was het dan. Beetje weinig?
Sorry!</p>
</body>
</html>
Het eerste element uit onze boomstructuur is <html>, daarom heten we dit het root-element.
<head> en <body> zijn de children (kinderen) van <html>.
<title> is het enige child element van <head>.
De grootste child is <body> Dit zal in zowat alle XHTML bestanden zo zijn.
De tag <body> heeft als children: <h1>, <p>, <p>, <ul> en nog eens <p>
De eerste alinea <p> heeft op haar beurt 2 children: <em> en <a>.
De ongeordende lijst <ul> heeft 4 children: 4 X <li>
De laatste <li> heeft op haar beurt een child: <a>
De 2de en de laatst alinea hebben geen children.
Het kunnen omzetten van een XHTML document in een correcte boomstructuur vormt de basis voor het correct kunnen invoegen van CSS regels. Indien u voorgaande hoofdstukken (hoofdstukken 1 t.e.m. 5) goed begrepen hebt, moet u in staat zijn om aan de hand van de XHTML code zelf deze boomstructuur op te stellen. CSS 2.1 is ontworpen door het W3C en zij hebben ook de regels van CSS 2.1 op hun site geplaatst. U vindt deze regels in een afzonderlijke map van hun site namelijk op http://www.w3.org/TR/CSS21/
We maken in CSS steeds gebruik van een selector. Dit is een referentie die we nodig hebben om een brug te slaan tussen XHTML en CSS. Vanuit de XHTML code wordt immers verwezen naar deze referentie (voorbeelden verderop).
Soms is de selector een XHTML element (vb'n: h1, p, a, ul, ol, li, ...) maar we kunnen ook zelf een nieuwe naam verzinnen.
De selector is heel belangrijk en de Nederlandstalige vakliteratuur is hierover helaas niet altijd eenduidig. Daarom verwijs ik tevens naar het gezaghebbend W3C: http://www.w3.org/TR/CSS21/selector.html
selector + accolade openen {
Instructieregel 1;
Instructieregel 2;
Instructieregel 3;
Enz.
}
Deze algemene notatie is een minimum waarbij het aantal instructieregels kan herleid worden tot 1. Het is tevens belangrijk dat elke instructieregel eindigt met een puntkomma (;). Als we dit niet doen dan wordt de instructieregel niet uitgevoerd. Natuurlijk mogen we ook de verwijzing in ons XHTML document niet vergeten.
Zoals de naam het zelf zegt is dit de meest algemene selector. Deze kunnen we op elk element toepassen.
Syntax: asterisk (*) + punt (.) + selector + accolade openen {
Instructieregel 1;
Instructieregel 2;
Instructieregel 3;
Enz.
}
Na de selector openen we de accolade en geven 1 of meer instructieregels. De instructieregels worden telkens op het eind afgesloten met een puntkomma (;) Om de universal sector te gebruiken mogen we zelfs de asterisk weglaten.
* .groot{
font-size: 18pt;
}
.groot{
font-size: 18pt;
}
Overal waar we in ons XHTML element verwijzen naar groot, wordt het element en de daaronder liggende elementen weergegeven met een puntgrootte van 18!
Dit is de meest elementaire selector zowel door haar vorm als door haar betekenis. Ze beïnvloedt alle children van het element. Zoals we eerder zagen aan de hand van de boomstructuur is dit ook heel normaal. Deze selector wordt ook type selector genoemd.
h1{color: red;} (in het CSS document)
<h1>Rode tekst</h1> (in het XHTML document)
Als we bovenstaande selector (punt 2.2) gebruiken in combinatie met meer dan 1 element spreken we van een grouping selector. Ook deze beïnvloed alle children van de betreffende elementen. Hieruit blijkt alweer hoe belangrijk de boomstructuur is.
vb. h1, h2, h3{color: red;}
Het Engelse woord descendant betekent afstammend of afdalend. De descendant selector slaat op het afstammend element binnen de boomstructuur van het XHTML document.
h1 { color: red }
em { color: red }
h1 em { color: blue }
<h1>This headline is <em>very</em> important</h1>
<p>Is it<em> realy</em> important?</p>
Very staat in het blauw omdat het binnen de tag em staat en tevens ondergeschikt is aan de tag h1. Het woord realy komt in het rood daar het ondergeschikt is aan de tag p. We hebben hiervoor geen descendant selector maar een element selector nl. em { color: red }
Bij een child selector is een bepaald element de child van een ander element. We verduidelijken dit met een voorbeeld.
body > p { line-height: 1.3 }
<h1>Boek over XHTML, CSS en XML</h1>
<h3>Hoofdstuk 6: Opmaak verzorgen met CSS</h3>
<p>In de voorgaande hoofdstukken zagen we dat we documenten al een behoorlijke structuur konden meegeven enkel via de XHTML 1.0.</p>
De rijhoogte binnen de alinea wordt aangepast aan een hoogte van 1.3. Dit is het geval omdat de alinea (p) rechtstreeks de child is van body.
Adjacent sibling selector heeft de volgende syntax: E1 + E2, waarbij E2 het onderwerp is van de selector.
h1 + h2 { margin-top: -5mm }
<h1>Boek over XHTML, CSS en XML</h1>
<h2>Hoofdstuk 1: Basisbegrippen in XHTML</h2>
Tussen de kopjes h1 en h2 zal er 5mm minder afstand zijn door invoeging van bovenstaande CSS regel. De betekenis van margin zullen we echter pas volledig kunnen begrijpen na het bestuderen van het box model (verderop in dit werk).
De selector uit de generische class (alternatief voor universal selector nl. in 2.1) kunnen we koppelen aan een bepaald element. We bekijken de voorbeelden hieronder.
p.rijhoogte{
line-height: 1.3;
}
div.rand{
border: solid black 2px;
}
<div class="rand"><p>Daar we geregeld aanpassingen zullen moeten doen aan onze webpagina (hier: testB.htm) is het belangrijk dat we het document kunnen oproepen en laten verschijnen in onze teksteditor. Wij roepen ze opnieuw op in onze rudimentaire teksteditor (vb. kladblok) </p></div>
In de XHTML code dienen we bij het desbetreffende element te verwijzen naar de klasse. Dit doen we met class="naam v/d klasse". De instructie zoals border vinden we achteraan in appendix 5.
Met de id selector verbinden we de CSS code aan maximaal één element.
#speciaal{
font-weight: bolder;
font-variant: small-caps;
}
<div id="speciaal"><p>Daar we geregeld aanpassingen zullen moeten doen aan onze webpagina (hier: testB.htm) is het belangrijk dat we het document kunnen oproepen en laten verschijnen in onze teksteditor. Wij roepen ze opnieuw op in onze rudimentaire teksteditor (vb. kladblok) </p></div>
In de XHTML code gebruiken we opnieuw div maar nu in combinatie met id en niet in combinatie met class.
Het gebruik van de gepaste selector zal het mogelijk maken om ons document een fraai uitzicht te geven met beperkte code. Natuurlijk zullen we ook steeds de inheritance in gedachte moeten houden. We hebben immers een boomstructuur in ons document.
Door het toevoegen van het element div kunnen we deze boomstructuur wijzigen. Rond de lijst (ul) en de titel erboven willen we een rand (schematische voorstelling, vooraan hoofdstuk) . De paragraaf <p> en de ongeordende lijst <ul> staan op hetzelfde niveau in de boomstructuur (schematische voorstelling, vooraan hoofdstuk). Indien ze niet naast maar ondergeschikt waren aan elkaar zou de zaak veel eenvoudiger zijn. In dat geval zouden we aan het bovenste element een rand toekennen en het daaronder liggende element zou dit dan automatisch erven.
Deze elementen staan niet ondergeschikt aan elkaar maar los van elkaar. Door gebruik te maken van div (staat voor division (E) en dit betekent afdeling (NL)) kunnen we gemakkelijk de boomstructuur wijzigen. Onze nieuwe code wordt:
.rand{
border: solid black 2px;
}
<div class="rand"><p>Hieronder sommen we de
belangrijkste zaken op:</p>
<ul>
<li>Het ontstaan van XHTML</li>
<li>Wat is een boomstructuur?</li>
<li>Hoe maken we een boomstructuur.</li>
<li>Voor concrete voorbeelden verwijzen we u naar
<a href="allebomen.htm">alles over de
boomstructuur</a>.</li>
</ul>
</div>
Door het toevoegen van het de code <div class="rand"> en </div> verandert onze boomstructuur integraal. Het gevraagde kader komt inderdaad op de juiste plaats.
Onervaren programmeurs zullen in dit geval vaak een tabel gebruiken omdat ze deze instructie niet of onvoldoende kennen. Het gebruik van een tabel is echter veel te omslachtig. We raden dan ook aan om de tabel enkel te gebruiken als we aan de gebruiker ook effectief een tabel willen tonen.
Niet alle tags binnen een XHTML-document behoren tot dezelfde soort. We kunnen ze opdelen in de replaced en non-replaced elements.
Replaced elements
Bij replaced elements word enkel naar het element verwezen vanuit de (X)HTML code.
<img src=”afbeelding.gif” alt='''' />
Non-placed elements
In tegenstelling tot de replaced elements bevindt het element zich rechtstreeks in het XHTML document.
<p>En maar praten, praten, praten ...</p>
© Marc Vandenbussche d.d. 26 augustus 2008