Websites met stijl
19. Menubalk en header
In dit hoofdstuk:
Voorbereiding
- Open het stijlblad terschelling.css in de editor.
- Controleer of het er zo uitziet als in figuur 1.
(Wat er op de regels 9 en 10 staat, hangt af van je keuze in hoofdstuk 16).
figuur 1: het stijlblad na hoofdstuk 16
1@import 'https://fonts.googleapis.com/css?family=Open+Sans+Condensed:700|Open+Sans:400,700';
2/* Google fonts 'Open Sans Condensed' (vet) voor de kop en 'Open Sans' (normaal en vet) */
3
4body {
5margin: 0;
6font-family: 'Open Sans', sans-serif;
7font-size: 110%;
8color: hsl(0,0%,40%);
9/* zie hoofdstuk 16 - Welke achtergrond */
10/* zie hoofdstuk 16 - Welke achtergrond */
11}
12
- Verbeter eventuele fouten.
- Sla de verbeterde versie op, maar sluit de editor niet tot je klaar bent met dit hoofdstuk.
Eigenschappen van de menubalk
Het element nav vormt de menubalk. De links erin zijn de menu-items.
Het bijzondere van de menubalk is dat deze op een vaste plaats blijft staan en niet meescrollt. Het menu is zo altijd in beeld.
Je hoeft dus niet terug naar boven te scrollen om een andere menukeuze te maken.
Verder willen we de menubalk geel maken. De balk moet de hele breedte van het venster in beslag nemen.
Dit wordt allemaal geregeld in de regels 13-22.
figuur 2: stijlregels voor de menubalk
13nav {
14background-color: hsl(52, 100%, 50%);
15margin: 0;
16padding: 4px 4px 4px 8px;
17position: fixed;
18top: 0;
19left: 0;
20width: 100%;
21z-index: 1;
22}
23
- Tik de regels 13 t/m 22 van figuur 3 in het stijlblad in.
- Controleer en verbeter eventuele fouten en sla het gewijzigde stijlblad op.
- Bekijk de website in je browser. Controleer of de menubalk geel is, en bij het scrollen op zijn plaats blijft helemaal tegen de bovenrand van het venster.
Toelichting
- De selector nav in regel 13 geeft aan dat het de opmaak van het element nav betreft, het menu.
De accolades { en } in de regels 13 en 22 markeren het begin en eind van de stijlregels voor nav.
Wen je aan om altijd eerst de selector en de accolades in te tikken en pas daarna de tussenliggende stijlregels.
Zonder de accolades en de selector kan je de opmaak niet controleren in de browser.
- Regel 14 maakt de achtergrond geel.
- Regel 15 maakt de marges 0. Voor de zekerheid - bij de meeste browsers is dat de standaard waarde.
- Regel 16 maakt de paddings boven, rechts en onder 4px, de padding links 8px.
Daardoor ontstaat er ruimte tussen de menu-items en de rand van de balk.
- Regel 17 fixeert de menubalk, zodat hij niet meeschuift bij het scrollen.
- Regel 18 positioneert de menubalk op 0px van boven, helemaal bovenaan dus.
- Regel 19 zet de menubalk tegen de linkerkant aan.
Ook regel 18 en 19 zijn voor de zekerheid. De bekende browsers positioneren standaard linksboven.
- In regel 20 wordt de breedte van de menubalk teruggezet op 100%.
Dit is nodig omdat regel 17 position: fixed de 'bijwerking' dat de breedte van de menubalk wordt aangepast aan de inhoud van de balk. De balk vult daardoor niet meer de hele breedte.
zie hoofdstuk 18
- Regel 22 zorgt dat de menubalk boven andere elementen ligt. (Die andere elementen hebben z-index: 0.)
zie hoofdstuk 18
Aan het einde van dit hoofdstuk doen we nog wat experimenten met de regels 17-22, zodat je beter ziet wat er allemaal gebeurt.
Opmaak van de menu-items
De opmaak van het menu-items maken we in orde met de stijlregels 24-35 (zie figuur 3)
figuur 3: stijlregels voor de menu-items
24nav a {
25background-color: hsl(0, 8%, 40%);
26color: hsl(0, 0% 100%);
27text-decoration: none;
28width: 80px;
29display: inline-block;
30text-align: center;
31}
32
33nav a:hover {background-color: hsl(0, 0%, 30%);}
34
35nav a[href=""] {color: hsl(50, 100%, 50%);}
- Tik de regels 24 t/m 35 van figuur 4 in je stijlblad in.
- Controleer en verbeter eventuele fouten en sla het gewijzigde stijlblad op.
- Bekijk de website in je browser. De menu-items moeten nu donkergrijze hokjes zijn, die van kleur veranderen als je ze met de muis aanwijst.
Toelichting
- De selector nav a in regel 24 selecteert alle a-elementen (hyperlinks) binnen het element nav. Dat zijn de menu-items.
Meer over selectors in hoofdstuk 20.
- Regel 25 en 26 stellen de voor- en achtergrondkleur van de menu-items in, resp. wit en donkergrijs.
- Regel 27 zorgt ervoor dat de menu-items niet onderstreept zijn.
Links zijn standaard onderstreept. In menu's is dat ongebruikelijk.
Met de stijlregel text-decoration: none; halen we de onderstreping weg.
De eigenschap text-decoration kan de volgende waarden aannemen:
underline (onderstreping), line-through (doorstrepen), overline (streep boven de letters) en none (geen streep).
- Regel 28 maakt de breedte van de menu-items (de 'knoppen') 80px.
- Regel 29 maakt van het menu-element een inline blok.
We willen alle menu-items even breed maken. Maar de menu-items zijn hyperlinks. Dat zijn inline elementen; daarvan kan de breedte niet worden ingesteld; die wordt door de inhoud (de hoeveelheid tekst) bepaald.
Regel 28, die de breedte instelt op 80px, heeft dus geen effect.
Met regel 29 maken we van de menu-items inline-blok elementen. Die kennen wel een breedte; en die breedte is in regel 28 ingesteld op 80px.
- Regel 30 centreert de teksten in de 'knoppen'.
De eigenschap text-align regelt de horizontale uitlijning. De meest gebruikte waarden zijn: left (links uitgelijnd), center (gecentreerd), right (rechts uitgelijnd).
Meer info in de naslag
- Regel 33 verandert de achtergrondkleur van een menu-item als dit met de muis wordt aangewezen. Door het veranderen van de kleur bij aanwijzen is duidelijk dat het om een menu-item, een link, gaat.
Een met de muis aangewezen element kan worden geselecteerd door achter de selector voor dat element
de toevoeging :hover te plaatsen.
nav a selecteert het element nav a (een link binnen nav, kortom een menu-item),
dus nav a:hover selecteert een menu-item als dit wordt aangewezen..
Meer hierover in hoofdstuk 20.
- Regel 35 maakt de voorgrondkleur van het actieve menu-item geel.
Het menu van een webpagina bevat ook een knop voor de pagina in beeld. (De pagina polder bevat bv. de menu-knop polder.
Ik noem z'n knop maar de 'active knop' of het 'actieve menu item') .
Die knop moet geen link bevattten, want een link naar een pagina die al in beeld is, is niet zinvol.
Daarom hebben we zulke knoppen in de html een 'lege href' gegeven: <a href="">;
We maken de voorgrondkleur (de tekstkleur) ervan geel om aan te geven dat de betreffende knop geen link is.
Er is een manier om een elementen te selecteren waarvan een eigenschap een bepaalde waarde heeft. Dat gaat door achter de selector de eigenschap met de speciale waarde te zetten, tussen vierkante haken [ ].
[href=""] achter een element selecteert dus dat element, als de eigenschap href ervan leeg is: href="".
De complete selector: nav a[href=""]
Meer over selectors in hoofdstuk 20.
figuur 4: stijlregels voor de header
38img {width: 100%;}
39
40header {
41position: relative;
42margin-top: 32px;
43}
44
45header h1 {
46position: absolute;
47top: 0;
48right: 1%;
49margin: 0;
50font-family: 'Open Sans Condensed';
51font-size: 2.5em;
52color: white;
53text-shadow: 1px 1px black;
54opacity: .9;
55}
56
- Tik de regels 38 t/m 55 van figuur 4 in je stijlblad in.
- Controleer en verbeter eventuele fouten.
- Sla het stijlblad op, maar sluit het niet.
- Bekijk de website in je browser.
Toelichting
Experimenteren
Hieronder vind je een aantal voorstellen voor experimentjes. Ze helpen je de verschillende stijlregels te doorgronden.
Lees eerst nog even de tips.
Experiment 1. De menubalk fixeren
Experiment 2: Positie van de menubalk
De menubalk staat helemaal bovenaan, maar dat hoeft niet. Je zou hem ook onderaan kunnen zetten of ergens anders:
Experiment 3: Padding in de menubalk
Regel 16 dient ervoor om wat ruimte rond de menuknoppen te maken.
- Haal de paddings op regel 16 weg, sla op en bekijk de website in de browser. Er is nu geen ruimte meer om de knoppen.
- Zet regel 16 weer terug op padding: 4px 4px 4px 8px;
- Experimenteer eventueel nog wat met de paddings. Zet daarna weer terug op padding: 4px 4px 4px 8px;
Experiment 4: Z-index (regel 21)
Als er verschillende elementen over elkaar liggen of schuiven, bepaalt z-index welk element boven komt en welk onder. Hiervoor gelden de volgende regels:
- Z-index mag positief en negatief zijn: z-index: 32;, z-index: -2;, z-index: 0;.
- Het element met de hoogste z-index komt boven. z-index: 2; komt boven z-index: 1;
- Elk element waarvoor geen z-index is ingesteld heeft z-index: 0;
- Als twee elementen met dezelfde z-index elkaar overlappen weet je niet welke boven komt en welke onder.
Dit gaan we bekijken aan de hand van de menubalk. Nu die vast staat schuiven de andere elementen er overheen of er onderdoor. Dat wordt geregeld door de z-index in regel 21.
- In regel 21 staat z-index: 1;
Bekijk welke elementen bij het scrollen over de menubalk heenschuiven, welke er onderdoor.
- Maak z-index achtereenvolgens z-index: -1; en z-index: 0; en kijk steeds welke elementen over de menubalk heenschuiven. Klopt dat met de regels?
- Probeer als je dat wilt ook andere waarden van z-index, bv. z-index: 3; of z-index: -182;
- Maak regel 21 vervolgens leeg en bekijk dan welke elementen over de balk heen schuiven en welke er onderdoor.
- Zet tenslotte regel 21 weer terug op z-index: 1;.
Wat zijn jouw bevindingen?
Bij mij schoven bij een positieve z-index alle elementen onder de menubalk door; de menubalk was altijd boven.
bij een negatieve z-index schoven bj mij alle elementen over de menubalk heen, ook de tekst.
Bij z-index: 0 (en ook als ik regel 21 leeg maakte) schoof de menubalk onder de kopfoto door en over alle andere elementen heen.
Dat is allemaal in overeenstemming met de bovengenoemde regels 1-4
Experiment 5: De opmaak van de menu-items
Nav a regelt de opmaak van de hyperlinks in de menubalk, de menu-items dus (regel 24-31).
De meeste regels spreken voor zich. Je zou bijvoorbeeld de volgende experimentjes kunnen doen:
Experiment 6: Positionering van de titel 'Terschelling'
De regels 46-48 bepalen de positie van de titel. Regel 46 position: absolute; geeft aan dat het element absolute wordt gepositioneerd.
Met de eigenschappen top, bottom (resp van boven, en van onder) en left, right kan je een (absoluut) element precies plaatsen.Dat is gebeurd in de regels 47 en 48.
- Probeer het element ergens anders binnen de header te plaatsen door de regels 47 en 48 te veranderen
bv. met top: 50px; right: 50px; of met bottom: 30px; left: 50px; of wat je maar wilt.
De afstanden kunnen worden opgegeven in px, % of een combinatie (bv. top in %, left in px).
Merk op dat de afstanden steeds gelden t.o.v. de randen van de header (de kopfoto).
- Zet regel 46 op bottom: 0; en regel 47 op left:0; om de titel aan de linker onderkant van de header te positioneren.
Maak dan regel 46 leeg en bekijk het resultaat. Nu staat de titel links onderaan het scherm!
Een absoluut geplaatst element wordt gepositioneerd t.o.v. het referentie element, dat is het eerste niet statische parent-element.
De procedure is als volgt: eerst wordt gekeken naar de parent (het omhullende element). Is dat niet relative, absolute of fixed dan kijken we verder bij diens parent.
Zo gaan we door tot we een relative, absolute of fixed element vinden. Dat is de referentie. Vinden we geen enkele parent die voldoet, dan is de body het referentie-element
Door regel 49 leeg te maken is er geen niet-statisch parent element meer. Dus is nu de body referentie.
Zet de regels 46-48 weer terug op hun oude waarden.
Experiment 7: schaduw en transparantie
In regel 53 is met text-shadow" 1px 1px black; een heel subtiele schaduw ingesteld.
- Maak de schaduw maar eens groter en geef die een andere kleur (bv. text-shadow: 5px 10px blue; of wat je wilt).
- Je kan ook het woord text-shadow vervangen door box-shadow. Dan krijgen niet de letters een schaduw, maar het de hele titel.
- Zet regel 53 weer terug op zijn oude waarde.
In regel 54 opacity: .9; wordt de opaciteit ingesteld. Opaciteit is het omgekeerde van tranparantie (doorzichtigheid). Het wordt eaangegeven met een getal tussen 0 (volledig transparant) en 1 (volledig ondoorzichtig).
Met een opacity van 0.9 is de titel iets doorzichtig. In de praktijk merk je er niets van. Ik heb de regel eigenlijk alleen toegevoegd om de eigenschap opacity te laten zien.
- Bekijk het effect van verschillende waarden van de opacity, bv. 0 (helemaal transparant, dus niet zichtbaar), 0.4, 1.
- Zet de opacity terug op .9.
Klaar
- Zet na afloop van de experimenten alle regels weer terug op de oorspronkelijke waarden, zoals hierondef in figuur 7.
- Sla het stijlblad op (als steeds onder de naam terschelling.css)
figuur 7: het stijlblad na hoofdstuk 19
1@import 'https://fonts.googleapis.com/css?family=Open+Sans+Condensed:700|Open+Sans:400,700';
2/* Google fonts 'Open Sans Condensed' (vet) voor de kop en 'Open Sans' (normaal en vet) */
3
4body {
5margin: 0;
6font-family: 'Open Sans', sans-serif;
7font-size: 110%;
8color: hsl(0,0%,40%);
9/* zie hoofdstuk 16 - Welke achtergrond */
10/* zie hoofdstuk 16 - Welke achtergrond */
11}
12
13nav {
14background-color: hsl(52, 100%, 50%);
15margin: 0;
16padding: 4px 4px 4px 8px;
17position: fixed;
18top: 0;
19left: 0;
20width: 100%;
21z-index: 1;
22}
23
24nav a {
25background-color: hsl(0, 8%, 40%);
26color: hsl(0, 0% 100%);
27text-decoration: none;
28width: 80px;
29display: inline-block;
30text-align: center;
31}
32
33nav a:hover {background-color: hsl(0, 0%, 30%);}
34
35nav a[href=""] {color: hsl(50, 100%, 50%);}
36
37
38img {width: 100%;}
39
40header {
41position: relative;
42margin-top: 32px;
43}
44
45header h1 {
46position: absolute;
47top: 0;
48right: 1%;
49margin: 0;
50font-family: 'Open Sans Condensed';
51font-size: 2.5em;
52color: white;
53text-shadow: 1px 1px black;
54opacity: .9;
55}
56
Samenvatting
In dit hoofdstuk kwamen de volgende eigenschappen aan de orde. Ze staan in alfabetische volgorde
box-shadow | Schaduw om het element: box-shadow: 3px 3px 2px grey; |
naslag |
display | Hoe een element wordt getoond (niet, als inline-element, als inline-blok element of als blok-element) |
naslag | |
display: none; | element wordt niet getoond | | |
margin | Ruimte om een element | naslag |
opacity | Ondoorzichtigheid.
opacity: 1.0
opacity: .75
opacity: .50
opacity: .25; |
naslag |
padding | Ruimte tussen de tekst en de rand van een element | naslag |
position | Vier manieren van positioneren: static, relative, fixed, absolute | naslag |
position: static | de standaard manier van positioneren: van links naar rechts, regel voor regel | |
position: relative | Verschoven (met top/bottom, left/right) t.o.v. de standaard manier methode | |
position: fixed | Vaste positie (top/bottom, left/right). Scrollt niet mee met de pagina | |
position: absolute | Vaste positie (top/bottom, left/right). Scrollt wel mee met de pagina | |
selector | Geeft aan voor welke elementen een stijlregel geldt. | hfdstk 20 |
text-align | Tekstuitlijning | naslag |
text-align: center; | tekst gecentreerd | |
text-align: left; | tekst links uitgelijnd | |
text-align: right; | tekst rechts uitgelijnd | |
text-decoration | text-decoration: underline,
line-through,
overline, none. | naslag |
text-shadow | Schaduw om de letters. | naslag |
top, bottom, left, right | Bepalen de positie | naslag |
width | de breedte van een element |
naslag |
max-width | de maximale breedte van een element | |
min-width | de minimale breedte van een element | |
z-index | Geeft aan welk element boven ligt: z-index:3 ligt boven z-index:1 ligt boven z-index:-3 |
naslag |