Frames simuleren met CSS IX: Opmaak met bovenbalk en kolom links
Een van de grote voordelen van frames is dat je delen van je website permanent in beeld kunt houden.
Denk hierbij aan de titel en vooral de besturing. Als je steeds omhoog moet scrollen om bij de navigatie-knoppen
te komen is dat lastig voor je bezoekers. Onhandige en/of verwarrende navigatie staat hoog in de top 15
van grootste ergernissen over websites. Frames zijn altijd een handig hulpmiddel geweest om dit te voorkomen.
Ontwikkelingen in de webstandaarden duiden er op dat frames gaan verdwijnen. Dat wil zeggen: ze komen niet
meer voor in de standaarden. Vanwege de noodzakelijke achterwaartse compatibiliteit zullen websites met
frames nog jarenlang kunnen worden bekeken.
Het is goed om naar alternatieven voor frames te kijken. Een mogelijkheid is om de frames te simuleren, dus 'net te doen alsof'. Met HTML en CSS is dat heel goed mogelijk.
Bovenbalk | |
K o l o m |
Content |
Druk op de knop om het voorbeeld te bekijken en te downloaden.
- De werking is getest met Edge, FireFox en Chrome. Correcte werking met oudere versies van andere browsers is onzeker.
Het is daar mogelijk dat de bovenbalk toch uit beeld scrollt. In het slechtste geval lijkt de opmaak helemaal nergens op...
- De bespreking van de code is summier gehouden. Alleen zaken die specifiek zijn voor dit voorbeeld worden
genoemd.
Meer informatie over het simuleren van frames is te vinden in het item "Frames simuleren met CSS". Als je deze techniek voor het eerst gebruikt moet je daar zeker kennis van nemen.
Dit item geeft ook verwijzingen naar andere frameset-simulaties. - Om dit goed te laten werken moet je pagina beginnen met een DTD (Document Type Definition of doctype):
<!doctype html>
.
Opmerkingen bij de code van het voorbeeld:
- De <body> bestaat uit slechts één 'Main Container'. De betreffende <div>-tag
heeft geen id of class.
De achtergrondkleur is rgb(250,250,250) (Hexadecimaal: #fafafa, heel licht grijs). - De scrollbalk aan de rechterkant is gemaakt door voor de Main Container de eigenschap overflow:scroll
voor te schrijven. De andere containers hebben -indien nodig- de eigenschap overflow:hidden.
- De lichtgele bovenbalk heeft het id="BovenBalk". De z-index = 25. Het logo zit in dit block, met z-index = 40.
- De tekst in de bovenbalk zit in de container r1, die geen deel uitmaakt van BovenBalk. r1 zweeft boven de bovenbalk, z-index = 35. De positie van r1 binnen het window is vast: position:fixed.
- Ook het horizontale menu maakt geen deel uit van BovenBalk. Het id = "MenuB". De plaats ligt vast op dezelfde manier als r1. De z-index = 30. De twee blauw-groene lijnen zijn binnen dit block opgegeven.
- Het horizontale menu zelf is gedefinieerd als unordered list, <ul>. Met behulp van CSS-attributen
is de opmaak volledig gewijzigd:
- De bullets zijn verwijderd (list-style-type:none).
- De items worden achter elkaar gezet in plaats van onder elkaar (display:inline). De tussenruimte is ingesteld met padding.
- De achtergrond is transparant gemaakt, zodat je altijd de gele kleur van de bovenbalk ziet.
- De links in het menu zijn opgemaakt met de pseudo-classes :link, :hover, enz. van de <a>-tag.
- De blauwe kolom heeft het id="KolomLinks". De z-index = 15.
- De linker bovenhoek van zowel KolomLinks en van BovenBalk ligt op (top,left) = (0,0). De z-index van KolomLinks is kleiner dan de z-index van BovenBalk. Daardoor wordt een deel van de kolom afgedekt door de balk. Bij het plaatsen van tekst en figuren in de kolom dient daarmee rekening te worden gehouden, bijvoorbeeld met behulp van een id zoals whitespace (zie verder).
- Het verticale menu maak geen deel uit van KolomLinks. De plaats ligt vast op dezelfde manier als KolomLinks, zij het dat de linker bovenhoek niet op (top,left) = (0,0) ligt maar op (top,left) = (140px,5px). De z-index = 20.
- Het menu zelf is gedefinieerd als unordered list, <ul>. Met behulp van CSS-attributen
is de opmaak gewijzigd:
- De bullets zijn verwijderd (list-style-type:none).
- De achtergrond in transparant gemaakt, zodat je altijd de blauwe kleur van de kolom ziet.
- Er is om elk menu-item een rand gezet: border:4px solid #73a2bd.
- De links in het menu zijn opgemaakt met de pseudo-classes :link, :hover, enz. van de <a>-tag.
- Bij het openen van de bladzijde bevinden de bovenbalk, de kolom en de content zich alledrie op de positie (top,left) = (0,0). Daardoor zou een deel van de content onder de bovenbalk en de kolom kunnen verdwijnen. Dat is opgelost door de linkermarge van de content gelijk te maken aan 160px (de kolom is 150px breed). Voorts is bovenaan de content een brede marge gemaakt met <div id="whitespace"></div>. Whitespace moet wat hoger zijn dan de bovenbalk. Hier is whitespace 150px hoog. De bovenbalk is 130px hoog. Met de bovenmarge van content zelf (10px) blijft dus netto een marge over tussen de content en de bovenbalk van 30px.
- Voor het maken van kleinere letters bevat het stylesheet twee classes: Kleiner en Kleinst. De class Kleiner wordt in dit voorbeeld niet gebruikt.
- Als je meerdere <div>-tags naast elkaar gebruikt kan het voorkomen dat ze niet op gelijke
hoogte eindigen. Daardoor kan de opmaak een rafelig uiterlijk krijgen. Op dat te voorkomen kun je een trucje
toepassen: Een tag <div class="clear"></div>. Het is minder geschikt voor het
maken van witte ruimte.
- Het is bij deze techniek essentieel dat z-index goed gebruikt wordt. Als stukken van de opmaak 'zomaar' lijken te verdwijnen komt dat meestal doordat ze door iets anders worden afgedekt. Dat is op te lossen door de z-index van het verdwenen stuk te verhogen.
Tenslotte:
Van deze layout is ook een variant beschikbaar, waarbij de linker
kolom doorloopt over de hele hoogte van het scherm.