Attributen geven extra informatie over een element (naam + waarde)
In onderstaand voorbeeld is href een attribuut.
<a href="https://google.com/">Klikbaar element</a>
Block-elementen nemen heel de paginabreedte in
Inline-elementen komen na elkaar
Sinds HTML5 kunnen we verschillende inhoudsblokken makkelijk definiëren met tags. We onderscheiden:
<header> <!-- Dit gebruiken we voor de hoofding-->
<nav> <!-- Dit gebruiken we voor de navigatiebalk-->
<main> <!-- Dit gebruiken we voor de main content op je website-->
<article> <!-- Dit gebruiken we voor bepaalde herhalende elementen, zoals artikels bij een perswebsite-->
<aside> <!-- Dit gebruiken we als sidebar (zowel links als rechts)-->
<footer> <!-- Dit gebruiken we vanonder aan de website bij een footer-->
<section> <!-- Voor een onderdeel van een pagina-->
Om titels en ondertitels te maken, maken we gebruik van de
<h>
tag.
Deze bestaan van
<h1>
tot en met<h6>
.
Door er het
id
attribuut aan toe te voegen kunnen we hier een ankerpunt van maken.
Let op: dit is enkel voor titels. Onderliggende teksten markeren we met de
<p>
tag.
<h1 id="hoofding1">Dit is een titel</h1>
<p>Dit is onderliggende tekst</p>
Witruimte, regeleinde en tabs worden niet weergegeven in een browser. Daarom gebruiken we de
<br/>
tag om regels af te breken.
<p>Dit is een<br/>regeleinde.</p>
Hieronder vind je een lijst van de meest belangrijke tags
<em> <!-- Klemtoon leggen, standaard cursief (emphasis)-->
<strong> <!-- Nadruk leggen, heel belangrijk, standaard vet-->
<small> <!--Aanvullende informatie-->
<cite> <!-- Citeren van de naam van een auteur (!NIET VOOR BRONVERMELDING)-->
<q> <!-- Korte citaten in lopende zin-->
<abbr> <!--Afkortingen weergeven, in combinatie met title tag-->
<dfn> <!-- Markeert eerste keer dat definitie voorkomt-->
<code> <!-- Markeren van programmacode-->
<span> <!-- Een containerelement zonder betekenis, met mogelijke attirbuten-->
<pre> <!-- Behouden van tabs, witruimte, etc in code-->
<sub> <!-- Subscrips, bijvoorbeeld de 2 van H2O kleiner weergeven-->
<sup> <!-- Tegenovergestelde van sub-->
<s> <!--Strikethrough-->
<ins> <!-- Toegevoegde inhoud, zoals op Github (groene highlight)-->
<del> <!-- Verwijderde inhoud, zoals op Github (rode highlight)-->
<mark> <!--Markeren van tekst met 'fluostift'-->
<kbd> <!-- Gebruikersinvoermarkering-->
<samp> <!-- Computeruitvoer-->
We kunnen inhoud groeperen zoals adresgegevens, opsommingslijsten,...
De
<address>
tag gebruiken we voor contactinformatie.
De
<main>
tag gebruiken om de belangrijkste informatie te markeren (niet header, footer en navigatie).
De
<blockquote>
tag gebruiken we voor langere citaten uit andere bron waarbij bron wordt vermeld metcite
attribuut.
We gebruiken de
<ol>
tag voor een ordered list (met nummers). Dit altijd in combinatie met<li>
tag (dit is om het lijstelement zelf te plaatsen).
- Item 1
- Item 2
- Item 3
<ol>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ol>
We gebruiken de
<ul>
tag voor een niet ordered list (puntjes). Dit is eveneens in combinatie met de<li>
tag.
- Item 1
- Item 2
- Item 3
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
We gebruiken
<dl>
in combinatie met<dt>
en<dd>
voor een gepaarde lijst.
- Hoofding
- Beschrijving
<dl>
<dt>Hoofding</dt>
<dd>Beschrijving</dd>
</dl>
Lists kunnen ook genest worden.
We gebruiken de
<figure>
tag om illustraties met bijschrift te groeperen. Dit kan ook een tabel, grafiek, citaat of meer zijn. Dit in combinatie met<figcaption>
.
<figure>
<img src="/olifant.jpg"
alt="Elephant at sunset">
<figcaption>An elephant at sunset</figcaption>
</figure>
Voor dit gebruiken we de
<div>
tag. In combinatie met hetclass
attribuut kan je vanuit een CSS bestand de div tag makkelijk benaderen.
<div class="voorbeeldclass">
<p>Dit is een voorbeeldparagraaf</p>
</div>
.voorbeeldclass {
margin: 1rem;
border: 1px;
}
Het gebruik van hyperlinks in HTML maakt het mogelijk om van de ene webpagina naar een andere te gaan. Dit kan binnen de website zijn, buiten, e-mail clients, telefoonnummer bellen,...
We maken iets klikbaar met de
<a>
tag. Dit kan een kop, tekst, afbeelding,... zijn.
<a href="https://google.com">Dit is klikbare tekst</a>
Bij lokale links navigeren we door de mappen met
/
en om een niveau te stijgen gebruiken we../
.
Bij een link naar een e-mail adres gebruiken we
mailto:
en voor telefoneren gebruiken wetel:
.
Door
target:"_blank"
te gebruiken kunnen we de URL openen in een nieuw tabblad.
Je kan als target ook een ankerpunt van een titel gebruiken.
<a href="#hoofding1">Spring naar hoofding 1!</a>
<a href="/overons.html#hoofding1">Spring naar hoofding 1 op over ons!</a>
Om CSS te gebruiken in ons document moeten we de stylesheet linken aan onze HTML pagina. Dit doen we met onderstaande code.
<link rel="stylesheet" href="main.css">
Je kan ook het siteicoon veranderen met:
<link rel="icon" href="favicon.ico" type="image/x-icon">
We kunnen een afbeeldingen weergeven met de
<img>
tag. Dit altijd in combinatie met hetsrc
attribuut. Hetalt
attribuut is een tekst wanneer de afbeelding niet zichtbaar zou zijn. Metwidth
enheight
kan je de afmetingen doorgeven. De browser weet dan wat er komt. NIET OM TE SCHALEN!
<img src="olifant.jpg" alt="Een olifant uit Afrika" width="100" height="100">
Omdat sommige beeldschermen een hele hoge pixeldensity hebben (denk maar aan Retina), kan het zijn dat je soms een betere versie van een afbeelding wilt inladen. De browser kan op zijn beurt verschillende resoluties inladen voor het geschikte beeldscherm. Dit gebeurt met het
srcset
attribuut.
<img src="olifant640.jpg" alt="Een olifant uit Afrika"
srcset="olifant640.jpg 1x,
olifant1280.jpg 2x,
olifant1920.jpg 3x">
In CSS kunnen we een afbeelding de volledige grootte van zijn parent container laten innemen door zowel de
width
alsheight
op100%
te zetten.
Om captions bij een afbeelding te plaatsen gebruiken we de
<figure>
en<figcaption>
tags (zie puntje 1.6.3 in dit document).
1.9 Tabellen
Iedere tabel start met de root tag
<table>
. Daaronder komen rijen met de<tr>
tag en daarin kolommen met de<td>
tag (je definiëert dus per rij, kolommen).
Header | |
---|---|
Kolom 1.1 | Kolom 1.2 |
Kolom 2.1 | Kolom 2.2 |
<table>
<thead>
<tr>
<th>Header</th>
</tr>
</thead>
<tr>
<td>Kolom 1.1</td>
<td>Kolom 1.2</td>
</tr>
<tr>
<td>Kolom 2.1</td>
<td>Kolom 2.2</td>
</tr>
</table>
Door de attributen
rowspan
encolspan
te gebruiken kan je 1 cel meerdere kolommen of rijden laten overvloeien.
Kolom 1.1 | Kolom 1.2 |
Kolom 2.2 |
<table>
<tr>
<td rowspan="2">Kolom 1.1</td>
<td>Kolom 1.2</td>
</tr>
<tr>
<td>Kolom 2.2</td>
</tr>
</table>
TIP: In CSS kunnen wet met
border-collapse: collapse
dubbele borders enkelvoudig maken.
Men kan bij tabellen een bijschrift plaatsen. Dit doen we met het
<caption>
element. We zetten deze net binnen het<table>
element.Je kan de caption-positie aanpassen in CSS met
caption-side
.
1.10 Formulieren
Met de
<form>
tag kunnen we een inputformulier maken. Met het attribuutaction
zeggen we naar welke URL het formulier moet gestuurd worden. Met het attribuutmethod
zeggen we de methode van versturen. Dit ofget
(toevoegen aan url) ofpost
(toevoegen aan header van HTTP request).
Ieder veld stoppen we in een
div
element. Om de tekst voor het veld te krijgen, gebruiken welabel
met daarin een link naar het inputveld metfor
(met hetid
van hetinput
veld).
<form action="" method="get">
<div>
<label for="name">Enter your name: </label>
<input type="text" name="name" id="name" required>
</div>
<div>
<label for="email">Enter your email: </label>
<input type="email" name="email" id="email" required>
</div>
<div>
<input type="submit" value="Subscribe!">
</div>
</form>
Je kan ook de
<label>
tag rond de<input>
tag zetten.
<div>
<label>Enter your name
<input type="text" name="name" required>
</label>
</div>
Bij de
<input>
tag zijn er een paar attributen
-id
in combinatie met label of voor css
-name
nodig voor het versturen van het formulier
-value
waarde van een invoerveld als de gebruiker zelf niets ingeeft
-placeholder
voor helptekst.
We kunnen ook de invoer client-side valideren met:
-required
verplichte infvoer
-minlenght
enmaxlenght
min- en max lengte van de invoer
-size
lengte van het invoerveld
-pattern
een regex patroon
Gebruikersbeperkingen:
-readonly
veld kan niet worden aangepast, enkel getoond
-disabled
veld is uitgeschakeld
Voor de
<input>
tag hebben we ook hettype
attribuut.
Op Mozilla MDN vinden we hier een hele lijst van.
Er zijn nog een paar overige elementen die op een andere manier geïmplementeerd worden.
-<button>
: knop
-<textarea>
: uitgebreide tekstinvoer
-<option>
: keuzemogelijkheid
-<optgroup>
: groeperen van keuzemogelijkheden
-<select>
: keuzelijst
-<datalist>
: keuzelijst met invoervak
-<legend>
: een legende toewijzen aan een formulier (tekst vanboven)
Om een groot tekstvak te creëren maakt men gebruik van de
<textarea>
tag. Om het tekstvak onder het label te zetten kan je<br>
gebruiken. Voorbeeld:
<div>
<label for="reden">Reden afspraak: <br></label>
<textarea name="reden" id="reden" cols="60" rows="5">Dit is placeholder tekst</textarea>
</div>
TIP:
Als je van een formulier een flex box maakt, kan je de input boxes mooi aligneren.
- Gehele formulier op
display: flex
zetten- Flex value van bv. 1 toekennen aan label met
flex: 1
.
1.10.1 Fieldset
We gebruiken het
<fieldset>
element om rond een formulier een box te tekenen met eventueel een legenda. Voorbeeld:
<form>
<fieldset>
<legend>Choose your favorite monster</legend>
<input type="radio" id="kraken" name="monster">
<label for="kraken">Kraken</label><br/>
<input type="radio" id="sasquatch" name="monster">
<label for="sasquatch">Sasquatch</label><br/>
<input type="radio" id="mothman" name="monster">
<label for="mothman">Mothman</label>
</fieldset>
</form>
wordt:
2. CSS
We kunnen CSS op verschillende manieren implementeren.
- In een external stylesheet met<link rel="stylesheet" href="css/stijlen.css">
.
- In het HTML document zelf met de<style>
tag.
- Als inline element in de begin tag van het element. Bv.<p style="font-family:'Courier New'; font-size: 20px;">Test</p>
We kunnen andere stijlbladen importeren met
@import url('bestand.css')
.
Browsers hebben hun eigen standaard stylesheet. Soms kan dit voor inconsistenties zorgen tussen browsers. Hiervoor gebruiken we een browser reset stylesheet.
2.2 CSS eenheden
CSS heeft verschillende eenheden. Hieronder een korte opsomming.
Absolute eenheden
-px
: CSS pixel, optische referentie-eenheid
Relatieve eenheden
-em
: gelijk aan de berekende tekstgrootte van het ouderelement
-rem
: de tekstgrootte van het rootelement
-ch
: breedte van tekst
Viewport percentages
-vw
: 1% van de breedte van het venster
-vh
: 1% van de hoogte van het venster
-vmin
: de kleinste waarde van vh en vw
-vmax
: de grootste waarde van vh en vw
Als er meerdere waarden zijn toegewezen aan een property, zal de browser de meest specifieke kiezen. In het onderstaande geval zal de kleur dus rood zijn.
body > div {
background-color: red;
}
div {
background-color: black;
}
* {
background-color: green;
}
In onderstaande tabel zien we wat belangrijker is. Hoe meer naar rechts, hoe minder belangrijk. Het helemaal linkse getal is inline style.
Selector | Specificiteit | Toelichting |
---|---|---|
div ul ul li | 0,0,0,4 | 4 elementselectors |
div.klasse ul li | 0,0,1,3 | 1 klasseselector, 3 elementselectors |
a::before | 0,0,0,2 | 1 pseudoklasse, 1 elementselector |
a.klasse:hover | 0,0,2,1 | 1 klasse, 1 pseudoklasse, 1 elementselector |
p.eerste | 0,0,1,1 | 1 klasseselector, 1 elementselector |
#id p.eerste | 0,1,1,1 | 1 id-selector, 1 klasseselector, 1 elementselector |
Volgorde van gebruikte stijlbladen (naar belangrijkheid):
- Declaraties in de browser
- Declaraties van de gebruiker
- Declaraties van de auteur
- Declaraties van de auteur met kenmerk
!important
- Declaraties van de gebruiker met kenmerk
!important
Een opmaakeigenschap hoeft niet rechtstreeks een waarde te krijgen. De waarde kan overgeerfd worden van het ouderelement.
Zonder de onderstaande CSS zal de
<em>
tag de tekst gewoon cursief maken (overerving van een ouderelement). Als we de onderstaande CSS dan wel gebruiken, zal hij de tekst tussen de<em>
tags ook blauw maken.
em {color:blue;}
<p>Hey, <em>look</em> at that sheepdog</p>
Opgelet: Eigenschappen zoals padding, width, height, background-color, border,... zijn niet erfelijk. Je kan dit toch forceren door
inherit
mee te geven.
h2 { color: inherit; }
Welke properties worden overgeërfd?
- Tekst-gerelateerde properties
font-family
,font-size
,font-style
,font-variant
,font-weight
,font
,letter-spacing
,line-height
,text-align
,text-indent
,tekst-transform
,word-spacing
- List-gerelateerde properties
list-style-image
,list-style-position
,list-style-type
,list-style
- Kleuren
color
2.5 Selectors
Basisselector (A)
Ieder<p>
element zal groen kleuren.
p {
color: green;
}
Klassenselector (.A)
Ieder element metclass="klasse1"
als attribuut zal zwart kleuren.
Ieder<span>
element in een ander element metclass="klasse1
als attribuut kleurt rood.
Bij het laatste voorbeeld zal ieder<span>
element met het klasseattribuutclass=klasse1
rood kleuren.
.klasse1 {
color: black;
}
.klasse1 span {
color: red;
}
span.klasse1 {
color: red;
}
ID Selector (#A)
Ieder element metid="uniekid1"
als attribuut zal aqua kleuren.
ID's zijn altijd uniek en worden bij maar 1 element gebruikt!
#uniekid1 {
color: aqua;
}
Combinatieselector (A>B)
Ieder<p>
element waarvan de rechtstreekse parent een<div>
element is zal blauw kleuren.
div > p {
color: blue;
}
Combinatieselector (A B)
Ieder<p>
element dat een afstammeling is van<div>
(kind, kleinkind,...) kleurt paars.
div p {
color: purple;
}
Combinatieselector (A+B)
Ieder<p>
element, op hetzelfde nivau als<div>
en dat onmiddelijk op<div>
volgt kleurt geel.
div+p {
color: yellow;
}
Combinatieselector (A~B)
Ieder<p>
element, op hetzelfde nivau als<div>
en dat op<div>
volgt kleurt groen (moet niet onmiddelijk).
div~p {
color: green;
}
Combinatieselector (A,B)
Ieder<p>
en<div>
element kleurt oranje. Op welk niveau dan ook.
div,p {
color: orange;
}
div,p {
color: orange;
}
Teken | Beschrijving | Voorbeeld | Betekenis voorbeeld |
---|---|---|---|
img[alt] | elk element img met attribuut alt | ||
= | Exact gelijk aan | img[alt="foto"] | elk img element waarvan alt attribuut gelijk aan de waarde foto |
~= | Bevat waarde | img[alt~="fotoboek"] | elk img element waarvan class attribuut meerdere waarden kan hebben waaronder fotoboek |
|= | Begint met waarde | [hreflang|="nl"] | elk element waarvan hreflang attribuut gelijk aan nl, of begint met nl- (nl-NL, nl-BE) |
^= | Begint met exacte waarde | [name^="keuze"] | name attribuut begint met het exacte woord "keuze" (bv. keuzevak of keuze2) |
$= | Eindigt met exacte waarde | [href$=".com"] | href attribuut eindigt op ".com" (bv. google.com) |
*= | Bevat exacte waarde | [href*="user"] | href attribuut bevat het exacte woord "user" (bv. hogent.be/user/jan) |
TIP: Door
:not()
te gebruiken achter een selector kan je een element selecteren waar een voorwaarde NIET van waar is. Voorbeeld:a:not([href])
.
2.5.4 Pseudoklassen
Pseudoklassen duiden een toestand van een element aan.
Hyperlink pseudoklassen
UI toestand
Varia
:root
hoofdelement<html>
:first-child
een element dat het eerste child is van zijn parent-element:last-child
een element dat het laatste child is van zijn parent-element:only-child
een element waarvan de ouder geen andere child elementen heeft:first-of-type
het eerste element van dat type:last-of-type
het laatste element van dat type:only-of-type
het enige element van dat type:nth-child(n)
elk zoveelste kindelement (je kan ookodd
oneven ofeven
even gebruiken):nth-last-child(n)
nu gerekend vanaf het laatste kind (je kan ookodd
oneven ofeven
even gebruiken):nth-of-type(n)
elk zoveelste element van een type (je kan ookodd
oneven ofeven
even gebruiken):nth-last-of-type(n)
nu gerekend vanaf laatste element (je kan ookodd
oneven ofeven
even gebruiken):empty
leeg element
Pseudo elementen
Toegang tot onderdelen van een document waarvoor geen gewone elementen bestaan (bijvoorbeeld voor een URL).
::first-line
de eerste regel opgemaakte tekst van een element::first-letter
de eerste letter::before
voor de inhoud van een element::after
na de inhoud van een elementVoorbeeld:
/* Add a heart before links */
a::before {
content: "♥";
}
2.6 CSS Properties
Enkele CSS properties
background
achtergrondskleurcolor
kleur tekstfont-family
het lettertypefont-size
tekstgroottefont-weight
het gewicht (vetheid) van het lettertypeline-height
de regelafstand, hoeveelheid it tussen de regels tekstmargin-bottom
(of top/left/right) ruimte tussen de rand van een element en de rand van het parent element of angrenzend elementpadding-bottom
(of top/left/right) de ruimte tussen de inhoud en de randtext-align
uitlijnen van teksttext-decoration
lijneffectentext-transform
omzetten naar kleine/hoofdletters
2.7 Boxmodel
Een HTML-pagina is opgebouwd uit blokken. Deze blokken worden bovenop mekaar geplaatst. Een box bestaat uit
content
(bv. tekst),padding
(ruimte rond het content) eenborder
(de rand rond depadding
) en demargin
(ruimte rond de border).
Er zijn 2 mogelijke manieren van
box-sizing
:
content-box
Ingestelde width en height hebben enkel betrekking op de content.border-box
Ingestelde width en height hebben betrekking op de content + padding + de border.
Eigenschappen
width
enheight
(niet bij inline tekst)
auto
(standaardwaarde) box is zo groot dat de inhoud erin pastlengte of percentage
max-content
afmeting van het grootste item in de boxmin-content
de kleinst mogelijke afmeting zonder overloop te veroorzaken
Eigenschappen
min-width
,max-width
,min-height
enmax-height
.
Deze waarden overridenwidth
enheight
.
auto
(standaardwaarde) box is zo groot dat de inhoud erin pastnone
lengte of percentage
max-content
afmeting van het grootste item in de boxmin-content
de kleinst mogelijke afmeting zonder overloop te veroorzaken
Marges ingesteld worden op 2 manieren:
margin-top
/right
/bottom
/left
margin
(afgekort)
/* Apply to all four sides */
margin: 1em;
margin: -3px;
/* vertical | horizontal */
margin: 5% auto;
/* top | horizontal | bottom */
margin: 1em auto 2em;
/* top | right | bottom | left */
margin: 2px 1em 0 auto;
Opgelet: Marges worden aan de onder en bovenkant samengevoegd, zodat er geen dubbele marges ontstaan. Wanneer de bottom margin van een element de top margin van een ander element overlapt, is het resultaat NIET de som, maar de grootste margin.
Belangrijk: om een gewone box te centreren, kunnen we de
margin
waarde opauto
zetten!
Van een border kunnen we 3 waarden instellen:
border-width
(px, %, em, rem, thin, medium, thick) (top/right/left/bottom)border-style
(none, hidden, dotted, dashed, solid, double, groove, ridge, inset, outset)border-color
(een kleurwaarde of transparent)Men kan deze eigenschappen ook combineren:
border: 1px solid black;De volgorde maakt niet uit.
Aparte randen kunnen ook gedefinieerd worden metborder-left
,border-right
,border-top
,border-bottom.
Overflow treedt op indien de content te groot wordt voor de box. Dit kan enkel als een breedte of hoogte is ingesteld. Wat er met die inhoud gebeurt hangt af van de waarde die wordt toegekend aan
overflow
.
overflow
(visible/hidden/scroll/auto)
De indeling van boxes wordt bepaald door de
display
eigenschap. Er wordt een onderscheid gemaakt tussen:
display-outside
gedrag van boxen tov andere boxen (in flow).
block/inline/run-indisplay-inside
gedrag van de afstammelingne van de box.
flow/flow-root/table/flex/grid/list-itemdisplay-legacy
waarden kunnen ook gekoppeld worden
inline-block/inline-grid/inline-flex
Je kan makkelijk een element verbergen door de
visibility
eigenschap ophidden
te zetten. Er wordt wel nog steeds een box aangemaakt en bestaat ook in de boomstructuur. Het wordt niet weergegeven in de browser, maar de ruimte nodig voor de box wordt wel gereserveerd op het scherm. Als je devisibility
opcollapse
zet wordt er ook geen ruimte gereserveerd.
a {
visibility: hidden;
}
Het is mogelijk dat
collapse
niet altijd de witruimte weglaat (bv. bij inline elementen). Om dit te overkomen kunnen wedisplay: none
gebruiken.
Elk blok krijgt een positie toegewezen in het omvattende blok (containing blok). Schema's:
- normale flow - plaatsing afhankelijk van
display
waarde- floats: vlottend/zwevend (links/rechts), uit normale flow gehaald
- absolute positionering: krijgt absolute positie ten opzichte van de eerste niet static omvattende blok.
Position
eigenschap
static
(standaard)
Het element volgt de normale positie van het document. Offsets hebben geen invloed.
relative
Het element wordt gepositioneerd volgens zijn positie in de normale flow. Offsets zijn dus relatief aan zijn flow positie.
absolute
Het element wordt uit de normale flow gehaald en er wordt dus geen plaats voorzien. Zijn positie is relatief aan zijn voorouder (content area).
fixed
Het element wordt uit de normale flow gehaald en er wordt dus geen plaats voorzien. Zijn positie is relatief aan deviewport
. Dit betekent dat bij scrollen het element blijft staan.sticky
Het element varieert tussenrelative
enfixed
afhankelijk van de scrollpositie. Zijn positie is relatief aan zijn dichtsbijzijnde scrolling voorouder (bijvoorbeeld een element met scrollbar door overflow). Als je verder scrollt zal deze blijven plakken en meegaan alsfixed
element.Met de eigenschappen
top
,bottom
,... kan je de positie instellen van het element. Om het element voor of achter een element weer te geven kan jez-index
gebruiken.
Offset eigenschap
top
,right
,bottom
,left
We gebruiken offsets om een element te positioneren afhankelijk van zijn relatieve positie (viewport, voorouder,...)
Voorbeeld:div.absolute { position: absolute; top: 80px; right: 0; width: 200px; height: 100px; }Je kan hier een eenheid achter zetten (zie 2.2).
Door
float
(left/right) te gebruiken haal je het blok uit de normale flow en kan de inhoud van de onderliggende blokken erom heen lopen.
Voorbeeld metfloat: left
:
Door
clear
(none/left/right/both) te gebruiken kan men voorkomen dat de inhoud er rond loopt. Bij het gebruik vanclear
komt de inhoud van onderliggende blokken er onder te liggen.
Voorbeeld metclear: left
:
Voor volledige pagina lay-outs gebruiken we eerder
flex
engrid
.
Responsive design: media queries
We koppelen opmaak aan eigenschappen van een device.
media
queries:
- apparaat type (all, screen, print, speech)
- media kenmerken (breedte, orientatie)
- een blok van stijlregels die geldig izjn voor het gedeclareerde apparaat type en de media kenmerken
@media apparaat and (media feature) { selector { declaraties; } }@media screen and (min-width: 1024px) { main { display: grid; grid-template-columns: 66% 34%; } }In het bovenstaande voorbeeld zal indien het scherm minimaal 1024px breed is, het main element opgedeeld worden in twee kolommen van 66% en 34% van de breedte van het scherm.
2.10 Lay-out: grid
Extra leermateriaal (aangeraden)
Creëren van een grid container element
display: grid
block-level griddisplay: inline-grid
inline-level grid
#grid {
display: grid;
width: 100%;
grid-template-columns: 50px 1fr;
gap: 10px;
}
Definiëren van de grid
grid-template-rows
Rijen definiëren (aantal en hoogte)grid-template-columns
Kolommen definiëren (aantal en breedte)grid-template-areas
Area definiërengap
Ruimte tussen grid-elementen
#page {
display: grid;
width: 100%;
height: 250px;
grid-template-areas: "head head"
"nav main"
"nav foot";
grid-template-rows: 50px 1fr 30px;
grid-template-columns: 150px 1fr;
}
Gebruik van de
repeat()
functie
Met derepeat()
functie kan je een deel van een 'track list' herhalen. Zo kan met in plaats van:grid-template-columns: 1fr 1fr 1fr;Gebruik maken van:
grid-template-columns: repeat(3, 1fr)Het eerste getal geeft het aantal keer herhalen weer. Een meer uitgebreid voorbeeld:
grid-template-columns: 20px repeat(4, 1fr 2fr);Is hetzelfde dan:
grid-template-columns: 20px 1fr 2fr 1fr 2fr 1fr 2fr 1fr 2fr;Note: de eenheid
fr
is een flexibele ruimte die de overgebleven ruimte inneemt. Bij dus2fr 1fr
zal 2 delen aan de eerste waarde gegeven worden en 1 deel aan de tweede waarde.Bij de
repeat()
functie kan men ook gebruik maken vanauto-fill
enauto-fit
Hier zal de browser zelf het aantal kolommen of rijen bepalen aan de hand van de beschikbare ruimte van de container.grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));Bij bovenstaand stuk CSS zal de browser de blokken naast elkaar zetten tot de elk minder dan 150px ruimte over hebben. Dan zal de browser de blokken beginnen te verzetten naar volgende rij. Hebben ze meer ruimte dan 150px, dan verdelen ze de ruimte.
Het verschil tussenauto-fill
enauto-fit
, is dat bijauto-fill
de browser kolommen zal blijven aanmaken.auto-fit
zal de kolommen gewoon uitrekken. Onderstaande afbeelding maakt dit duidelijk. (bron)
Expliciet en impliciet raster
Bij een expliciet raster definiëren we manueel de columns en rijen met degrid-template-*
eigenschap (bovenstaand).Bij een impliciet raster zijn gedefiniëerde rijen en kolommen standaard 'auto-sized', maar je kan hiervoor een hoogte/breedte instellen via de properties
grid-auto-rows
engrid-auto-columns
. Een impliciet raster is het raster buiten het bereik van het expliciet raster. Voorbeeld (items 1 en 2 liggen in het impliciet grid):
Afmetingen tracks
Mogelijke afmetingen instellen voor tracks (lentewaarden px % fr):
max-content
lengte van de maximale content van het elementmin-content
lengte van de minimale content van het element (bv. 1 woord van een zin)minmax(min,max)
Vaak gebruikt bij grid-elementen, stelt de minimale en maximale waarde in van bv. een kolomfit-content(value)
zorgt er voor dat de content past door deze te verlenger naar onder toeauto
Rijen
grid-row-start
startrij van het elementgrid-row-end
eindrij van het elementgrid-row
afgekorte versie voor rijspan (bv.1 / 3
)In het onderstaande voorbeeld kan
grid-row-end: 3
ook alsgrid-row-end: span 2
geschreven worden.
#item1 {
background-color: lime;
grid-row-start: 1;
grid-row-end: 3;
}
#item2 {
background-color: yellow;
grid-row: 2 / 4;
}
Kolommen
grid-column-start
startkolom van elementgrid-column-end
eindkolom van elementgrid-column
afgekorte versie voor kolomspan (bv.1 / 2
)In het onderstaande voorbeeld kan
grid-column-end: 3
ook alsgrid-column-end: span 2
geschreven worden.
#item1 {
background-color: lime;
grid-column-start: 1;
grid-column-end: 3;
}
#item2 {
background-color: yellow;
grid-column: 2 / 4;
}
Grid area
We gebruikengrid-area
om het element op een specifiek gedefiniëerde area (metgrid-template-areas
) en om zowel de span van kolommen als rijen tegelijk te definiëren.
grid-area
: rowstart/columnstart/rowend/columnend#item1 { background-color: lime; grid-area: 2 / 2 / auto / span 3; }
grid-area
: areaid#item2 { background-color: green; grid-area: a; }
Ruimte tussen tracks
column-gap
ruimte tussen kolommenrow-gap
ruimte tussen rijengap
ruimte tussen zowel kolommen als rijen (rij, kolom) (beide)
Er zijn 2 mogelijke uitlijningen
- Uitlijnen van grid in zijn container
justify-content
(start/center/space-between/space-around/space-evenly) horizontaal uitlijnenalign-content
(start/center/space-between/space-around) verticaal uitlijnen- Uitlijnen van een item in een grid-cell/track/area
- Alle items in grid (flexbox, declaratie in container element)
justify-items
horizontaal uitlijnenalign-items
verticaal uitlijnen- Éen item zelf (declaratie in specifieke item)
justify-self
horizontaal uitlijnenaligin-self
verticaal uitlijnenAutomatisch staat deze waarde op
stretch
(volledig vullen van de cel).Belangrijk: om een gewone box te centreren, kunnen we de
margin
waarde opauto
zetten!
TIP: Om elementen in hun respectievelijke cel zowel horizontaal als verticaal te centreren, maken we van het element een grid container met
display: grid
en gebruiken wejustify-items: center
enalign-items: center
. Voorbeeld:
.grid-center {
display: grid;
justify-items: center;
align-items: center;
}
2.11 Flex container
Je creëert een flex container-element met
display: flex
display: inline-flex
Alle directe kindelementen worden flexitems.
Flex containers hebben een main axis en een cross axis.
Standaard gaat de main axis van links naar echts en de cross axis van boven naar onder. Dit kan aangepast worden met deflex-direction
(row, row-reverse, column, column-reverse) property.
Overflow (flex wrap)
Overflow van inhoud wordt geregeld metflex-wrap
(nowrap/wrap/wrap-reverse).
Afgekortflex-flow
.
De uitlijning is op dezelfde manier van
grid
. Er zijn 2 mogelijke uitlijningen
- Uitlijnen van grid in zijn container
justify-content
(start/center/space-between/space-around/space-evenly) uitlijnen langs main axisalign-content
(start/center/space-between/space-around) uitlijnen langs cross axis- Uitlijnen van een item in een grid-cell/track/area
- Alle items in grid (flexbox, declaratie in container element)
justify-items
(stretch/start/center/end/base-line) uitlijnen langs main axisalign-items
(stretch/start/center/end/base-line) uitlijnen langs cross axis- Éen item zelf (declaratie in specifieke item)
justify-self
(stretch/start/center/end/base-line) uitlijnen langs main axisaligin-self
(stretch/start/center/end/base-line) uitlijnen langs cross axis
Je kan bij flex-items makkelijk de tussenruimte verdelen met
justify-content
opspace-between
,space-evenly
ofspace-around
te zetten.
Men kan de volgorde van items wijzigen met de
order
eigenschap (op item niveau).
De initiële grootte van een flex item kan ingesteld worden met
flex-basis
.
Flex items kunnen groeien of krimpen als er extra plaats (nodig) is in de container. Dit doen we met
flex-grow
enflex-shrink
. Als deze waarde 0 is, kan deze niet groeien of krimpen. Vanaf >0 kan dit wel.
De afgekorte versie hiervan is gewoonflex
.flex-grow: 2; flex-shrink 1; flex-basis: auto;wordt:
flex: 2 1 auto;Handig voorbeeld: Om alle flex cellen even lang te maken over de breedte van een pagina, kan men de
flex-basis
op 0 zetten en deflex-grow
op 1.
In het onderstaande voorbeeld staat
margin
opauto
(standaardwaarde).
HTML | CSS |
---|---|
<ul>
<li>Branding</li>
<li>Home</li>
<li>Services</li>
<li>About</li>
<li>Contact</li>
</ul> |
ul {
display: flex;
}
li {
flex: 0 0 auto;
} |
In het onderstaande stellen we de rechtermarge in op
auto
.
HTML | CSS |
---|---|
<ul>
<li>Branding</li>
<li>Home</li>
<li>Services</li>
<li>About</li>
<li>Contact</li>
</ul> |
ul {
display: flex;
}
li {
flex: 0 0 auto;
}
li:nth-child(1) {
margin-right: auto;
} |
In het laatste voorbeeld zetten we ook de linkermargin op
auto
.
Als je custom lettertypes wilt gebruiken zijn er 2 opties om deze op een webpagina te gebruiken.
- Beschik je over fysieke bestanden:
- Download alle varianten
- Plaats deze op de webserver in een aparte folder
- Gebruik
@font-face
in CSS om lettertypes beschikbaar te maken- Beschik je over een embedcode:
- Zoek bv. een Google Font en kies de gewenste stijlen
- Kopieer de embedcode
- Plaats dit in
head
van HTML pagina- Of
@import
regel in de CSS
Eigenschappen van lettertypes
font-family
geprioritiseerde lijst van lettertypesfont-size
grootte van het lettertypefont-size-adjust
om de tekstgrootte gelijk te houden wanneer wordt teruggevallen op een 2de,.. keus in de font-familyline-height
regelafstand, hoeveelheid wit tussen regels tekstfont-weight
de vetheid, 100-900 ofnormal
,bold
,bolder
,lighter
font-style
weergave tekst, zoals normal, italic of obliquefont-variant
kleinkapitaal, zoals small-capsfont-stretch
uitrekken of indrukkenfont
de verzameleigenschap: font-style font-variant font-weight font-size/line-height font-family
Eigenschappen van tekst
color
kleurtext-align
uitlijnen (left, right, center, justify,..)text-align-last
uitlijnen laatste regeltext-decoration
lijneffecttext-indent
inspringen van de eerste regel van een tekstbloktext-orientation
horizontale of verticale teksttext-overflow
overlopende tekst, bepaald welk visueel effect de gebruiker krijgt als er meer tekst is dna hij ziettext-shadow
schaduwtext-transform
hoofdletters, kleine letters,..white-space
witruimte al dan niet behoudenletter-spacing
ruimte tussen lettersword-spacing
ruimte tussen woordenword-break
automatisch afbrekenoverflow-wrap
is afbreken van een woord toegestanline-height
afstand tussen regelsborder-bottom
versiering lijn van de box
Eigenschappen voor lijstopmaak
list-style-type
opsommingstekenlist-style-image
afbeelding als opsommingstekenlist-style-position
plaatsing opsommingstekenlist-style
afkorting
2.13 Kleuren
Kleuren kunnen op 4 manieren omschreven worden:
- een rgb(a)-code:
rgba(145,233,12,0.7)
(red, green, blue, (opacity))- een (verkorte) hex-code:
#1e85af
- keyword:
red
,green
,blue
- een hsl(a)-code:
hsl(0, 100%, 100%)
(hue, saturation, lightness, (opacity))
opacity
: transparantie (waarde tussen 0 en 1)
Kleurverlopen
linear-gradient
lineair verloop (bv. links naar rechts, boven naar onder)radial-gradient
radiaal verloopHet gemakkelijkste is om hier een generator voor te gebruiken.
2.14 Achtergrond
Iedere box van een element heeft een achtergrond, default transparent
background-color
achtergrondkleurbackground-image
de afbeeldingbackground-repeat
herhalen van de afbeelding tot alle ruimte in het blok is gevuldbackground-attachment
een afbeelding schuift standaard mee met de rest van de pagina, maar je kan hem ook vastzettenbackground-position
plaatsingbackground-clip
weergave overloopbackground-origin
plaatsingbackground-size
schalenbackground
verkorte versie
2.15 Afgeronde hoeken
Men kan de hoeken van elementen afronden. Dit doen we met:
border-radius
alle hoeken afrondenborder-top-left-radius
linksboven afrondenborder-top-right-radius
rechtsboven afrondenborder-bottom-left-radius
linksonder afrondenborder-bottom-right-radius
rechtsonder afrondenHier bestaat ook een generator voor.
Beeld voor de rand van een element
border-image
afgekorte versieborder-image-source
de afbeeldingborder-image-slice
opdelen van beeld in regio'sborder-image-width
breedteborder-image-outset
de afstand waarmee de randafbeelding wordt uitgezet ten opzichte van zijn randkaderborder-image-repeat
hoe vult het beeld de randHier bestaat eveneens een generator voor.
box-shadow
schaduw onder een elementHier bestaat een generator voor.
clip-path
definieert een gebied/vorm en alles daarbuiten wordt weggekniptHier bestaat een generator voor.
Beeldfilters
filter
toepassen van grafische effecten, zoals blur of color shift, op afbeeldingen
Kleuren mengen
background-blend-mode
mengen van achtergrondsafbeeldingen en achtergrondskleur elementmix-blend-mode
inhoud van element mengne met zijn achtergrond en inhoud ouderelementen
Rekenen
Je kan+
,-
,*
en/
gebruiken met alle eenheden.
De functie
var()
Je kan globale variabelen definiëren in het:root
element (zie voorbeeld).:root { --main-bg-color: pink; } body { background-color: var(--main-bg-color) }Dit doen we met een
property value
.
SASS is een CSS extension language. Het voegt extra features toe aan CSS. Tot voor kort ondersteunde CSS geen variabelen, maar in SASS bestaan variabelen al meer dan 10 jaar. SASS biedt naast variabelen ook nog andere features zoals interpolation, nested rules, mixins, functions, partials,... aan.
Voor SASS hebben we een preprocessor nodig, zoals 'Live Sass Compiler'. We schrijven deze code in een
.scss
bestand. Door opWatch Sass
zal het bestand omgezet worden naar een normaal css bestand.
Men kan makkelijk variabelen maken met een
$
teken. Voorbeeld:
// Variabelen
$primary-color: rgb(173, 178, 247);
$light: white;
$font: Calibri, sans-serif;
$nav-link-color: white;
//Basis stijlen
body {
font-family: $font;
font-size: 1.1rem;
}
h1 {
font-size: 3rem;
text-align: center;
}
body, header {
background-color: $primary-color;
}
//...
Vergeet geen link te leggen naar het CSS bestand vanuit HTML.
Met SASS kan je stijlregels nesten. Zo kan je onderstaande code
nav ul {
...
}
nav a {
...
}
Als volgt schrijven:
nav {
ul {
...
}
a {
...
}
}
Met het
&
teken kan men de parent selecteren in een nesting. Voorbeeld:
nav {
a {
display: block;
color: $nav-link-color;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
}
&:hover
staat in dit geval gelijk aannav a:hover
Als je veel CSS
@import
-statements gebruikt dan kan dit het laden van de CSS in de browser vertragen. We doen dit beter uit slechts één file.
We kunnen in de main SCSS klasse bv.@import "variables"
zetten. Dan zal de file genaamd_variables.scss
door de compiler meegecompiled worden in 1 klasse. Je kan zo veel import regels doen als je wilt.
Note: de naam van een partial scss file moet met een_
beginnen.
Bootstrap is een CSS-framework om op een eenvoudige en snelle manier een responsive website te maken. Er zijn twee manieren om bootstrap te gebruiken.
- Compiled version
Als we werken met de compiled version kan met Bootstrap gewoon zien als een CSS file (ev. met javascript).- Source files
Het is ook mogelijk om met de .SCSS source files te werken en zelf het framework aan te passen.We maken zelf meestal gebruik van gewoon de
bootstrap.css
file.
Om de webpagina van enige padding te voorzien en om eventueel de inhoud te centreren moet je een bootstrap container gebruiken. We voegen dus
class="container"
toe aan bv. een<div>
element. Naar mate je venster vergroot/verkleint zal de container zich aanpassen.
Het bootstrap grid system gebruikt
containers
,rows
encolumns
. Op onderstaande foto zie je hoe dit in zijn werk gaat.
4.3.1 Reboot
Bootstrap maakt gebruik van een reboort-file die gebaseerd is op
normalize.css
. Je kan dit controleren doorbootstrap-reboot.css
eens te openen in VSCode.
4.3.2 Afbeeldingen
We kunnen afbeeldingen makkelijk responsive maken door aan het
<img>
element de bootstrap klasseimg-fluid
toe te wijzen.
4.4.1 Buttons
We kunnen met Bootstrap snel mooie buttons maken door bv.
class="btn btn-primary"
toe te voegen aan een<button>
element. Meer voorbeelden:
Er zijn nog veel componenten in bootstrap. Hiervoor ga je best naar de workshop 02_bootstrap_workshop.pdf
of naar de boostrap website.