Beetje Coderen

Les 2

Je eerste HTML-pagina

De opbouw van een HTML-document: doctype, head en body.

โฑ 45–60 minuten leestijd + oefenen

๐ŸŽฏ Na deze les kun je

  • een geldig HTML-document schrijven
  • elementen, tags en attributen onderscheiden
  • een pagina valideren

Elke website die je ooit bezocht, bestaat uit HTML. HTML (HyperText Markup Language) is geen programmeertaal: je geeft er geen opdrachten mee, je beschrijft wat iets is. "Dit is een kop." "Dit is een alinea." "Dit is een link." De browser leest die beschrijving en toont de pagina.

In deze les schrijf je je eerste complete HTML-pagina: een digitaal visitekaartje. Je hebt alleen een teksteditor en een browser nodig.

Wat je nodig hebt

  • Een teksteditor voor code. We gebruiken Visual Studio Code (gratis, code.visualstudio.com). Kladblok of TextEdit kan ook, maar die helpen je niet met kleuren en inspringen.
  • Een browser: Firefox, Chrome, Edge of Safari.

Maak een map visitekaartje en daarin een bestand index.html. De naam index.html is een afspraak: als je een map opent op een webserver, toont die automatisch dit bestand.

Let op dat je bestand echt op .html eindigt en niet op .html.txt. Zet in Windows bij de Verkenner Bestandsnaamextensies aan, zodat je dat kunt zien.

Het skelet van een HTML-pagina

Typ dit over in index.html (overtypen leert meer dan plakken):

<!doctype html>
<html lang="nl">
  <head>
    <meta charset="utf-8">
    <title>Visitekaartje van Sam de Vries</title>
  </head>
  <body>
    <h1>Sam de Vries</h1>
    <p>Student HBO-ICT in Utrecht.</p>
  </body>
</html>

Sla op en open het bestand in je browser (dubbelklikken, of slepen naar een browservenster). Je ziet een grote kop en een regel tekst. De tekst Visitekaartje van Sam de Vries staat bovenin het tabblad.

Wat betekent elke regel?

Regel Betekenis
<!doctype html> "Dit is een moderne HTML-pagina." Altijd de eerste regel.
<html lang="nl"> Begin van de pagina; de taal is Nederlands. Schermlezers en vertaalprogramma's gebruiken dat.
<head> Informatie over de pagina. Wordt niet als inhoud getoond.
<meta charset="utf-8"> De tekencodering. Zonder deze regel kunnen รฉ, รซ en โ‚ฌ als rare tekens verschijnen.
<title> De titel in het tabblad en in zoekresultaten.
<body> Alles wat je op de pagina ziet.

Elementen, tags en attributen

   openingstag          sluittag
   โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”          โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
   <p class="intro">Hallo!</p>
      โ””โ”€โ”€โ”ฌโ”€โ”€โ”˜ โ””โ”€โ”ฌโ”€โ”˜
     attribuut  waarde
   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ element โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  • Een element is een onderdeel van de pagina, zoals een alinea.
  • Het begint met een openingstag <p> en eindigt met een sluittag </p> (met een schuine streep).
  • Tussen de tags staat de inhoud.
  • Een attribuut geeft extra informatie, altijd in de openingstag: naam="waarde".

Sommige elementen hebben geen inhoud en dus geen sluittag, zoals <meta charset="utf-8"> en straks <img>. Die heten lege elementen (void elements).

Nesten

Elementen mogen binnen andere elementen staan. Je sluit ze in omgekeerde volgorde:

<p>Dit is <strong>heel</strong> belangrijk.</p>      <!-- goed -->
<p>Dit is <strong>heel belangrijk.</p></strong>      <!-- fout -->

Het tweede voorbeeld zie je vaak bij beginners. De browser probeert het te repareren, maar het resultaat is onvoorspelbaar.

<!-- ... --> is commentaar: de browser negeert het. Handig voor notities.

Inspringen

Het maakt de browser niet uit hoe je inspringt of hoeveel witregels je gebruikt; meerdere spaties worden รฉรฉn spatie. Inspringen is voor jou: zo zie je in รฉรฉn oogopslag welk element binnen welk element staat. Spring elk genest element 2 spaties in. VS Code doet dat voor je met Format Document (Shift+Alt+F of Shift+Option+F).

Voorspel: hoe ziet dit eruit in de browser?

<p>Hallo
       wereld,     hoe
  gaat het?</p>

Antwoord: Hallo wereld, hoe gaat het? op รฉรฉn regel. Witruimte en regeleinden in de code worden รฉรฉn spatie. Een nieuwe alinea maak je met een nieuwe <p>.

