en
, maar die eindtag wordt nogal eens vergeten. Browsers doen normaalgezien hun best om dit soort van inconsistenties zoveel mogelijk te negeren, maar opnieuw doen verschillende browsers dit op verschillende manieren. Om deze redenen is er een standardisatie-beweging op gang gekomen, die tot doel had (en heeft) ervoor te zorgen dat elke geldige html pagina er op elke webbrowser en op elke computer “hetzelfde” uitziet. Hier is een overzicht van de belangrijkste verwezenlijkingen van deze beweging: Jaar 1994Opgepast! Hier is een begintag en dus moet er ook een eindtag komen.
Maar dit mag niet:Opgepast! Hier is een begintag en nu komt er een fout
want het eindtag is te laat! Een correcte webpagina heeft met andere woorden iets weg van Russische babushka poppetjes. 3. Een element kan ook leeg zijn. Dit betekent dat er geen inhoud is en het eindtag dus onmiddellijk op het begintag volgt. Een typisch voorbeeld is de tag , die dient om een afbeelding op een webpagina te plaatsen. Aangezien er hier geen bijhorende tekst is, zou de begintag dus direct moeten gevolgd worden door de sluittag . Hiervoor bestaat een verkorte notatie: op het einde van de begintag wordt direct een slash geplaatst, gevolgd door de punthaak ( />). Men kan dus met andere woorden kiezen tussen: of Beide mogelijkheiden zijn exact hetzelfde. Bij veel tags kan ook extra informatie worden opgegeven waarmee de functionaliteit van een tag vergroot wordt: • Zo’n attribuut bestaat altijd uit een naam en een waarde, van elkaar gescheiden door een gelijkheidsteken =. • Een attribuut wordt altijd in de begintag opgenomen en nooit in de eindtag • Een tag kan meerdere attributen hebben; deze attributen en de tagnaam worden van elkaar gescheiden door middel van een spatie. • Tussen naam en waarde staan geen spaties; de naam wordt in kleine letters geschreven, de waarde tussen dubbele aanhalingstekens. Hier is een voorbeeld van een element met een attribuut: hallo Het element bevat hier dus een attribuut href met als waarde hallo.html. 5De wereld van HTML. Dit is de eerste paragraaf. Vrij kort, maar toch een paragraaf!
En dit is een tweede paragraaf.
Aangezien elk XHTML bestand deze structuur moet hebben, kan het interessant zijn om deze minimale structuur als een sjabloon te gebruiken bij het aanmaken van een nieuwe webpagina. Je kan dit template ook downloaden vanop deze URL: http://www.w3.org/QA/2002/04/valid-dtd-list.html 2.3.1 (blocklevel)
Het beginnen van een nieuwe lijn in XHTML bestand is niet betekenisvol! Elke opeenvolging van witruimte (spaties, tabs, nieuwe lijnen) in een XHTML document wordt door de browser automatisch als ´e´en spatie afgebeeld1 . Het maakt met andere woorden geen enkel verschil of je dit intikt: I’m the ice cream man Honey, I’ll be good to you of dit: I’m the man Honey, good
ice I’ll to
cream be you
Bij het intikken van de tekst moet men zich dus niet bekommeren over de lengte van een lijn en of de volledige lijn wel in het venster van de browser zal passen. De browser zal tijdens de interpretatie van het HTML document zelf de tekst opsplitsen in lijnen in functie van de actuele breedte van het venster van de browser. Natuurlijk hebben nieuwe lijnen, indentaties en lege lijnen wel degelijk hun nut in een XHTML bestand: ze kunnen namelijk de leesbaarheid van het bronbestand verhogen. Als de browser echter het begin van een nieuwe lijn gewoon negeert, hoe kan je dan een stuk tekst opdelen in leesbare alinea’s? Hiervoor dient het paragraaf tag
. Bijvoorbeeld:
Dit is een paragraaf.
Dit is een andere paragraaf.
De webbrowser zal er dan voor zorgen dat deze twee paragrafen duidelijk visueel gescheiden worden, bijvoorbeeld door een witregel ertussen of door het laten inspringen van het eerste woord van een paragraaf. Een belangrijke opmerking: XHTML laat niet toe dat tekst rechtstreeks in het van een document komt. Tekst moet dus altijd verpakt worden in paragrafen met dit tag (of in andere blocklevel elementen zoals lijsten enz.). Meta-tekens. Sommige symbolen hebben een speciale betekenis in XHTML—denk bijvoorbeeld maar aan < en > die gebruikt worden om tags aan te geven. Om een dergelijk symbool letterlijk in de tekst op te nemen, moet er dan ook een kunstgreep worden uitgehaald. Je doet dit met een zogenaamde escape sequence: < > & €
kleiner-dan-teken (less than) groter-dan-teken (greater than) ampersand euroteken
< > & e
Bijkomende escape sequenties zijn nodig voor tekens met accenten, bijvoorbeeld: ö ñ È é 1 Er
een een een een
kleine letter o met een umlaut kleine letter n met een tilde grote letter E met een accent grave kleine letter e met een accent
is ´ e´ en uitzondering bij gepreformatteerde tekst, zie verder.
8
¨o n ˜ ` E ´e
In plaats van de letters o, n of E kunnen natuurlijk ook andere letters gebruikt worden. Een andere veel gebruikte escape sequence is voor een niet brekende spatie: dwz. een spatie die niet mag gebruikt worden om een regel op af te breken. 2.4.7
Commentaar in het bronbestand
In een XHTML document kan commentaar geplaatst worden op de volgende manier: Het uitroepingsteken en de streepjes moeten precies ingetikt worden zoals weergegeven. Deze commentaar, bijv. datum van creatie van de pagina of naam van de creator, is alleen zichtbaar in het bronbestand. De browser negeert volledig deze commentaar: er wordt niets van getoond en het heeft ook geen effect op de manier van afbeelden. Commentaar mag meerdere lijnen omvatten.
2.5 2.5.1
Speciale tekstblokken Horizontale lijnen:
nog binnen het blocklevel tag <pre> geplaatst worden. Het gedeelte: wordt afgebeeld als:
<pre> void main(void) { printf("Hello Ritchie\n"); }
void main(void) { printf("Hello Ritchie\n"); }
Hyperlinks kunnen in <pre> secties gebruikt worden; het gebruik van andere XHTML tags is echter af te raden. 2.5.3
Uitgebreide quotaties met (blocklevel)
Met de tag kunnen lange aanhalingen in een apart blok in de tekst opgenomen worden. De meeste browsers wijzigen de marges voor de quotatie om ze af te zonderen van de rest van de tekst. In het voorbeeld: Het GNU public license begint als volgt:
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it 9
remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
is het resultaat: Het GNU public license begint als volgt: The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. 2.5.4
Geforceerde Line Breaks met
(inline)
Soms is het wenselijk om een lijn tekst te be¨eindigen zonder een nieuwe paragraaf te beginnen. Hiervoor kan het
tag gebruikt worden. Een typisch voorbeeld is het weergeven van een adres: Campus De Nayer J. De Nayerlaan 5 2870 Sint-Katelijne-Waver
De uitvoer is: Campus De Nayer J. De Nayerlaan 5 2870 Sint-Katelijne-Waver
2.6 2.6.1
Links Links met (inline)
De grote kracht van HTML ligt in de mogelijkheid om tekst en/of een beeld te verbinden met een ander document of met een ander deel in hetzelfde document. De browser geeft zo’n hyperlink aan door de tekst in een andere kleur af te beelden of door de tekst te onderlijnen. In het HTML bronbestand wordt hypertext aangegeven met de anchor-tag of anker-tag (): 1. start de anchor met ). Merk op dat een inline element is, en dus binnen een blocklevel element zoals , of blok moet geplaatst worden. Een voorbeeld van een hypertekst referentie in het bestand met naam “BEL.html”: Steden 10
Het woord “Steden” is de hyperlink naar het document met naam “LijstSteden.html”. Dit bestand zit in dezelfde directory als het eerste document. Het is ook mogelijk om een link te leggen naar documenten in andere directories. In dat geval moet de relatieve padnaam vanaf het huidige document naar het gelinkte document gespecificeerd worden. Bijvoorbeeld, een link naar het bestand “LijstRivieren.html” dat zich in de subdirectory “waterwegen” bevindt: Rivieren Zoiets wordt een relatieve link genoemd omdat het pad naar het gelinkte bestand gespecificeerd wordt relatief ten opzichte van de lokatie van het huidige bestand. Een voordeel van relatieve links is dat de documenten beter “overdraagbaar” zijn. Wanneer je in je eigen lokale home-directory een aantal XHTML-documenten maakt die met elkaar gelinkt zijn, kunnen deze gemakkelijk gecopieerd worden naar een directory zodat de server de informatie wereldwijd kan ter beschikking stellen. Verwijzen naar een bestand in een ouderdirectory kan ook: Belgie Men zou zoveel mogelijk relatieve links moeten gebruiken, omdat: • het is gemakkelijker een groep documenten naar een andere lokatie te verplaatsen omdat de relatieve padnamen geldig blijven; • het is effici¨enter voor de verbinding met de server; • er is minder te tikken. Men kan ook een absolute padnaam (de volledige URL) van het bestand gebruiken om de link te leggen. De absolute link kan bijvoorbeeld gebruikt worden wanneer verwezen wordt naar een document dat niet direct gerelateerd is met het actuele document. Bijvoorbeeld om een link op te nemen naar de website van de krant De Standaard: Toffe nieuwsjes De tekst “Toffe nieuwsjes” is een hyperlink naar een document “index.html”dat zich op ´e´en of andere server bevindt. 2.6.2
Links naar specifieke secties
Anchors kunnen ook gebruikt worden om de lezer te sturen naar een specieke sectie in een document in plaats van naar de top van een document. Men spreekt van een named anchor omdat voor de creatie van zo’n link, HTML namen in het document toegevoegd worden. Links tussen secties van verschillende documenten. Veronderstel dat een link nodig is vanuit het document “BEL.html” naar een specifieke sectie in een ander document (“LijstSteden.html”). In het document “BEL.html” wordt de link naar een named anchor opgenomen: Naast verschillende andere dierentuinen is er ook Planckendael. De tekens na het matje (#) vormen een tab in de “LijstSteden.html” file. Deze tab geeft aan de browser aan wat bovenaan in het venster moet afgebeeld worden wanneer de link geactiveerd wordt. In “LijstSteden.html” wordt de named anchor (hier pld) gecre¨eerd: Het dierenpark Planckendael
De eerste lijn in het venster van de browser zal dus zijn de hoofding “Het dierenpark Planckendael”.
11
Links naar specifieke secties in het huidige document. De techniek is dezelfde behalve dat de bestandsnaam weggelaten wordt. Bijvoorbeeld voor een link naar pld vanuit het document “LijstSteden.html” zelf: ...Meer informatie over het dierenpark Planckendael is elders in dit document beschikbaar. Net als voorheen, moet er natuurlijk een tag zijn ingevoegd op de plaats in het document waar de desbetreffende informatie te vinden is. Mailto. Door in de hyperlink het mailto attribuut op te nemen, is het eenvoudig voor de lezer van de web-pagina om e-mail te sturen naar een specifieke persoon. stuur een mailtje
2.7 2.7.1
Prentjes Beelden met (inline)
De meeste browsers kunnen naast tekst ook beelden afbeelden. Beelden naast tekst worden soms ook inline genoemd. Zo’n beeld zit in een apart bestand met een speciaal formaat, bijvoorbeeld X Bitmap (XBM), GIF, of JPEG formaat. Het downloaden van zo’n beeld vraagt extra tijd en kan dus gevoelig het opbouwen van het venster in de browser vertragen. Over het aantal beelden en welke beelden moet dus zorgvuldig nagedacht worden. Om een inline beeld toe te voegen: waarbij beeldnaam de URL is van het bestand met het beeld. De bestandsnaam van de URL moet eindigen op .gif wanneer het formaat GIF is, op .jpeg (of .jpg) voor een JPEG formaat en op .xbm voor een X Bitmap formaat. Naast het attribuut src waarmee dus het bronbestand van de figuur gegeven wordt, is er nog een tweede verplicht attribuut: alt. De waarde van dit attribuut moet een kort stukje tekst zijn, waarmee de functie van de afbeelding wordt samengevat. Gebruikers wiens webbrowser geen afbeeldingen toont (bijvoorbeeld omdat de gebruiker visueel gehandicapt is, of surft in een niet-grafische omgeving), zullen in plaats van het prentje deze tekst te zien krijgen. Naast deze twee verplichte attributen, zijn er ook nog optionele height en width attributen, waarmee je kan aangeven hoeveel plaats voor het beeld moet voorzien worden. Dit kan ofwel gebeuren in absolute termen door het aangeven van een aantal pixels (width="65px" of kortweg width="65"), ofwel in relatieve termen door aan te geven hoeveel procent van de beschikbare ruimte (bv. de breedte van het venster) door de afbeelding moet worden ingenomen (width="50%"). Beelden als hyperlinks. Een inline beeld kan als hyperlink gebruikt worden net zoals tekst: Om aan te geven dat het prentje een klikbare hyperlink is, zullen de meeste browsers een extra (blauwe) rand rond de figuur tekenen. Wanneer deze extra rand toch niet gewenst is, kan CSS (zie later) gebruikt worden om deze te onderdrukken.
12
Een imagemap. In de vorige paragraaf bespraken we hoe een hele afbeelding als hyperlink gebruikt kan worden. Het is echter ook mogelijk om slechts een deel van een afbeelding als link te gebruiken, of om verschillende delen van een afbeelding verschillende links te laten activeren. Dit gebeurt met een zogenaamde imagemap. Binnen de imagemap zijn verschillende gebieden afgebakend op basis van een map die aangegeven wordt door het usemap attribuut. De map zelf wordt bijvoorbeeld in een paragraaf in de body van de HTML-pagina gedefinieerd met de <map> tag. Deze tag heeft een attribuut, name, zodat in een img-tag naar de map kan verwezen worden. Daarnaast moet ook een id attribuut gegeven worden. De inhoud van het map element, dwz. wat er tussen de <map> en tags staat, bestaat uit een lijst van verschillende gebieden, die gedefinieerd worden met de <area> tag. Een gebied kan rechthoekig, veelhoekig of cirkelvormig zijn. Dit wordt aangegeven door het attribuut shape van dit area tag. De mogelijke waardes van shape zijn: • Met shape="rect" wordt een rechthoek gemaakt, waarbij de co¨ordinaten van het linkerbovenen het rechteronderhoekpunt gegeven moeten worden. • Met shape="poly" wordt een veelhoek gemaakt, waarbij de co¨ordinaten van de verschillende hoekpunten allemaal moeten worden opgesomd. • Met shape="circ" wordt een cirkel gemaakt, waarbij het co¨ordinaat van het middelpunt en de lengte van de straal gespecificeerd moeten worden. • Met shape="default"wordt, tot slot, het gebied aangeduid dat bestaat uit alle stukjes van de figuur die niet behoren tot een andere vorm. Alle co¨ordinaten zijn relatief ten opzichte van het (0, 0) co¨ordinaat van de figuur, die overkomt met de linkerbovenkant. Hier is een voorbeeld: <map name="auto" id="auto"> <area shape="rect" coords="1,2,100,99" href="beeld.html" alt="Links" /> <area shape="poly" coords="110,2,150,299,300,299,190,120,110,2" href="pre.html" alt="Midden" /> <area shape="circle" coords="320,100,120" href="tekst.html" alt="Rechts" /> <area shape="default" href="kleur.html" alt="Rest" />
Imagemap
Deze imagemap ziet er als volgt uit:
13
Als de gebruiker op gebied 1 klikt, wordt hij naar de pagina “beeld.html” gebracht; als hij op gebied 2 klikt, komt hij op “pre.html”; als hij op gebied 3 klikt op “tekst.html”; en als hij gelijk waar anders klikt op de figuur, komt hij op “kleur.html”. Externe beelden, geluiden, en animaties. Om het downloaden van de hoofdtekst niet te veel te vertragen, kan gebruik gemaakt worden van external images. Het beeld wordt dan pas getoond wanneer de gebruiker een link op een woord of op een kleinere inline versie van het beeldje activeert. Om een referentie naar een extern beeld op te nemen: klik hier om het beeld te zien Je kan ook een kleiner prentje gebruiken als een link naar een grotere prent: De gebruiker ziet “KleinBeeld.gif”; door erop te clicken wordt het “Grootbeeld.gif” bestand geopend en getoond. Dezelfde syntax kan gebruikt worden voor links naar externe animaties en geluiden. Het enige verschil is de extensie bij de bestandsnaam: gewone tekst GIF beeld X Bitmap beeld PostScript file AU sound file QuickTime movie
.txt .gif .xbm .ps .au .mov
HTML document TIFF beeld JPEG beeld AIFF sound file WAV sound file MPEG movie
Bijvoorbeeld een filmpje QuickTime movie.
2.8
.html .tiff .jpg of .jpeg .aiff .wav .mpeg of .mpg specificeert een link naar een
Speciale woorden
Om de formattering (manier van tonen) van individuele woorden of zinnen aan te geven, voorziet HTML twee types: een logische stijl en een fysische stijl. De logische stijl werkt op basis van de betekenis die de auteur wil overbrengen. De fysische stijl geeft aan hoe de woorden moeten getoond worden: : vette (bold ) tekst; : schuine (italic) tekst; : vaste-breedte font (typewriter) tekst. De teken formattering tags zijn normaal niet additief. Je zou kunnen verwachten dat een koekoek bold-italic tekst zou produceren. Bij sommige browsers zal dit gaan, bij andere niet. Deze fysische stijl tags geven niet de betekenis van de tekst aan, maar bepalen alleen maar de opmaak. Een alternatief is om logische stijltags te gebruiken, waarmee je zegt wat iets is, en de voorstellingswijze laat kiezen door de webbrowser (of deze zelf oplegt dmv. CSS). : definitie van een woord, gewoonlijk cursief. <em> : benadrukken van een woord, gewoonlijk cursief. : titels van boeken, films, enz., gewoonlijk cursief. (Kiekeboe: Witter dan wit). : computer code, getoond in een vaste-breedte font. : user keyboard entry, gewoonlijk in vaste breedte font. <samp> : voor een rij literal tekens, getoond in een vaste-breedte font (Not owner). <strong> : sterke benadrukking, gewoonlijk in vet (Dit is een examenvraag!). 14
: voor een variable, waarbij de variable door specifieke informatie moet vervangen worden; gewoonlijk cursief. Het voordeel van een logische stijl is flexibiliteit. De auteur geeft dmv em aan dat iets moet benadrukt worden. Verschillende soorten browsers gaan deze logische stijl elk op hun eigen manier interpreteren. De een zal bold gebruiken, een ander italics. Eventueel is de manier van voorstellen zelfs in te stellen door de gebruiker-lezer. Deze kan bepalen dat alles aangeduid met de em tag in het oranje moet getoond worden. Er zijn echter browsers die niet alle logische stijlen herkennen. Wanneer een tag niet herkend wordt, wordt deze gewoon genegeerd. Dus de tekst wordt in een gewone font getoond en zal dus niet specifiek opvallen. Daarnaast zijn er nog twee logische tags die de tekst opdelen in logische structuren. Door gebruik van CSS kan men dan bepaalde opmaak-, stijl- of andere kenmerken aan de omsloten tekst meegegeven worden. : kan bestaan uit meerdere alinea’s; tekst die met omgeven is, wordt als block level element weergegeven: er wordt een witruimte voor en achter dit blok ingevoegd. <span> : om een inline level element te markeren binnen eventueel dezelfde regel; er wordt dus geen witruimte boven en onder <span> geplaatst.
2.9 2.9.1
Lijsten en tabellen Lijsten
XHTML ondersteunt ongenummerde, genummerde, en definitie lijsten. Zo’n lijst is zelf een blocklevel element en kan in XHTML dus niet binnen een ander blocklevel element zoals geplaatst worden. Een uitzondering hierop is dat een lijst wel binnen een andere lijst mag voorkomen. Het is echter niet aan te raden om lijsten teveel te nesten, aangezien dat de leesbaarheid vaak niet ten goede komt. Ongenummerde lijsten. 1. Start met een open-lijst
(unnumbered list) tag. 2. Gebruik een list-item - tag met daarna de item-tekst, gevolgd door een sluitend
tag. 3. Sluit de volledige lijst af met een sluit-lijst
tag. Een voorbeeld van een lijst met drie items: * appelen - appelen
* kersen - kersen
* peren - peren
Een item kan meerdere paragrafen bevatten. Elke nieuwe paragraaf wordt met een tag aangegeven. Genummerde lijsten. Een genummerde lijst (of ordered list) gelijkt erg op een ongenummerde lijst: er wordt gebruik gemaakt van
in plaats van . De verschillende items worden aangeduid met het - tag.
- sinaasappel
1. sinaasappel - perzik
2. perzik - kiwi
3. kiwi
15
Geneste lijsten. Lijsten kunnen genest worden: - Steden in Vlaams-Brabant:
- Diest
- Leuven
- Aarschot
- Twee Limburgse steden:
- Hasselt
- Sint-Truiden
* Steden in Vlaams-Brabant: 1. Diest 2. Leuven 3. Aarschot * Twee Limburgse steden: 1. Hasselt 2. Sint-Truiden
Definitie lijsten. Een definitie lijst () bevat alternerend een definition term (- ) en een definition definition (
- ). Web browsers formatteren meestal de definitie op een nieuwe lijn en met indentatie. Een voorbeeld van een definitie lijst:
- PCC
- PCC, het internationaal centrum voor product certificering, is gevestigd op de campus van campus De Nayer.
- Congo musuem
- Het Congo museum (of hoe het ook heet) is gevestigd in een mooie omgeving in de buurt van Tervuren.
De output zal iets zijn in de aard van PCC PCC, het internationaal centrum voor product certificering, is gevestigd op de campus van het De Nayer instituut, een vestiging van de Hogeschool voor Wetenschap en Kwaliteit. Congo museum Het Congo museum (of hoe het ook heet) is gevestigd in een mooie omgeving in de buurt van Tervuren. De - en
- elementen kunnen meerdere paragrafen bevatten (mbv.
paragraaf tags). 2.9.2
Tabellen
Een tabel heeft hoofdingen om aan te geven wat de rijen en kolommen bevatten, rijen voor informatie en cellen voor elk item. In de volgende tabel bevat de eerste rij de hoofding informatie, elke volgende rij geeft uitleg over een XHTML tabel tag, en elke cel bevat een paarsgewijze tag of de uitleg over de functie van de tag.
16
Tabel Elementen Element Beschrijving
...
definitie van een tabel in XHTML. ... definitie van de captatie voor de titel. ... specificatie van een tabelrij. ... definitie van een tabel hoofding cel. ... definitie van een tabel data cel. Tabel: een overzicht van de tags voor het maken van tabellen. Het algemene formaat voor een tabel: definition --> definition -->
definition -->
first row, first cell contents first row, last cell contents last row, first cell contents last row, last cell contents
De en
tags omvatten de volledige tabel definitie. Het eerste item binnen de tabel is de caption; deze is wel optioneel. Dan kunnen een willekeurig aantal rijen gedefinieerd worden dmv. de en tags. In een rij kan men een willekeurig aantal cellen maken mbv. ... of ... tags. In feite wordt elke rij van een tabel onafhankelijk van de rijen erboven en eronder geformatteerd. Soms is het nuttig om een bepaalde cel te kunnen uitsmeren over meerdere rijen of kolommen. Hiervoor kunnen de attributen colspan="n" en rowspan="n" gebruikt worden, waarbij n het aantal te omspannen kolommen/rijen is. Bijvoorbeeld, de volgende tabel:
kan gegenereerd worden met deze XHTML: Artiest Liedje Album Duurtijd Leonard Cohen 17
The Future 6:43 Waiting for the Miracle The Future 7:43 Be For Real 4:32 Liedjes
Tabellen werden ook veel gebruikt voor het opmaken van complete webpagina’s. Dit is echter reeds verouderd. CSS (zie volgend hoofdstuk) biedt meer en structureel betere oplossingen om pagina’s op te maken.
2.10
Opmerkingen
HTML pagina’s moeten in bepaalde directories “ge¨ınstalleerd” worden zodat de server ze kan vinden en doorsturen naar een browser. Meestal is er ´e´en globale directory voorzien; de plaats ervan wordt bepaald door de webmaster. Een voorbeeld is: /usr/local/httpd/htdocs Daarnaast kan iedere gebruiker een eigen verzameling webpagina’s opbouwen in de public_html in zijn eigen homedirectory. De basispagina (homepage) van waaruit links naar andere pagina’s gelegd worden, heeft best de naam index.html. Zo’n homepage is in een browser aan te spreken met de URL http://host.domein/~loginnaam Wanneer een pagina in de browser geladen is, kan het HTML bronbestand geraadpleegd worden: selecteer View Source (of iets gelijkaardigs) in het “View” menu van de browser. Enkele mogelijke (schoonheids)fouten: • Geen overlappende tags: This is an example of overlapping HTML tags. • Geen HTML tags in een anchor: My heading
Wat wel toegelaten is: My heading
• HTML tags plaatsen in een element van een lijst kan eigenaardige resultaten geven bij sommige browsers: Een grote hoofding
Een wat kleinere hoofding
Wat wel kan is:
18
- Een element in het vet
- Een italic item
• Statische pagina’s die tijdsgevoelige data bevatten, moeten op tijd aangepast worden. • Er bestaan verschillende browsers. Niet alle browsers tonen eenzelfde webpagina op identieke manier. Invoer. De bronbestanden met data en HTML tags moeten op ´e´en of andere manier gemaakt worden. Dit kan met een gewone teksteditor. Het voordeel is dat je een goed inzicht krijgt in de structuur van een document en een goede kennis van de verschillende beschikbare html-tags. Een andere mogelijkheid is een specifieke html-editor te gebruiken. Validatie. Om na te gaan of een pagina aan alle regels voldoet, kan zo’n pagina gevalideerd worden. Het W3C heeft een valideringsservice op validator.w3.org. De Validation Markup Service controleert HTML- en XHTML-documenten op correctheid. Fouten worden gemeld en toegelicht. Als de pagina aan de eisen voldoet, krijgt men een link naar het predikaat Valid XHTML 1.0. Specifieke CSS validering kan gebeuren op jigsaw.w3.org/css-validator. Een lokale valideringsservice (zowel XHTML als CSS) is te vinden op http://validator.denayer.wenk.be Een uitgebreide handleiding over HTML kan gevonden worden op http://www.handleidinghtml.nl. Kwaliteit: de vijf geboden van een sterke website: 1. Het laden mag niet te lang duren. Gebruik animatie als het niet anders kan. 2. Gebruik niet altijd de laatste snufjes. Klanten zijn er niet altijd klaar voor. Bied alternatieven. 3. Hou je website up-to-date en pas hem regelmatig aan. 4. Bied inhoud. Tellertjes, gastboeken, chatpagina’s, webcams en zo zijn allemaal best leuk, maar als de site niets aan inhoud te bieden heeft, blijven de bezoekers op den duur ook weg. 5. Blijf consistent in je aanpak. De grafische verpakking, de navigatie, e.d. mogen niet te veel verschillen doorheen je site.
19
3 3.1
Cascading style sheets Verantwoording
HTML is in 1990 ontwikkeld om hypertext documenten te maken, welke op verschillende platforms toegankelijk zijn. Het doel was het op een goede manier ontsluiten van informatie. Bij de weergave van de documenten ging het niet om het bieden van een mooie, door de auteur geheel vastgelegde lay-out. Wel zouden de verschillende elementen waaruit HTML is opgebouwd, structuur aan een document moeten geven, bijvoorbeeld door vast te leggen dat het om blokken tekst gaat, om koppen van verschillende zwaarte, om paragrafen, geciteerde tekst en adresgegevens. HTML elementen kunnen ook bepalen dat tekst met nadruk wordt weergeven (cursief of vet), of als computercode, door middel van de elementen voor logische tekstopmaak. In de wetenschappelijke wereld, waarin HTML in eerste instantie vooral werd gebruikt, voldeed de genoemde wijze van presenteren uitstekend. Met de toegenomen verbreding in het gebruik van Internet ontstond bij webauteurs echter de behoefte aan meer mogelijkheden bij de opmaak van documenten. Op deze behoefte is door de ontwikkelaars van browsers ingespeeld door het introduceren van nieuwe elementen en attributen. Voorbeelden zijn de elementen center en font en attributen zoals size, color en bgcolor. De verstrengeling van structuur en presentatie kent niet alleen voordelen. Zeker de browserspecifieke elementen en attributen, maar ook het gebruik van de andere mogelijkheden voor de presentatie hebben vaak tot gevolg dat een document niet meer in elke browser en op elk platform goed te bekijken is. Als oplossing voor deze problemen zijn style sheets ge¨ıntroduceerd. De achterliggende gedachte is de scheiding tussen structuur en presentatie: HTML moet zoals oorspronkelijk bedoeld weer zorgen voor de structuur van het document, de presentatie wordt bepaald met behulp van style sheets. Daarbij is het idee dat style sheets niet alleen gebruikt worden als vervanging van huidige opmaakmogelijkheden, maar veel meer gaan bieden. Dat moet dan bovendien op een flexibele en makkelijk beheersbare manier. Een style sheet is een verzameling stijlregels, die bepalen hoe elementen in een document door de browser weergegeven moeten worden. De stijlregels kunnen bijvoorbeeld betrekking hebben op het lettertype, de lettergrootte, de kleur van de tekst, de achtergrondkleur en de uitlijning, maar ook op het inspringen en de plaats in het browservenster. De stijlregels worden gedefinieerd met behulp van een speciale taal. Een voorbeeld is Cascading Style Sheets (CSS). Style sheets kunnen op verschillende manieren aan de elementen in een HTML-document gekoppeld worden: een inline stijl, een stijlblok en een extern stijlblad. Hiervoor kunnen onder meer de volgende elementen gebruikt worden: style, meta en link. HTML is helemaal niet ontwikkeld voor vormgeving, wel voor het structureren van tekst. Maar om tegemoet te komen aan de wensen van webbouwers om hulpmiddelen aan te reiken voor een aantrekkelijke vormgeving, zijn er verschillende HTML-tags ingevoerd die helemaal niets met tekststructurering te maken hebben. Een voorbeeld is font waarmee verschillende lettertypes, -groottes en kleuren aan koppen en alinea’s kan gegeven worden. Maar dit resulteert meestal in webpagina’s die onnodig groot zijn, zodat de laadtijd ook langer is. Daarnaast is er een probleem bij het onderhoud van webpagina’s wanneer men bijvoorbeeld beslist om het uiterlijke van een website van enige omvang aan te passen. Een tweede grote vergissing is gebeurd bij het gebruik van onbedoelde mogelijkheden van tabellen voor het cre¨eren van een mooie layout. Met tabellen is het mogelijk om tekst en afbeeldingen op webpagina’s behoorlijk nauwkeurig te positioneren. Het resultaat is wel dat een pagina uit een heleboel tabellen bestaat met daarin weer andere tabellen. Dit nesten van tabellen kan een aantal niveaus diep gaan om een zo precies mogelijke layout te verkrijgen. Gevolg is minder leesbare HTML-code en een grotere kans op fouten. Met CSS kan van elk element op een webpagina bepaald worden hoe het er uitziet en waar het moet staan. Probleem is wel dat elke browserfabrikant een eigen wijze heeft om stijlregels te interpreteren. Goede CSS-ondersteuning wordt geboden door Firefox en Opera. Internet Explorer daarentegen scoort niet erg hoog op het criterium standards compliant. 20
CSS 1 dateert van 1996 en bevat de meeste eigenschappen voor lettertype, kleur, achtergrond en tekst. Ook eigenschappen voor marges, padding, randen en lijstopmaak zijn voorzien. Dus, HTML-uitbreidingen zoals en kunnen vermeden worden. Dank zij de toevoeging van eigenschappen voor positionering en zichtbaarheid van elementen zorgde CSS 2.0 in 1998 voor een ommekeer in webontwerp. Daarnaast zijn ondermeer mediatypes ge¨ıntroduceerd zodat verschillende stijlen voor verschillende media (scherm of printer) kunnen ingesteld worden. De toekomst is CSS 3 met als belangrijkste kenmerk de modulaire opbouw. Er zullen modules zijn voor randen, positionering en kleur, voor presentatieniveaus en gebruikersinterface.
3.2
Stijlen
Met CSS beschrijf je de stijl waarin bepaalde XHTML elementen moeten worden afgebeeld. Een dergelijke beschrijving bestaat uit ´e´en of meer declaraties van een bepaalde eigenschap van het element. Een declaratie bestaat uit een eigenschap en een waarde voor deze eigenschap die van elkaar gescheiden worden door een dubbelpunt (:). Elke declaratie wordt afgesloten met een puntkomma (;). Bijvoorbeeld, de volgende stijl background-color: silver; color: white; font-family: verdana, arial; specifieert dat als achtergrondkleur lichtgrijs gebruikt wordt, dat de tekstkleur wit is en dat het lettertype Verdana gebruikt wordt of het alternatieve lettertype Arial als Verdana niet beschikbaar is op de betreffende computer.
3.3
Stijlen koppelen aan elementen
Het is natuurlijk niet voldoende om enkel maar een stijl te beschrijven: je moet ook zeggen welke delen van de webpagina in die stijl moeten worden weergegeven. Dit kan door een CSS stijl te koppelen aan XHTML elementen. Hiervoor zijn er drie mogelijkheden: • Inline: de stijl wordt op ´e´en enkel element toegepast; • Stijlblok: de stijl kan binnen hetzelfde XHTML bestand op meerdere plaatsen gebruikt worden; • Extern stijlblad: de stijl kan ook door verschillende XHTML bestanden herbruikt worden. We bespreken nu kort deze drie opties. 3.3.1
Inline stijl
Wanneer een stijl slechts een enkele keer in een document wordt toegepast, kan men gebruik maken van een inline stijl. Je doet dat door het style attribuut toe te voegen aan het element, waarvan je de opmaak van de ingesloten inhoud wilt bepalen. Als waarde van het style attribuut neem je de stijldeclaratie op, waarin de gewenste stijl is vastgelegd: <element style="stijldeclaratie"> In het volgende voorbeeld wordt met een inline stijl vastgelegd, dat de tekst ingesloten door het betreffende h1 element in rood moet worden weergegeven. De titel
Wanneer in een document gebruik gemaakt wordt van inline stijlen, dan moet aangegeven worden welke style sheet taal gebruikt wordt. Dat doe je door het meta element in de head van het document te plaatsen met de attributen http-equiv en content. Voor Cascading Style Sheets moet de volgende code opgenomen worden: 21
<meta http-equiv="content-style-type" content="text/css" /> Omdat met deze methode alleen maar (verouderde) tags en opmaakattributen vervangen worden door CSS-eigenschappen, scoort deze methode niet goed op het vlak van elegante code en eenvoudig onderhoud. De opmaak staat nog steeds in de HTML-pagina: het document wordt niet compacter en voor wijzigingen moet nog steeds het hele document doorworsteld worden. Het is dus best om zo weinig mogelijk gebruik te maken van inline stijlen. 3.3.2
Stijlblok
Wanneer een stijl vaker gebruikt wordt en/of voor meer elementen, maar wel binnen ´e´en document, kan een stijlblok geplaatst worden in de head van dat document. Dit maakt het voor de auteur een stuk eenvoudiger wijzigingen aan te brengen in een eenmaal vastgelegde stijl, of nieuwe stijlen te defini¨eren. In plaats van elke keer dat een element in een document gebruikt wordt een inline stijl te moeten wijzigen of toevoegen, hoeft de aanpassing slechts ´e´en keer in het stijlblok te worden aangebracht. Hiervoor wordt gebruik gemaakt van het style element. Aan het style element wordt minimaal het type attribuut toegevoegd, dat het Internet Media (MIME) type definieert van het bestand waarnaar verwezen wordt. Voor Cascading Style Sheets is dat "text/css". Het style element mag een onbeperkt aantal malen opgenomen worden in een document. Een stijlblok heeft de volgende opbouw: <style type="text/css"> stijlregels De stijlregels in het stijlblok zijn bij Cascading Style Sheets opgebouwd volgens het selectormechanisme; dwz. dat een stijlregel hier uit twee onderdelen bestaat: selector : bepaalt op welke elementen de regel van toepassing is. stijldeclaratie : bevat de stijl waarin deze elementen moeten worden weergegeven. De eenvoudigste soort selector is een selector waarmee alle voorkomens van een bepaalde XHTML tag geselecteerd worden. Een stijlregel wordt dan als volgt opgeschreven: tag
{
stijldeclaratie
}
Hier is een voorbeeld: <style type="text/css">
Een browser die het style element niet kent, zou de inhoud moeten negeren. Bij oudere browsers is dat niet het geval en bestaat de kans dat de stijlregels als normale tekst worden weergegeven. Daarom kunnen bij Cascading Style Sheets de stijlregels in HTML-commentaar () geplaatst worden. CSS zelf kent ook commentaar: alles wat tussen /* ... */ staat. Ingewikkeldere mogelijkheden worden later nog besproken.
22
3.4
Extern stijlblad
Een extern stijlblad is een document, waarin stijlen zijn beschreven waarvan in ´e´en of meer andere documenten gebruik gemaakt kan worden. De verwijzing vanuit een document naar een stijlblad gebeurt met behulp van het link element, dat wordt opgenomen in de head van het document. Wanneer de auteur iets aan een gebruikte stijl wil wijzigen, hoeft de wijziging niet in elk document afzonderlijk, maar slechts op ´e´en plaats in het stijlblad te worden aangebracht. Aan het link element worden in ieder geval de attributen href, rel en type toegevoegd. Het href attribuut specificeert welk stijlblad geopend moet worden; met het rel attribuut wordt aangegeven, dat het bij het gerelateerde bestand gaat om een stylesheet. Het type attribuut definieert het Internet Media (MIME) type van het bestand waarnaar verwezen wordt. Voor Cascading Style Sheets is dat "text/css". Het LINK element mag een onbeperkt aantal malen opgenomen worden in een document. Een extern stijlblad wordt bijvoorbeeld als volgt opgeroepen: ... Een stijlblad bevat geen HTML-code (zelfs geen <style>-tag), maar uitsluitend stijlregels. Bij Cascading Style Sheets zijn deze stijlregels opgebouwd volgens het selector-mechanisme, zoals hierboven beschreven is. Bij Cascading Style Sheets heeft de naam van het stijlblad de extensie "css". Het stijlblad stijl.css kan er bijvoorbeeld als volgt uitzien: body { font-family: Arial, Helvetica, sans-serif; font-size: 10pt; } p { font-family: "Courier New", Courier, monospace; font-size: 13pt; } Hierin worden stijlkenmerken voor het element body vastgelegd en ook de paragrafen p.
3.5
CLASS en ID
In de vorige sectie hebben we gezien hoe je een stijlregel kan maken die toegepast wordt op alle voorkomens van een bepaald tag (bijvoorbeeld op alle paragrafen, alle titels van niveau 1, enzovoort). Daarnaast is het echter ook mogelijk om in een stijlblok of stijlblad ook stijlregels op te nemen die alleen in specifieke situaties toegepast moeten worden. Dit kan door middel van de attributen class en id van dat element. Elk XHTML element kan attributen class en id krijgen: <element class="klassenaam"> <element id="id-waarde"> Het verschil tussen beiden is: • Een id is een unieke naam voor dat specifieke element. Binnen eenzelfde XHTML pagina mag een id dus geen twee keer voorkomen. Bovendien mag elk specifiek element ook maar hoogstens ´e´en id krijgen. • Een class is een naam voor een verzameling van specifieke elementeen. Dezelfde class mag dus meermaals voorkomen in dezelfde XHTML pagina en bovendien mag eenzelfde element ook tot meerdere classen behoren. In dit laatste geval worden de namen van deze klassen gescheiden door een spatie.
23
Mag Mag NIET bla
bla
bla
bla
bla
bla
bla
bla
In CSS stijlregels kan je dat als volgt refereren naar het element met een bepaalde id of naar de elementen van een bepaalde klasse: XHTML <element id="id"> <element class="cl">
CSS element#id element.cl
Hiermee kunnen we nu bijvoorbeeld het volgende doen: p.koeken { color: red; } p.schoppen { color: black; } p#schoppen_twee { font-size: 2pt; } Het is ook mogelijk om een stijl toe te passen op alle elementen van een bepaalde klasse, onafhankelijk van hun tag. Dit kan zo: .klassenaam { stijldeclaratie } #id-waarde { stijldeclaratie } In het volgende voorbeeld zijn in een stijlblok de klassenaam "groen" en de id-waarde abc123 opgenomen: <style type="text/css"> .groen { color: green; } #abc123 { color: blue; } Van elk element, waaraan het class attribuut met de klassenaam "groen" is toegevoegd, is de kleur van de tekst groen: Groene titel
bold en groen Van het enkele voorkomen van het element, waaraan het id attribuut met de id-waarde "abc123" is toegevoegd, is de kleur van de tekst blauw: Tekst die in het blauw zal getoond worden
3.6
Pseudo-elementen en pseudo-klassen
Dit zijn speciale selectors om speciale effecten toe te passen op de eerste lijn van een alinea of een hyperlink. Pseudo-elementen zijn bedoeld om delen van een document bereikbaar te maken die niet kunnen benaderd worden als element of klasse. :first-line :first-letter :before :after
is van toepassing op de eerste lijn van een alinea be¨ınvloedt de eerste letter van een alinea plaatst content voor de inhoud van het element zelf plaatst content na de inhoud van het element zelf
Om bijvoorbeeld de eerste letter van elke paragraaf wat groter te laten verschijnen: p:first-letter {
font-size: large ; }
24
Pseudo-klassen spreken karakteristieken van elementen aan, anders dan de naam, een attribuut of de inhoud. Pseudo-klassen kunnen dynamisch zijn: een element kan een pseudo-klasse verkrijgen of kwijtraken terwijl een gebruiker met het document bezig is. :first-child :link :visited :hover :active :focus
:lang
3.7
een element dat het eerste kind van een ander element is hyperlinks die nog niet bezocht zijn bezochte hyperlinks de aanwijzer bevindt zich boven het element (dynamisch) van toepassing op een element dat door de gebruiker geactiveerd wordt, bijv. het moment tussen klikken en loslaten van de muisknop van toepassing op elementen die de focus hebben en daardoor toetsaanslagen en andere vormen van tekstinvoer accepteren, bijv. een fomulierveld van toepassing op elementen waarvan het taalattribuut overeenkomt met taal (bijv. nl of us).
DIV en SPAN
Niet altijd hebben stijlregels betrekking op een element. Soms heeft een stijl betrekking op een groter deel van een document, soms juist op een kleiner deel. De elementen div en span kunnen gebruikt worden, wanneer een stijl voor een deel van een document moet worden vastgelegd en dat deel niet tevens door een ander element ingesloten wordt. Het div element is een element op blokniveau, dat weer andere elementen op blokniveau mag bevatten. Het wordt vaak gebruikt om een stijl voor een groter deel van een document vast te leggen. Het span element mag alleen inline inhoud en inline elementen bevatten en zal daardoor in het algemeen betrekking hebben op een beperkt deel van een document. Voor het toevoegen van de stijl aan het div of het span element kan gebruik gemaakt worden van de attributen style, class en id. Een voorbeeld met inline stijlen: Een h2 hoofding
Deze <span style="color: blue">blauwe tekst is ingesloten door het p
element.
Een voorbeeld met een ingesloten stijlblok: <style type="text/css"> div.box { border: solid; border-width: thin; width: 100%;} De volledige tekst met eventueel een aantal HTML tags, zoals links of paragrafen, is omsloten met een kader.
3.8
Erfelijke eigenschappen
Elementen kunnen eigenschappen erven van het bovenliggende element: een kindelement neemt de waarde van een bepaalde eigenschap over van het ouderelement. Volgende eigenschappen zijn erfelijk:
25
text-transform text-align text-indent
caption-side direction list-style
quotes color font
empty-cells white-space line-height
letter-spacing word-spacing visibility
Het hoofdelement is het hoofdelement of root. Dit element omsluit , dat op zijn beurt weer een aantal elementen omsluit. ... body Hoofding
p h1 div een alinea met <em>nadruk
- peer
em ul - kers
li De waarde inherit komt voor bij veel eigenschappen met als betekenis dat de waarde van het ouderelement moet ge¨erfd worden. Eigenschappen die niet standaard worden ge¨erfd, kunnen zo toch worden overgenomen.
3.9 3.9.1
Belangrijkste opmaakeigenschapen Lettertypes
font-family : met mogelijke waarden een lettertypenaam, een generiek lettertype of inherit. De CSS-specificatie kent vijf generieke lettertypen: serif, sans-serif, cursive, fantasy en monospace. Deze resulteren in een door het systeem gedefinieerd lettertype. Met de lettertypenaam kan je zelf heel specifiek zijn. Indien de naam uit meerdere woorden bestaat, moet deze tussen aanhalingstekens geplaatst worden. Het is verstandig om meerdere alternatieven te geven (gescheiden door komma’s) voor in het geval dat het door u gespecificeerde lettertype niet op het systeem van de gebruiker aanwezig is. Het laatste element in deze lijst is best een generiek lettertype zodat het systeem zelf kan selecteren indien nodig. Voorbeelden van het specificeren van de font-familie: <style type="text/css"> body { font-family: Verdana, sans-serif; } h1,h2 { font-family: Garamond, "Times New Roman", serif; } font-size : om de grootte van het lettertype in te stellen. Mogelijke waarden zijn: een absolute grootte (xx-small, x-small, small, medium, large, x-large, xx-large), een relatieve grootte (smaller, larger), een lengte, een percentage of inherit. line-height : om de regelafstand in te stellen: normal, een nummer, een lengte, een percentage en inherit. Met een nummer (een getal zonder eenheid of percentage) wordt de regelafstand de grootte van het lettertype maal het nummer. Voor een regelafstand gelijk aan anderhalf maal de tekstgrootte: p { line-height: 1.5;}. font-style
met mogelijke waarden normal, italic, oblique en inherit.
font-variant
met mogelijke waarden normal, small-caps (voor kleine hoofdletters) en inherit.
26
font-weight om de vetheid van het lettertype in te stellen: 100 tot 900 (in stappen van 100), normal, bold, bolder, lighter en inherit. verzameleigenschap font met in volgorde font-style, font-variant, font-weight, font-size en font-family. Bijvoorbeeld: p {font: italic small-caps bold 1em verdana,sans-serif;} 3.9.2
Tekst
text-indent text-align text-decoration
inspringen uitlijnen versiering
text-transform letter-spacing word-spacing
hoofdlettergebruik spati¨ering spati¨ering
een lengte, een percentage of inherit left, right, center, justify, inherit underline, overline, line-through, blink, none, inherit capitalize, uppercase, lowercase, none, inherit normal, een lengte, of inherit normal, een lengte, of inherit
Voorbeelden. Inspringen bij het begin van een paragraaf (in plaats van witte ruimte tussen de paragrafen). De em tag in bold italic in plaats van in italic en de strong tag in bold uppercase in plaats van in bold. <style type="text/css"> p { text-indent: 2em; margin-top: 0; margin-bottom: 0; } em { font-style: italic; font-weight: bold; } strong { text-transform: uppercase; font-weight: bold; } 3.9.3
Kleur en achtergrond
color : CSS laat toe om de voorgrondkleur en achtergrondkleur van tekst in te stellen met de eigenschappen color of background-color. De waarde van deze eigenschappen kan op twee verschillende manieren aangeduid worden: met een RGB code of met de naam van een kleur. Een RGB code is een hexadecimaal getal van zes cijfers. De zes cijfers zijn eigenlijk drie twee-cijfer getallen die de hoeveelheid rood, groen of blauw aangeven op basis van de hexadecimale waarde tussen 00 en F F . Kleur wit grijs rood groen blauw geel purper
rood FF A0 FF 00 00 FF FF
groen FF A0 00 FF 00 FF 00
blauw FF A4 00 00 FF 00 FF
Kleur zwart donkergrijs donkerrood donkergroen donkerblauw bruin cyaan
rood 00 80 80 00 00 80 00
groen 00 80 00 80 00 80 FF
blauw 00 80 00 00 80 00 FF
Een hexadecimale waarde wordt altijd voorafgegaan door een #. Bijvoorbeeld: color:#FF0000; Wanneer de paren uit dezelfde waarden bestaan, kan een afgekorte notatie gebruikt worden: #00ff00 kan bijvoorbeeld afgekort worden tot #0f0. Voor sommige basiskleuren kan men ook de naam van de kleur gebruiken in plaats van de zescijfer waarde. Voorbeelden zijn “black”, “red”, “blue”, en “cyan”. Geen enkele waarde van een CSS-eigenschap wordt tussen aanhalingstekens geplaatst, dus een kleurnaam ook niet. Omdat niet alle browsers deze namen begrijpen, is het aan te raden de zes-cijfer RGB waarden te gebruiken.
27
Omwille van de leesbaarheid van de pagina, is het beter niet al te gekke combinaties te gebruiken; bijvoorbeeld een rode tekst op een zwarte achtergrond is niet door iedereen even goed te lezen. Ook de waarde inherit kan gebruikt worden om aan te geven dat een element de waarde van zijn ouder moet overnemen. background-color : de achtergrondkleur van een bepaalde ruimte die niet noodzakelijk gelijk moet zijn aan het volledige document. Het kan evengoed de ruimte rondom een koptekst zijn als een ruimte gedefinieerd met behulp van .... background-image : in plaats van een kleur kan ook een achtergrondbeeld (per element) worden ingesteld. De waarde van de eigenschap is de url van het bestand met de afbeelding of inherit. Standaard wordt de achtergrondafbeelding herhaald. Dit kan aangepast worden met de eigenschap background-repeat met waarden repeat, repeat-x, repeat-y, no-repeat of inherit. Gewoonlijk schuift een achtergrondafbeelding mee met de rest van de pagina: waarde scroll voor de eigenschap background-attachment. Andere waarden zijn fixed en inherit. De plaatsing van de achtergrondafbeelding in het venster kan gedaan worden met background-position. Mogelijke waarden zijn left|center|right, top|center|bottom of inherit. Daarnaast kunnen ook twee lengtes of twee percentages als waarde gegeven worden: de eerste waarde is voor de x-as en de tweede voor de y-as. De verschillende eigenschappen kunnen samen gespecificeerd worden met background: eerst de kleur, dan het prentje, de herhaling, het al of niet meeschuiven en tenslotte de positie: p { background: #ffe url("plaat.jpeg") repeat-x fixed right bottom; }
3.10
Het boxmodel
Een webpagina is opgebouwd uit blokken: blokken met koppen, tekst, afbeeldingen, opsommingen en tabellen. Zo’n blok kan alle vertikale ruimte voor zich opeisen, waardoor er niets meer naast kan (bijv. ). Andere blokken vragen alleen ruimte die ze echt nodig hebben (bijv. , zodat er nog andere blokken naast kunnen gezet worden. Elk blok neemt een rechthoekige hoeveelheid ruimte in die bepaald wordt door de inhoud (content), de ruimte rond deze inhoud (padding), een rand (border) en de ruimte rondom de rand (margin). Top TM TB TP Left
Margin(transparent) Border Padding
LM LB LP
Content
RP RB RM Right
BP BB BM Bottom Voor elk element heeft een browser ingebakken instellingen. Door middel van stijlregels kunnen deze aangepast worden. Voor de meeste elementen zijn er vier eigenschappen voorzien (...-top, ...-right, ...-bottom, ...-left) en een verzameleigenschap.
28
Margin is de ruimte aan de buitenkant van een element. Een marge is altijd transparant: je kan er geen kleur of achtergrond aan toevoegen. Er zijn vier marge-eigenschappen: margin-top, margin-right, margin-bottom, margin-left en een verzameleigenschap, margin, waarbij de vier waarden in de volgorde top, right, bottom en left aangegeven worden. Mogelijke waarden zijn: een lengte, een percentage, auto (beschikbare ruimte wordt automatisch ingevuld, handig voor het centreren) en inherit. Een marge kan ook een negatieve waarde hebben. Voorbeelden: het instellen van een linkse en een rechtse marge en het laten uitspringen van de verschillende hoofdingen: <style type="text/css"> body { margin-left: 10%; margin-right: 10%; } h1 { margin-left: -8%; } h2,h3,h4,h5,h6 { margin-left: -4%; } De marge die bij een hoofding is gespecificeerd wordt bij de marge van de body opgeteld zodat in dit geval de hoofding meer naar links komt. Witte ruimte boven en onder bij een hoofding: <style type="text/css"> h2 { margin-top: 8em; margin-bottom: 3em; } Padding is de ruimte tussen de inhoud en de rand. Wanneer er geen rand ingesteld is, is het de ruimte tot aan de marge. Er zijn vier padding-eigenschappen: padding-top, padding-right, padding-bottom, padding-left en een verzameleigenschap, padding. Mogelijke waarden zijn: een lengte, een percentage en inherit. Border is de rand rondom de inhoud en de padding. Zo’n border heeft meerdere eigenschappen: dikte, kleur en stijl. border-top-width border-right-width border-bottom-width border-left-width border-width
border-top-color border-right-color border-bottom-color border-left-color border-color
border-top-style border-right-style border-bottom-style border-left-style border-style
Mogelijke waarden voor width zijn een lengte, thin, medium (standaard), thick en inherit. Mogelijke waarden voor color zijn een kleur, transparent (een doorzichtige en dus onzichtbare rand met een breedte) en inherit. De eigenschap style kan veel waarden hebben: none, solid, dashed, dotted, double, groove, ridge, inset, outset, hidden en inherit. De drie eigenschappen kunnen in ´e´en keer ingesteld worden door in volgorde dikte, stijl en kleur aan te geven: p { border-bottom: thick dashed black; } Voorbeeld: het zetten van een rode lijn langs de linkerkant van sommige paragrafen met tekst (die van de class changed): <style type="text/css"> p.changed { padding-left: 0.2em; border-left: solid; border-top: none; border-color: red;
29
border-right: none; border-bottom: none; border-left-width: thin;
}
Opsomming : een speciaal soort blok. Met behulp van HTML-attributen is de weergave van opsommingen te be¨ınvloeden. Er bestaan hiervoor (elementen waarvan de eigenschap display de waarde list-item heeft) ook enkele CSS-eigenschappen: list-style-type, soort nummering, list-style-image, afbeelding voor het opsommingsteken en list-style-position, lijstmarkering binnen of buiten de opsomming. Daarnaast is er ook de verzameleigenschap list-style. De list-style-type kan volgende waarden hebben: disc, circle, square, lower-roman, upper-roman, decimal, decimal-leading-zero, lower-latin/lower-alpha, upper-latin/upper-alpha en inherit. Met de eigenschap list-style-image kan voor het opsommingsteken een zelfgekozen afbeelding ingesteld worden: ul { list-style-image: url("tup.gif"); } Het opsommingsteken kan in de tekst van de opsomming staan of ernaast. Dit wordt ingesteld met de eigenschap list-style-position: inside, outside (standaard) of inherit.
Tabellen : Bij het opmaken van tabellen kunnen de hoofdingen (
), rijen ( ) en cellen () op de gebruikelijke manier worden opgemaakt, met bijvoorbeeld eigenschappen als border (top, right, bottom, left), padding (top, right, bottom, left), border-spacing, height, width, margin (top, bottom), text-align, vertical-align. De eigenschap table-layout bepaalt hoe de tabel door de browser wordt opgebouwd en weergegeven. Bij de waarde fixed wordt de inhoud genegeerd en wordt de tabel opgebouwd op basis van de breedte van de tabel, de breedte van de kolommen en de ruimte tussen de cellen. Deze methode vraagt minder rekenwerk. Bij de standaardwaarde auto wordt eerst de inhoud van de tabel geanalyseerd en op basis hiervan bepaalt de browser hoe de tabel eruit moet zien om die inhoud erin kwijt te kunnen. Met caption-side wordt aangegeven waar het bijschrift geplaatst wordt: top (standaard) of bottom. De randen van tabelcellen kunnen op twee manieren weergegeven worden: ∗ separated borders model: (standaard) border-collapse: separate, de randen van de tabel en de cellen worden apart weergegeven en zijn dus allemaal zichtbaar; de border-spacing eigenschap bepaalt de ruimte tussen de randen van de cellen en samen met de padding van de tabel ook de ruimte tussen de randen van de tabel en de buitenste cellen; ∗ collapsing borders model: border-collapse: collapse, aangrenzende randen worden samengevoegd en vormen ´e´en geheel. In het separated borders model bepaalt de eigenschap empty-cells of randen en achtergronden van cellen zonder zichtbare inhoud weergegeven worden. Cellen zonder zichtbare inhoud zijn lege cellen of cellen met de visibility eigenschap gelijk aan hidden. De waarde show (standaard) zorgt dat van lege cellen de randen en de achtergronden worden weergegeven. Bij de waarde hide worden randen en achtergronden niet weergegeven.
3.11
Contextgebonden selectors
Bij de contextgebonden selectors wordt de stijl alleen aan een element toegevoegd, wanneer deze een bepaalde samenhang heeft met ´e´en of meer andere elementen. De opbouw is: Element1 Element2 Element3 { stijldeclaratie } De samenhang is dat Element3 een child element moet zijn van Element2, dat op zijn beurt weer een child element moet zijn van Element1. Een voorbeeld van een contextgebonden selector is: em i { color: red; } De tekst in italics wordt alleen in rood weergegeven, wanneer deze onderdeel is van een stuk gemaakt met het em element: <em> contextgebonden selector 30
De samenhang hoeft zich niet te beperken tot element selectors, maar kan ook een combinatie van element en attribuut selectors betreffen. In het volgende voorbeeld wordt de stijl alleen toegepast bij elementen, waaraan via het class attribuut de klassenaam rood is toegevoegd ´en welke ingesloten zijn door het p element p .rood { color: red; } . Patroonvergelijking. In CSS 2.1 is het combineren van selectors uitgebreid met een aantal bijkomende combinators (maar IE6 ondersteunt niet alle mogelijkheden). Dit geeft de mogelijkheid om het effect van stijlregels precies te doseren of omgekeerd, om alles op te maken wat tegengekomen wordt. Een aantal mogelijkheden worden in volgende tabel aangegeven: * E E F E > F E + F E[flip] E[flip="flop"] E[flip~="flop"] E#flip
3.12
elk element (universele selector) elk element E elk element F dat afstamt van element E elk element F dat een kind is van element E elk element F dat direct vooraf wordt gegaan door element E elk element E waarvan het attribuut flip is ingesteld elk element E waarvan de waarde van het attribuut flip gelijk is aan flop elk element E waarvan de waarde van het attribuut flip een door spaties gescheiden lijst is, waarvan er ´e´en precies gelijk is aan flop elk element E waarvan ID gelijk is aan flip
Cascading
In Cascading Style Sheets kunnen met behulp van de @import regel ´e´en of meer externe stijlbladen in een stijlblok ge¨ımporteerd worden. De importregel moet wel voor alle andere stijlregels staan. De opbouw is: <style type="text/css">
-->
De bestemming wordt op dezelfde wijze vastgelegd als bij het href attribuut van het link element. Naast de ge¨ımporteerde stijlbladen kunnen in het stijlblok ook op de gebruikelijke manier stijlregels worden opgenomen, mits deze geplaatst worden na de @import regel. Bijvoorbeeld: <style type="text/css">
-->
Gewone stijlregels hebben prioriteit boven de stijlregels uit een ge¨ımporteerd stijlblad. Indien meerdere stijlbladen ge¨ımporteerd worden en in meerdere van deze stijlbladen de stijl voor een element gedefinieerd wordt, dan wordt de stijlregel uit het laatste ge¨ımporteerde stijlblad aangehouden. Het is dus mogelijk om stijlinformatie uit verschillende bronnen (inline stijlen, ingesloten stijlblokken en externe stijlbladen) te combineren. Het mechanisme dat bepaalt welke stijlregels voorrang krijgen bij het combineren, heet cascading. In het algemeen is de volgorde waarin link en style elementen in de head van een document staan, bepalend: een latere style sheet heeft een hogere prioriteit dan een eerdere style sheet. Daarnaast is bij Cascading Style Sheets de specificiteit belangrijk: hoe meer specifiek een stijlregel is, hoe meer prioriteit deze heeft. Voorbeelden:
body p p { p {
De meer specifieke regel is die met p, dus de kleur is rood. De laatste regel heeft effect, dus de kleur is rood.
{ color: green;} { color: red;} color: green; } color: red; } 31
Voorkeurinstelling. Door het toevoegen van !important aan een declaratie kan de normale cascadevolgorde gewijzigd worden. body { color: green !important; background-color: white !important; } p { color: red; } Deze declaraties hebben tot gevolg dat de stijlspecificaties van body in de volledige pagina zullen gebruikt worden. Alhoewel p meer specifiek is, zal de tekstkleur in een alinea toch groen zijn.
3.13
Plaatsbepaling met CSS
Normaal wordt de inhoud van een HTML-document van boven naar beneden in de browser weergegeven. De volgorde waarin de elementen in de code staan, bepaalt de weergave op het beeldscherm. Bijvoorbeeld, twee tekstkolommen naast elkaar of aan de zijkanten geplaatste navigatiebalken is in pure XHTML onmogelijk. Er is een stroming om complexe weblay-out te realiseren met tabellen door creatief om te gaan met de colspan, rowspan, height en width attributen. Dit is echter tegen de geest van het gescheiden houden van structuur (inhoud) en lay-out (opmaak), want een tabel is een structuurelement. Een deel van CSS is gericht op de plaatsing van inhoud (CSS-P) en kan bij voldoende doorzettingsvermogen aangewend worden om de gewenste layout te realiseren. Er zijn twee belangrijke aspecten. Het visual formatting model bepaalt hoe elementen zich gedragen. Koppen en alinea’s worden normaal onder elkaar geplaatst terwijl hyperlinks en afbeeldingen naast elkaar gezet worden. Het positioneringsschema bepaalt hoe de inhoud op het scherm wordt geplaatst: normaal, zwevend of absoluut. Daarnaast kan gebruik gemaakt worden van lagen (layer) waarbij tekst over een afbeelding kan gelegd worden zonder daarbij de hele afbeelding af te dekken. Een indexwaarde bepaalt in welke volgorde de inhoud op elkaar gelegd wordt. 3.13.1
Visual formatting model
Het boxmodel (zie hoger) behandelt alleen de afmetingen van elementen. Het visual formatting model bepaalt de weergave of het gedrag: elk element maakt nul of meer blokken en elk type blok heeft zijn eigen weergave kenmerken. Er zijn drie types. Een block-box wordt gemaakt door een blokelement, zoals koppen en alinea’s. Het vormt een zelfstandige, rechthoekige ruimte waarin de inhoud wordt weergegeven. Standaard worden blokken onder elkaar geplaatst en elk blok begint tegen de linkermarge. Een inline-box wordt gemaakt door een inline-element, zoals afbeeldingen en links. Verschillende in-line elementen worden naast elkaar weergegeven, althans zolang er ruimte in het venster is. Als een regel vol is, wordt de weergave vervolgd op de volgende regel. Het derde type, run-in-box, wordt door de meeste browsers als een block-box weergegeven, behalve door Opera. Het type van een blok wordt bepaald door de eigenschap display. Als een element zich anders moet gedragen dan normaal kan de waarde van display aangepast worden. Mogelijkheden zijn inline (standaard), block, run-in, list-item (zie hoger). Er is ook een waarde inherit voorzien. Daarnaast is er het speciaal geval inline-block. Het element maakt een block-box, maar deze wordt weergegeven als een inline-box. Zo’n inline-block gedraagt zich als een replaced element: een element waarvan de inhoud wordt vervangen door iets anders. Een voorbeeld is een img-element, waarvan de inhoud wordt vervangen door de afbeelding die zich bevindt op de lokatie van src. Een bijzonder geval is de waarde none. Een element met none als display-waarde wordt niet getoond en er wordt geen ruimte voor gereserveerd. Op zich heeft zo’n element geen nut, maar de waarde van display kan dynamisch gewijzigd worden, bijvoorbeeld door gebruik te maken van de klasse a:hover. Merk op dat de eigenschap visibility een ander doel dient. Naast de standaardwaarde visible en de klassieke waarde inherit zijn er de waarden collapse en hidden. Beiden hebben hetzelfde effect: de inhoud wordt niet getoond maar er wordt wel ruimte voorzien. Er wordt een blok gegenereerd en andere inhoud kan niet op de plaats van het verborgen deel staan. De waarde
32
collapse wordt specifiek gebruikt om in tabellen de inhoud van rijen of kolommen te kunnen verbergen zonder dat de tabel opnieuw opgebouwd hoeft te worden. Toepassing : een navigatiebalk. Zo’n balk (of menu) is eigenlijk een rijtje hyperlinks en kan dus best als een opsomming ( en - ) opgebouwd worden en niet als een tabel of met geneste
Report "Informatietechnologie"
Sign In
Our partners will collect data and use cookies for ad personalization and measurement. Learn how we and our ad partner Google, collect and use data. Agree & close