Skip links en inhoudsopgave

Home

Menu met knoppen met ronde rand, die aangeeft of link al bezocht is of nog niet

Korte omschrijving

Onder het plaatje zit een link. Als de link is bezocht, verandert de volgorde van de kleuren in het kader rondom het plaatje. Door de gebruikte kleuren in het kader wordt diepte gesuggereerd.

Alles op deze site kan vrij worden gebruikt. Je gebruikt het wel op eigen risico: als er ergens fouten in zitten, ben ik daar niet verantwoordelijk voor en ook niet voor eventueel daardoor aangerichte schade in welke vorm dan ook. Een link naar http://www.css-voorbeelden.nl is niet verplicht, maar wordt wel gewaardeerd.

Opmerkingen

Links in deze uitleg, vooral links naar andere sites, kunnen verouderd zijn. Op de pagina met links vind je steeds de meest recente links.

Alles op deze site is gemaakt op een systeem met Linux. Daarbij is vooral gebruik gemaakt van Quanta Plus, GIMP en Firefox met extensies. De pdf-bestanden zijn gemaakt met LibreOffice.

Iets gevonden waar je wat aan hebt? Mooi. Als je je waardering wilt uiten, maak dan een donatie over aan War Child Nederland, een organisatie die kinderen uit oorlogsgebieden helpt hun trauma's te verwerken. Of - nog beter - wordt donateur:
War Child Nederland

Achterliggend idee

De thumbnail is een gewone afbeelding, die in een link wordt gezet.

Om de afbeelding staat een kader. Dit kader is eigenlijk helemaal geen kader, dat lijkt maar zo. In werkelijkheid is het een serie achtergrondkleuren, waarbij elke kleur in een eigen span is gezet.

De spans worden als blok-element weergegeven, zodat eigenschappen als breedte kunnen worden gebruikt. Hierdoor kan ik elke span als een vlak met een gekleurde achtergrond weergeven. Door elke span (en dus de achtergrond) steeds 1 px kleiner te maken, wordt steeds maar 'n heel klein stukje van elke achtergrond zichtbaar. Door de achtergrondkleur steeds iets te veranderen, lijkt er een soort ronding te ontstaan.

Alleen buitenste acht 'lijntjes' zichtbaar
De buitenste 8 lijntjes van de rechter thumbnail. Het op de afbeelding hiernaast zichtbare vlak wordt nu afgedekt door de daarbinnen liggende spans, zodat er nog maar 'n stukje van 1 px breed zichtbaar is: het 'lijntje'.

Als de link is bezocht, wordt de volgorde van de kleuren omgedraaid.

In een eerdere versie van dit voorbeeld verdween het kadertje als de link was bezocht en werd de thumb iets groter weergegeven. Maar dit werkt niet meer.

Omdat het kinderlijk eenvoudig was met behulp van JavaScript en css te achterhalen, welke sites iemand had bezocht, kunnen bij de pseudo-class :visited alleen nog color, background-color, border-color en outline-color worden gebruikt. Daarnaast kan de kleur transparent niet worden gebruikt. Ook hsla() en rgba() kunnen niet worden gebruikt.

Dat beperkt de mogelijkheden voor opmaak van een bezochte link dus nogal. Maar deze beperkingen zijn volkomen terecht, omdat het om een joekel van een beveiligingslek gaat. Ook de standaard voor css is aan deze beperkingen aangepast.

De constructie met een verdwijnend kader werkt dus stomweg niet meer. Op het moment dat ik dit schrijf, is dat alleen in Safari en Google Chrome zo. Maar Firefox heeft al aangekondigd dezelfde beperkingen in te voeren, en de andere browsers zullen ongetwijfeld volgen.

Beschrijving van code en css

De code die te maken heeft met de basis van dit voorbeeld is rood gekleurd. Alle voor dit voorbeeld niet-essentiële code is bruin.

Deze uitleg hoort bij het voorbeeld dat in de download zit. Het voorbeeld uit de download verschilt iets van het voorbeeld hier op de site. In de download ontbreken bijvoorbeeld de witte vlakken met de links. Ook in de kopregels zit vaak wat verschil. Daarnaast kunnen er nog andere (meestal kleine) verschillen zijn.