Uitgewerkt voorbeeld: een visitekaartje

<!doctype html>
<html lang="nl">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Sam de Vries ยท visitekaartje</title>
  </head>
  <body>
    <h1>Sam de Vries</h1>
    <p>Student HBO-ICT ยท webontwikkeling</p>
    <p>
      E-mail: <a href="mailto:sam@example.nl">sam@example.nl</a><br>
      Woonplaats: Utrecht
    </p>
    <p><strong>Op zoek naar:</strong> een stageplek vanaf februari.</p>
  </body>
</html>

Nieuw hierin:

  • <meta name="viewport" ...> zorgt dat de pagina op een telefoon niet piepklein wordt getoond. Zet hem er altijd in; in les 14 lees je waarom.
  • <a href="mailto:..."> maakt een link die je mailprogramma opent. Links komen in de volgende les uitgebreid aan bod.
  • <br> is een regeleinde binnen een alinea. Gebruik het spaarzaam, voor regels die echt bij elkaar horen (zoals een adres).
  • <strong> betekent "belangrijk"; de browser toont het vet.

Valideren

Een validator controleert of je HTML klopt. Ga naar validator.w3.org, kies Validate by Direct Input, plak je code en klik Check. Zonder fouten zie je: Document checking completed. No errors or warnings to show.

Een veelvoorkomende melding:

Error: End tag "strong" seen, but there were open elements.

Je hebt tags in de verkeerde volgorde gesloten. De validator noemt het regelnummer.

Valideer na elke les je werk. Fouten die een browser stilletjes repareert, gaan vaak mis in een andere browser of bij een schermlezer.

Typische fouten

Symptoom Oorzaak
รƒยฉ in plaats van รฉ <meta charset="utf-8"> ontbreekt, of het bestand is niet als UTF-8 opgeslagen.
De halve pagina is vet of een link Een sluittag ontbreekt, bijvoorbeeld </strong> of </a>.
Je ziet de code in plaats van de pagina Het bestand heet index.html.txt of je opende het in de editor in plaats van de browser.

Oefeningen

Oefening 1. Wat is in <a href="mailto:sam@example.nl">Mail mij</a> het element, de tag, het attribuut en de inhoud?

Modelantwoord oefening 1

Het element is het geheel. De tags zijn <a ...> en </a>. Het attribuut is href met waarde mailto:sam@example.nl. De inhoud is Mail mij.

Oefening 2. Vind de drie fouten:

<html>
  <head><title>Mijn pagina</head></title>
  <body>
    <p>Welkom op <strong>mijn pagina</p>
  </body>
Modelantwoord oefening 2
  1. <!doctype html> ontbreekt (en lang en <meta charset>).
  2. </head></title> staat in de verkeerde volgorde: eerst </title>, dan </head>.
  3. <strong> wordt niet gesloten, en </html> ontbreekt aan het eind.

Oefening 3. Voeg aan je visitekaartje een regel toe met je opleiding en een regel met je hobby's, elk in een eigen alinea.

Modelantwoord oefening 3
<p>Opleiding: HBO-ICT, Hogeschool Utrecht</p>
<p>Hobby's: fietsen, koken en bordspellen</p>

Lab: een visitekaartje-pagina

  1. Maak index.html met het volledige skelet: doctype, html lang="nl", head met charset, viewport en title, en een body.
  2. Zet in de body een h1 met je naam en minstens drie alinea's (opleiding, contact met een mailto-link, wat je zoekt).
  3. Valideer met validator.w3.org tot er geen fouten meer zijn.
  4. beetje check html-css-les2

Samenvatting

  • HTML beschrijft wat iets is; de browser bepaalt hoe het eruitziet.
  • Elk document: <!doctype html>, <html lang>, <head> (met charset, viewport, title) en <body>.
  • Een element = openingstag + inhoud + sluittag; attributen staan in de openingstag.
  • Sluit geneste elementen in omgekeerde volgorde. Spring in voor jezelf.
  • Valideer met validator.w3.org.

Volgende les: koppen, tekst, links en afbeeldingen.

Lab

Een visitekaartje-pagina

Dit lab doe je helemaal in je browser; er wordt niets op een server uitgevoerd.

Klaar? Controleer je werk met:

$ beetje check html-css-les2

๐Ÿ“ Quiz: je eerste HTML-pagina

5 vragen ยท 70% nodig om te slagen

1. Wat is altijd de eerste regel van een HTML-document?
2. Waar staat de inhoud die je op de pagina ziet?
3. Wat is het attribuut in <html lang="nl">?
4. Wat toont de browser bij <p>Hallo wereld</p>?
5. Wat is goed genest?