Als je deze uitleg leest naast de broncode van het voorbeeld op de site, kan het dus bijvoorbeeld zijn dat 'n h1 uit de css bij 'n <h2> uit de html hoort. Maar het gaat niet om hele grote, fundamentele afwijkingen.

Als je dit lastig vindt, downloadt dan de hele handel (ga terug naar het voorbeeld en kies daar voor downloaden). In de download zit 'n voorbeeld dat wel naadloos aansluit op de uitleg in de download.

<!DOCTYPE html> <html lang="nl">

Een document moet met een doctype beginnen om weergaveverschillen tussen browsers te voorkomen. Zonder doctype is de kans op verschillende (en soms volkomen verkeerde) weergave tussen verschillende browsers heel erg groot.

Geldige doctypes vind je op www.w3.org/QA/2002/04/valid-dtd-list.html.

Gebruik het volledige doctype, inclusief de url, anders werkt het niet goed.

Het hier gebruikte doctype is dat van html 5. Dit kan al veilig worden gebruikt.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Zorgt dat de browser letters met accenten en dergelijke goed kan weergeven.

utf-8 is de beste charset (tekenset), omdat deze alle talen van de wereld (en nog heel veel andere extra tekens) bestrijkt, maar toch niet meer ruimte inneemt voor de code dan nodig is. Als je utf-8 gebruikt, hoef je veel minder entiteiten (&auml; en dergelijke) te gebruiken, maar kun je bijvoorbeeld gewoon ä gebruiken.

Deze regel moet zo hoog mogelijk komen te staan, als eerste regel binnen de head, omdat hij anders door sommige browsers niet wordt gelezen.

<link rel="stylesheet" type="text/css" href="../../css/naam-van-stylesheet.css">

Deze regel heeft in dit voorbeeldbestand geen enkel nut. Normaal genomen is het een verwijzing naar een extern stylesheet, waarin de style staat. In dit voorbeeld verwijst de href naar een niet bestaand bestand.

De bedoeling is dat je bovenstaande regels aanpast voor je eigen bestand. De hele style, die onder deze regels in de <head> staat, wordt dan in het externe bestand geplaatst waar de href naar verwijst. In dat bestand komt de style precies zo te staan zoals die nu in de <head> staat. Het bestand moet eindigen op .css.

Voordeel van een externe stylesheet is onder andere, dat deze geldig is voor alle pagina's waaraan deze is gelinkt. 'n Verandering in de lay-out hoef je dan maar op één enkele centrale plek te aan te brengen.

In die externe stylesheet zet je alles wat in dit voorbeeld tussen <style type="text/css"> en </style> staat (zonder deze begin- en eindregel).

Deze regel is gewoon 'n link die naar 'n bestand elders verwijst, waar de css in staat. Op de plaats van "../../css/naam-van-stylesheet.css" moet je pad naar en naam van jouw stylesheet invullen.

<style type="text/css">

Voor de duidelijkheid staat de style hier in het bestand zelf, maar het is beter deze in een apart stylesheet te zetten, zoals hierboven beschreven. In dat stylesheet komt alles wat tussen bovenstaande regel en </style> staat.

Technisch gezien is er geen enkel bezwaar om het in die stylesheet te zetten met dezelfde vreselijke lay-out als die ik in dit voorbeeld gebruik. Maar als je dat doet, garandeer ik je hele grote problemen, omdat het volstrekt onoverzichtelijk is. Ik gebruik deze lay-out alleen, omdat het anders veel te veel regels worden.

Voorbeeld van 'n goede lay-out in je css:


	div#header-buiten
	{
	    position: absolute;
	    right: 16px;
	    width: 100%;
	    height: 120px;
	    background: yellow;
	}

	div#header-binnen
	{
	    margin-left: 16px;
	    height: 120px;
	    text-align: center;
	}
body margin: 0; padding: 0;

Slim om te doen vanwege verschillen tussen browsers.

font-family: Arial, Helvetica, sans-serif;

Als Arial is geïnstalleerd op de machine van de bezoeker wordt deze gebruikt, anders Helvetica. Als die ook niet wordt gevonden wordt in ieder geval een schreefloze letter (zonder dwarsstreepjes) gebruikt.

font-size: 110%;

Iets groter dan standaard. 't Zal de leeftijd zijn, maar ik vind de standaardgrootte wat te klein.

Ik gebruik hier % als eenheid, en voor alle andere lettergroottes gebruik ik em. Dat komt door Internet Explorer. Als ik als maateenheid iets als px neem, kunnen gebruikers van Internet Explorer de lettergrootte niet veranderen.

Maar als ik overal em neem als maateenheid, wat dan voor de hand zou liggen, kom ik in de problemen met versies van Internet Explorer ouder dan versie 8. De stappen van de verkleining of vergroting zijn in die browsers zo groot, dat 't gelijk onleesbaar klein of absurd groot is.

Als je nou echter bij body geen em gebruikt (font-size: 1.1em; zou hetzelfde moeten zijn als font-size: 110%;), dan is de lettergrootte in Internet Explorer te veranderen, en in oudere versies dan versie 8 zijn de tussenstappen teruggebracht tot normale grootte.

Dit werkt ook als je als lettergrootte 100% invult. Dat heeft geen enkele invloed op de lettergrootte, behalve dus dat de tussenstappen in oudere versies nu normaal werken.

In Internet Explorer 8 is deze bug eindelijk gerepareerd. Aangezien we waarschijnlijk nog vele jaren met oudere versies dan Internet Explorer 8 zitten opgescheept, zal deze truc ook nog jaren moeten worden toegepast.

Hoewel in dit voorbeeld geen tekst staat, laat ik dit toch staan. De meeste pagina's zullen wel tekst bevatten en het is een uiterst vervelende bug.

color: black;

Tekstkleur zwart.

Hoewel dit de standaardkleur is, geef ik de kleur toch op. Hieronder geef ik een achtergrondkleur op. Sommige mensen hebben zelf de kleur en/of achtergrondkleur veranderd, bijvoorbeeld omdat ze slecht kleuren kunnen onderscheiden. Als ik nu de achtergrondkleur verander, maar niet de tekstkleur, loop ik het risico dat tekstkleur en achtergrondkleur te veel op elkaar gaan lijken.

Door beide op te geven, weet ik redelijk zeker dat achtergrond- en tekstkleur genoeg van elkaar blijven verschillen. Als de gebruiker !important heeft gebruikt, is er nog niets aan de hand, want dan veranderen achtergrond- en tekstkleur geen van beide.

Hoewel in dit voorbeeld geen tekst staat, geef ik toch een tekstkleur op. De meeste pagina's zullen immers wel tekst bevatten, en daarom is het opgeven van achtergrondkleur en tekstkleur beide een goede gewoonte.

background: #ff9;

Achtergrondkleurtje.

ul#knoppen

De ongeordende lijst met id="knoppen". Hierbinnen staat deze hele pagina.

width: 678px;

Deze breedte is alleen nodig om te kunnen centreren op de manier zoals ik gelijk hieronder doe.

margin: 0 auto; padding: 0;

De standaard-instellingen van marge en padding bij een lijst verschillen bij de diverse browsers, dus stel ik ze zelf in.

De padding zet ik op 0.

Bij marge zijn onder en links niet ingevuld, daardoor krijgen die automatisch dezelfde waarde als boven en rechts. Hier staat dus eigenlijk 0 auto 0 auto in de volgorde boven - rechts - onder - links. Boven en onder geen marge, links en rechts auto. Dat betekent hier: evenveel. Oftewel: de lijst en dus de inhoud daarvan staat altijd horizontaal gecentreerd, ongeacht de grootte van het venster van de browser.

Deze manier van horizontaal centreren van een blok-element werkt alleen als het te centreren blok-element een breedte heeft.

list-style: none;

De gebruikelijke balletjes en dergelijke van een <ul> wil ik hier niet.

ul#knoppen li

De lijst-ingangen binnen de ongeordende lijst met id="knoppen".

float: left;

Zet zo hoog mogelijk neer en dan zover mogelijk naar links.

Een <li> is een blok-element en zou dus op een nieuwe regel komen te staan. Door ze naar links te floaten, komen ze naast elkaar te staan op dezelfde regel.

Normaal genomen vult een blok-element de hele breedte van zijn ouder, maar niet als het wordt gefloat. Het krijgt dan automatisch precies genoeg breedte om de inhoud weer te kunnen geven. Die inhoud bestaat hier uit de links met de daarin zittende thumbs, die op deze manier dus tegen elkaar aan komen te staan.

position: relative;

Om kinderen van de <li> te kunnen positioneren ten opzichte van de <li> moet deze zelf een positie hebben, ook al vul ik daar verder niets in.

margin: 20px 80px;

Omdat voor onder en links geen waarde is ingevuld, krijgen die automatisch dezelfde waarde als boven en rechts. Hier staat dus eigenlijk 20px 80px 20px 80px in de volgorde boven - rechts - onder - links.

Links en rechts 80 px marge. Hierdoor komt er wat ruimte tussen linkerkant van het venster van de browser en linkerknop, en tussen de twee knoppen. Omdat links én rechts een marge is, zit er tússen de twee knoppen dus een marge van 2 x 80 px =160 px.

Boven en onder 'n marge van 20 px. Hierdoor ontstaat er wat ruimte tussen knoppen en bovenkant van het venster van de browser. Als de twee knoppen niet naast elkaar op dezelfde regel zouden passen, komen ze onder elkaar te staan. Door deze marge zit er in dat geval ook wat afstand tussen beide knoppen.

Anders dan bij een horizontale marge, worden de verticale marges bij een blok-element over elkaar heen gezet. De grootste marge 'wint' dan. In dit geval zijn de marge aan de bovenkant van de onderste knop en aan de onderkant van de bovenste knop beide 20 px. De marge tussen beide knoppen wordt dus ook 20 px.

a

Alle links. Dat zijn hier alleen de twee links waar de thumbnails in staan.

display: block;

Een <a> is van zichzelf een inline-element. Door er een blok-element van te maken, kan ik eigenschappen als breedte en hoogte gebruiken.

Ik heb hier hoogte en breedte nodig, omdat ik er een outline om wil zetten. De reden daarvan staat bij a:focus.

width: 178px;

Een outline wordt buiten het element waar hij bij hoort, hier de link, gezet.

Binnen de link staat een thumbnail van 138 px breed. Links en rechts van die thumb staat nog een kadertje van 20 px breed. De totale breedte van de inhoud van de link is dus 20 + 138 + 20 = 178 px.

Als ik de link even breed maak als thumbnail en kadertje samen, komt de outline dus niet alleen buiten de link, maar ook buiten thumb en kadertje te staan.

height: 160px;

Precies hetzelfde verhaal als hierboven bij de breedte, maar omdat er alleen aan de bovenkant een kadertje staat, hoeft de link maar 20 px hoger te worden dan de thumb.

a:hover

Als ik over 'n link hover.

cursor: pointer;

Geef het handje weer dat bij een link hoort.

Zonder deze opdracht verschijnt 't handje bij Internet Explorer 7 alleen als je boven de thumb hangt, maar niet als je boven 't kadertje hangt. Andere browsers hebben er geen last van, dus ik zet 't gewoon hier in de algemene css.

a img

Alle afbeeldingen die binnen een link staan. Dat zijn hier alleen de twee thumbs.

position: absolute;

Om de thumbnail goed neer te kunnen zetten. Er wordt gepositioneerd ten opzichte van het eerste ouder-element met een absolute, relative of fixed positie. Dat is hier de <li> waar hij in staat.

Een <img> is een inline-element. Door het absoluut te positioneren, verandert het in een blok-element, maar dat heeft in dit geval verder geen praktisch nut.

left: 21px;

Links van de thumb komt een kader van 20 px breed te staan. Aan de rechterkant van de thumb maak ik daarom 20 px vrij door de thumb 21 px naar rechts te verplaatsen.

top: 21px;

Boven de thumb komt een kader van 20 px hoog te staan. Aan de bovenkant van de thumb maak ik daarom 20 px vrij door de thumb 21 px omlaag te verplaatsen.

border: 0;

Een afbeelding die als link wordt gebruikt, krijgt standaard een rand, maar dat zou hier foeilelijk zijn.

z-index: 10;

Omdat de spans die voor het kadertje zorgen in de html na de <img> staan, zouden deze over de thumb komen te staan. Daarom geef ik de thumb een hogere z-index, zodat deze toch boven de spans komt te staan.

(Het kadertje bestaat voor het oog uit lijntjes van 1 px breed. In werkelijkheid zijn het vlakken met een massieve achtergrond. De thumb zou dus volledig worden afgedekt door de spans als ik geen z-index gebruik.)

Een z-index werkt alleen als het element een absolute, relatieve of fixed positie heeft. Hierboven heb ik de afbeelding absoluut gepositioneerd, dus hier werkt het.

a span

De spans die binnen een link staan. Dat zijn hier alleen de spans die voor het kadertje zorgen.

Binnen de link staat een hele serie spans. Elke span zorgt voor één 'lijntje' van 1 px breed. Een aantal instellingen is voor alle spans hetzelfde, die geef ik hier in een keer op. De afwijkende instellingen voor elke span apart geef ik later op.

display: block;

Een span is van zichzelf een inline-element. Door er een blok-element van te maken. kan ik eigenschappen als breedte gebruiken.

position: relative;

Om de spans, en dus de lijntjes van het kader, op de juiste plaats te kunnen zetten.

top: 1px;

De spans worden weergegeven als blok-element. Ze zijn volledig leeg: er staat geen tekst of wat dan ook in. Ze worden in elkaar genest, in totaal 20 spans die binnen elkaar staan.

Hieronder geef ik hoogte en breedte op voor elke span. De buitenste span is het grootste, naar binnen toe worden ze steeds 1 px lager en 2 px smaller.

Er staan dus 20 blok-elementen in elkaar genest. En omdat die allemaal leeg zijn, komen die allemaal op dezelfde hoogte en breedte te staan: de linkerbovenhoek van de link waar ze in staan. Allemaal over elkaar heen dus.

Hierdoor zie je aan de linker- en bovenkant alleen de binnenste span, en dus ook alleen de achtergrondkleur van de binnenste span. Op de afbeelding links hieronder vallen alle lichte kleuren van het kader aan de bovenkant weg, alleen de donkere achtergrondkleur van de binnenste span is zichtbaar.

Als ik nu elke span 1 px omlaag schuif met top: 1px, zie ik van elke span 1 px van de achtergrondkleur. En als ik die kleuren laat verlopen, zie ik dus verlopende strookjes van 1 px breed. Voor het oog een rond kadertje.

Met een veel te hoge top van 10 px
Met top: 10px; De spans, en dus de achtergrondkleuren, staan nu te ver omlaag. Hierdoor worden 'lijntjes' 10 px hoog.

Bovenstaande afbeeldingen verduidelijken dit hopelijk. De rechterafbeelding heeft een veel te hoge top: 10 px. Hierdoor zie je beter wat er feitelijk gebeurt: elk 'lijntje' is hier 10 px hoog. En is ook duidelijker te zien dat de 'lijntjes' in feite massieve achtergrondkleuren zijn, die over elkaar heen staan.

left: 1px;

Voor de breedte geldt ongeveer hetzelfde verhaal als wat hierboven voor de hoogte staat. Op de afbeelding links hieronder zie je weer alleen de donkere achtergrondkleur van de binnenste span, alle lichtere kleuren aan de linkerkant van het kadertje vallen weg.

Als ik nu elke span 1 px naar rechts schuif met left: 1px, zie ik van elke span 1 px van de achtergrondkleur. En als ik die kleuren laat verlopen, zie ik dus verlopende strookjes van 1 px breed. Voor het oog een rond kadertje.

Met een veel te hoge left van 10 px
Met left: 10px; De spans, en dus de achtergrondkleuren, staan nu te ver naar rechts. Hierdoor worden de 'lijntjes' 10 px breed.

Bovenstaande afbeeldingen verduidelijken dit hopelijk. De rechter afbeelding heeft een veel te hoge left: 10 px. Hierdoor zie je beter wat er feitelijk gebeurt. En is ook duidelijker te zien dat de 'lijntjes' in feite massieve achtergrondkleuren zijn, die over elkaar heen staan.

background: black;

Achtergrondkleur.

Elke span krijgt een eigen kleur. Maar de vijf binnenste of buitenste (afhankelijk van de volgorde) spans krijgen dezelfde kleur: zwart. Dit oogt beter. Als ik dat nu hier opgeef, hoef ik bij de vijf spans die als eerste worden genoemd in de css geen achtergrondkleur op te geven. Anders had ik bij die vijf spans elk apart deze kleur moeten opgeven. Dus dit scheelt wat css.

Alleen krijgen álle spans nu dezelfde zwarte achtergrond, niet alleen de vijf binnenste of buitenste. Maar dat maakt niets uit: hieronder geef ik bij de spans die een andere kleur moeten krijgen die kleur apart op.

(Bij de spans die helemaal onderaan in de css staan, moet ik wel de kleur zwart (of #000) opgeven. De span met class="rand-20" bijvoorbeeld heeft hoger in de css de kleur #fff gekregen. Als ik dus niet lager in de css de kleur zwart opgeef, blijft #fff gewoon geldig.)

a .rand-1

De elementen met class="rand-1" binnen een link. Dit zijn de spans die voor het buitenste 'lijntje' zorgen.

Omdat ik hier geen achtergrondkleur opgeef, krijgt deze span de achtergrondkleur die ik heb opgegeven bij de css voor álle spans bij a span.

width: 178px;

De thumbnail is 138 px breed. Als ik links en rechts 20 'lijntjes' van 1 px breed wil hebben, moet ik deze span dus 178 px breed maken.

height: 160px;

De thumbnail is 140 px hoog. Als ik aan de bovenkant 20 'lijntjes' van 1 px hoog wil hebben, moet ik deze span dus 160 px hoog maken.

a .rand-2

De elementen met class="rand-2" binnen een link. Dit zijn de spans die voor het tweede 'lijntje' van buiten zorgen.

Omdat ik hier geen achtergrondkleur opgeef, krijgt deze span de achtergrondkleur die ik heb opgegeven bij de css voor álle spans bij a span.

width: 176px;

De spans staan in elkaar genest. Bij left: 1px; regel ik, dat deze span 1 px van de linkerkant van de span hierbuiten komt te staan. Daardoor blijft er dus aan de linkerkant1 px van de achtergrondkleur van de span hier gelijk buiten zichtbaar.

De span hierbuiten is 178 px breed. Deze span is 2 px smaller. Hij wordt 1 px naar rechts verschoven ten opzichte van de span hierbuiten. Dan houd ik aan de rechterkant precies een opening van 1 px over, waardoor je ook weer de achtergrondkleur van de span hierbuiten ziet: het 'lijntje'.

(Afhankelijk van de volgorde van de kleuren kunnen .rand-1 t/m .rand-5 dezelfde kleur hebben, zwart. In dat geval zijn er dus wel vijf verschillende achtergronden, maar die hebben dezelfde kleur, en dus zie je dan geen verschil.)

height: 159px;

De spans staan in elkaar genest. Bij top: 1px; regel ik, dat deze span 1 px van de bovenkant van de span hierbuiten komt te staan. Verder is het verhaal exact hetzelfde als hier gelijk boven bij de breedte.

Er is één verschil: het kadertje staat alleen aan de bovenkant, niet aan de onderkant. daarom moet deze span maar 1 px lager zijn dan de span hierbuiten.

a .rand-3 {width: 174px; height: 158px;}
a .rand-4 {width: 172px; height: 157px;}
a .rand-5 {width: 170px; height: 156px;}

Zelfde verhaal als hierboven bij a .rand-2, maar met iets andere maten.

a .rand-6 {width: 168px; height: 155px; background: #111;}

t/m

a .rand-20 {width: 140px; height: 141px; background: #fff;}

Steeds weer hetzelfde verhaal als hierboven bij a .rand-2, maar met iets andere maten.

Er is één verschil: bij de css voor álle spans bij a span heb ik als achtergrondkleur zwart opgegeven. Deze spans moeten allemaal een steeds lichtere kleur krijgen, om uiteindelijk met wit (#fff) te eindigen.

a:visited .rand-1 {background: #fff;}

t/m

a:visited .rand-20 {background: #000;}

De elementen met class="rand-1" (t/ m class="rand-20") binnen een bezochte link.

Dit zijn precies dezelfde spans als die hierboven zijn behandeld. Het enige dat wordt veranderd, is de achtergrondkleur. Bij een niet-bezochte link loopt deze van buiten naar binnen van donker naar licht, bij een bezochte link van licht naar donker.

a:focus

Als een link focus heeft.

Veel mensen gebruiken niet de muis, maar de Tab-toets of iets soortgelijks om van link naar link te gaan. Bijvoorbeeld vanwege een handicap, maar ook omdat dat vaak veel sneller werkt dan de muis.

Alle browsers geven via een kadertje om een link aan, welke link focus heeft. Als een link focus heeft en je drukt op Enter, wordt de link gevolgd.

Bij dit voorbeeld geven niet alle browsers duidelijk aan, welke link focus heeft. Bij sommige browsers verdwijnt het kadertje helemaal of gedeeltelijk onder de border. Daarom regel ik het kadertje hier zelf met een outline.

Internet Explorer 7 kent geen outline, maar deze browser geeft wel met een kadertje aan welke link focus heeft, dus dit is geen probleem.

outline: black dotted 3px;

Gestippelde lijn van 3 px dik.

Het voordeel van outline is, dat het geen ruimte inneemt. Als ik een border van 3 px toevoeg, wordt het element 6 px breder en schuiven de buur-elementen op. Bij outline blijven andere elementen gewoon op hun plaats staan, de outline wordt eroverheen gezet.

De code aanpassen aan je eigen ontwerp

Toegankelijkheid en zoekmachines

Toegankelijkheid (accessibility in het Engels) is belangrijk voor bijvoorbeeld blinden die een spraakbrowser gebruiken, of voor motorisch gehandicapte mensen die moeite hebben met het bedienen van een muis. Een spider van een zoekmachine (dat is het programmaatje wat de site indexeert voor de zoekmachine) is te vergelijken met een blinde. Als je je site goed toegankelijk maakt voor gehandicapten, is dat dus gelijk goed voor een hogere plaats in een zoekmachine. Dus als je 't niet uit sociale motieven wilt doen, kun je 't uit egoïstische motieven doen.

(Op die plaats in de zoekmachine heb je maar beperkt invloed. De toegankelijkheid van je site is maar één van de factoren, maar zeker niet onbelangrijk.)

Als je bij het maken van je site al rekening houdt met toegankelijkheid, is dat nauwelijks extra werk. 't Is ongeveer te vergelijken met inbraakbescherming: doe dat bij 'n nieuw huis en 't is nauwelijks extra werk, doe 't bij 'n bestaand huis en 't is al snel 'n enorme klus.

Enkele tips die helpen bij toegankelijkheid:

Getest in

Laatst gecontroleerd op 21 augustus 2011.

Dit voorbeeld is getest in Firefox, Opera, Safari, Google Chrome, Internet Explorer 7, 8 en 9 in de resoluties 800x600, 1024x768 en 1280x1024. Steeds met de laatste versie van die browsers, omdat ik geen zin heb om rekening te houden met mensen die met zwaar verouderde browsers surfen. Dat is trouwens vragen om ellende, want updates van browsers hebben heel vaak met beveiligingsproblemen te maken. In de resoluties 1024x768 en 1280x1024 is ook in- en uitzoomen en een kleinere en grotere letter getest. Er is ingezoomd en vergroot tot zover de browser kan, maar niet verder dan tot 200%. Eventuele problemen staan bij Bekende problemen.

Naast deze 'gewone' browsers is alles ook getest in Lynx, WebbIE en Jaws. Lynx is een browser die alleen tekst laat zien en geen css gebruikt. WebbIE is een browser die gericht is op mensen met een handicap. Jaws is een screenreader, zoals die door blinden wordt gebruikt. Als het voorbeeld in deze drie programma's toegankelijk is, zou het in principe toegankelijk moeten zijn in alle aangepaste browsers en dergelijke En dus ook voor zoekmachines, want een zoekmachine is redelijk vergelijkbaar met een blinde. Eventuele opmerkingen over de toegankelijkheid van dit voorbeeld staan bij Opmerkingen.

Nieuwe browsers test ik pas als ze uit het bèta-stadium zijn, omdat er anders 'n redelijke kans is dat ik 'n bug zit te omzeilen die voor de uiteindelijke versie nog gerepareerd wordt. Dit voorbeeld is alleen getest in de hierboven met name genoemde browsers. Vragen over niet-geteste browsers kan ik niet beantwoorden, en het melden van fouten in niet-geteste browsers heeft ook geen enkel nut. (Melden van fouten, problemen, enz. in wel geteste browsers: graag!)

Wijzigingen

2 januari 2008:

Voor het eerst opgenomen.

20 juli 2008:

In Firefox 3 ontstonden kieren in het kader bij de nieuwe inzoomfunctie. Toen dat werkte, verdween bij Internet Explorer 7 de linkerhelft van het kader bij inzoomen.

Uiteindelijk dus totaal herschreven. In plaats van de serie borders die eerst rondom de thumbnail stond, staat nu achter de thumbnail een serie achtergronden die steeds iets kleiner worden.

Aardige illustratie van het nut van css: in de html is geen komma veranderd, terwijl de css totaal anders is geworden. Als dit dus tweeduizend knoppen waren geweest op 'n grote site, had er maar één bestand aangepast hoeven te worden in plaats van elke aparte pagina.

5 april 2009:

Tekst aangepast aan de nieuw verschenen Internet Explorer 8. De code is hetzelfde gebleven.

20 oktober 2009:

Knoppen ondergebracht in een ongeordende lijst <ul>, omdat een menu in een <ul> beter toegankelijk is.

18 september 2010:

Code herschreven, omdat deze constructie niet meer werkte. Voor de reden zie In een eerdere versie...

Belangrijkste verschil: het kadertje blijft nu altijd staan, het verandert alleen van kleur als de link is bezocht.

Omdat er zoveel moest worden herschreven, heb ik gelijk de hele handleiding herschreven naar hoe ik ze tegenwoordig schrijf. Hoewel het uiterlijk weinig is veranderd, is dus in feite het hele voorbeeld vernieuwd.

Bekende problemen

Internet Explorer 7

Niet alle browsers geven (duidelijk) aan welke link focus heeft. Daarom gebruik ik een outline om dat aan te geven. Internet Explorer 7 kent geen outline.

Maar omdat Internet Explorer 7 wél aangeeft welke link focus heeft, is dit eigenlijk geen echt probleem.

Google Chrome en Safari

Bij zoomen horen de spans (en dus de lijntjes) mee te schuiven, zodat het geleidelijke kleurenverloop blijft bestaan en de thumb in het midden blijft staan. Dit gebeurt niet.

Bij uitzoomen (verkleinen) worden de buitenste spans sneller smal dan de binnenste, waardoor de thumb niet meer in het midden staat en het kleurenverloop ook niet meer goed is, zoals op de afbeelding links hiernaast is te zien.

Bij inzoomen (vergroten) worden de spans wel breder, maar ze verschuiven niet. Hierdoor wordt het kleurenverloop verstoord en staat de thumb niet meer in het midden, zoals op de afbeelding hiernaast is te zien.

Als ik nog één stap meer inzoom, staat alles weer goed. Ga ik nog 'n stap hoger, dan is het weer vertekend.