Skip to content

Latest commit

 

History

History

les6

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Les 6

Inhoudsopgave




Opdracht: W3C validator

Wanneer je een website maakt is het belangrijk dat hier geen fouten in staan. Een manier om dit te voorkomen is door handmatig op zoek te gaan naar fouten. Hoewel dit altijd onderdeel van het werk zal zijn, bestaan er ook tools die voor jou geautomatiseerd op zoek gaan naar fouten. Vandaag ga je kijken naar de W3C validator.

De W3C validator controleert of jouw HTML voldoet aan alle regels die er zijn voor HTML. Het gebruik ervan is heel simpel: je geeft het de HTML-code en je drukt op Check. Vervolgens krijg je een lijst met errors en warnings over jouw code, die je vervolgens kan oplossen.

De opdracht

Voer de volgende stappen uit:

  1. Ga naar de W3C validator;
  2. Standaard vraagt hij om een URL, maar als jouw website nog niet online staat kan je klikken op Validate by Direct Input, waarna je de HTML-code kan kopiëren en plakken;
  3. Klik op de knop Check;
  4. Je krijgt nu een lijst met errors en warnings en info (zie screenshot hieronder). Errors moet je altijd oplossen, warnings zijn vaak een goed idee om op te lossen en info is over het algemeen puur ter informatie.
  5. Lees de meldingen aandachtig door en probeer ze op te lossen in de code. Begrijp je een melding niet? Kopieer de melding dan en plak deze in Google. De kans is zeer groot dat je dan het antwoord zult vinden. Ga door tot alle meldingen zijn opgelost.

W3C validator




Formulieren

Het is met HTML mogelijk om een formulier te maken die de gebruiker kan invoeren. Met CSS is dit formulier vervolgens volledig naar wens te vormgeven. In deze les zal je leren hoe je zo'n formulier maakt, welke opties er zijn en hoe je deze vormgeeft.

Hieronder vind je een voorbeeld van een standaard formulier:

<form>
    <label for="first-name">Voornaam</label>
    <input type="text" name="first-name" id="first-name">

    <label for="last-name">Achternaam</label>
    <input type="text" name="last-name" id="last-name">

    <button type="submit">Verzenden</button>
</form>



Type invoervelden

In een formulier plaats je de gewenste invoervelden. De meeste invoervelden maak je met de HTML-tag <input>, maar er zijn ook een aantal andere HTML-tags. In de tabellen hieronder staan de meestgebruikte HTML-tags voor invoervelden en de meestgebruikte input-types.


HTML-tags voor invoervelden

HTML-tag Omschrijving
input Meestgebruikte HTML-tag voor invoervelden. Door het attribuut type in te voeren bepaal je het type invoerveld. Zie de tabel hieronder met de meestgebruikte input-types.
textarea Een tekstveld met meerdere regels. Hierin kan je dus ook enters invoeren.
select Een dropdown om een lijst met opties weer te geven. Iedere optie voer je in de <select> in als <option>. De gebruiker kan maximaal 1 optie kiezen.
label Dit is geen invoerveld, maar de label die aangeeft wat de inhoud van het bijbehorende invoerveld moet zijn. Ieder invoerveld moet een label hebben. Wanneer je op de label klikt, wordt het bijbehorende invoerveld geselecteerd (mits je de koppeling juist hebt gemaakt).



Input-types

De tag <input> kan je gebruiken voor meerdere type invoervelden. De keuze maak je door het attribuut type in te voeren. Dus bijvoorbeeld <input type="email">. In de tabel hieronder vind je de types die we voor deze les nodig hebben. Hier vind je alle mogelijke input-types: https://www.w3schools.com/html/html_form_input_types.asp

Input-type Omschrijving
text Invoerveld voor tekst
email Invoerveld voor een emailadres.
checkbox Invoeren van een checkbox
radio Invoeren van een radio-button
date Invoeren van een datepicker

Voorbeelden van input

<label for="first-name">Naam:</label>
<input type="text" id="first-name" name="first-name">

<label for="birthdate">Datum</label>
<input type="date" id="birthdate" name="birthdate">

<label for="email">Email</label>
<input type="email" id="email" name="email">


Met het attribuut placeholder kan je de gebruiker een voorbeeld geven van wat er in het veld ingevuld moet worden:

<input type="email" id="email" name="email"  placeholder="studentnummer@hr.nl">

Voorbeeld van select

<label for="cars">Kies een auto</label>
<select id="cars" name="cars">
    <option value="" disabled selected>Kies een auto</option>
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="fiat">Fiat</option>
    <option value="audi">Audi</option>
</select>

Checkboxes

<input type="checkbox" id="cat" name="cat" value="Cat">
<label for="cat">Ik heb een kat</label>

<input type="checkbox" id="dog" name="dog" value="Dog">
<label for="dog">Ik heb een hond</label>

<input type="checkbox" id="capibara" name="capibara" value="Capibara">
<label for="capibara">Ik heb een capibara</label>

Radio buttons

Let op dat je hier het attribuut name voor iedere input hetzelfde moet invoeren. De gebruiker kan hierdoor maar één van de opties selecteren.

<input type="radio" id="pizza" name="menu" value="pizza">
<label for="pizza">Pizza</label>

<input type="radio" id="sushi" name="menu" value="sushi">
<label for="sushi">Sushi</label>

<input type="radio" id="kaas" name="menu" value="kaas">
<label for="kaas">Kaassoufflé</label>

Het label is niet alleen voor de leesbaarheid maar helpt ook om de "click area" van het element groter te maken

Meer form elementen

Op W3Schools vind je nog meer voorbeelden voor Forms en Form Elements



Required fields

Je kan velden verplicht maken met het attribuut required. Wanneer de gebruiker dan het formulier submit, terwijl het verplichte veld nog leeg is, dan wordt hier een melding van getoond en wordt het formulier niet verzonden. Dit attribuut verwacht geen waarde. Je zet dus niet required="" neer, maar slechts required.

Let op dat dit niet gebruikt kan worden voor security (het required field is te omzeilen via de browser inspector), maar daarover volgende periode meer bij Programmeren 2.

<label for="username">Username:</label>
<input type="text" id="username" name="username" required>



Formulier versturen

Om de data van je formulier te kunnen versturen moet je alle invulvelden binnen een <form> staan. Die moet weer het attribuut action bevatten, waarin bepaald naar welke URL het formulier verzonden moet worden.

Om het formulier te kunnen verzenden heb je wel een submit button nodig! Zie hieronder een voorbeeld van een formulier met submit button.

<form action="contact-bedankt.html">
    <!-- Hier komen ALLE form elementen -->

    <!-- De submit button verstuurt het formulier -->
    <button type="submit">Versturen</button>
</form>

Data verwerken

In kwartaal 2 en 3 gaan we leren hoe we de ingevulde data uit het formulier kunnen gebruiken in onze applicatie.

  • Kwartaal 2: Gebruik PHP om de data op te slaan in een database.
  • Kwartaal 3: Gebruik Javascript om de data te gebruiken in een front-end applicatie.



Styling

De default styling van veel form-elementen is niet erg mooi en niet optimaal leesbaar. Gelukkig kan je form-elementen volledig naar wens vormgeven met CSS. Een aantal tips om het leesbaarder te maken:

  • stel de font-size van de inputs in op de standaard font-size door deze op 1rem in te stellen;
  • voeg padding toe om de leesbaarheid te verbeteren.
  • gebruik accent-color om al je input elementen een default kleur te geven die past bij je website.
/* voorbeeld: alle input elementen */
input {
    font-size:1rem;
    accent-color:red;
}
/* voorbeeld: alleen text input */
input[type=text] {
    padding:2px;
    font-size:1rem;
}

select {
  padding: 6px;
  font-size: 1rem;
  border: 0;
}


Ook de submit button is geheel naar wens vorm te geven. Dit werkt nagenoeg hetzelfde zoals je een <a> zou vormgeven, met als uitzondering dat op een button de muisaanwijzer niet automatisch een handje wordt wanneer die op de button staat. Dit kan je oplossen door de CSS-optie cursor op pointer in te stellen. Je kan all:unset; gebruiken om alle default styling van een button te verwijderen.

button {
  all:unset;
  padding: 6px;
  font-size: 1rem;
  border-radius: 8px;
  border: 0;
  background-color: darkblue;
  color: white;
  cursor: pointer;
}

button:hover {
  background-color: lightblue;
  color:darkblue;
}

button:active {
    background-color: red;
}

Styling voor checkboxes en radio buttons

Behalve accent color zijn er niet veel mogelijkheden om checkboxes en radio buttons te stylen. Je kan echter wel je eigen checkbox / radio button bouwen. Bekijk hier een voorbeeld..




Formulier responsive maken

Op desktop zet je de labels meestal naast je form-element. Dit kan je doen door het label en form-element in een div te plaatsen die je vervolgens als Flexbox instelt.

<div class="formfield">
    <label for="name">Naam</label>
    <input type="text" name="name" id="name">
</div>

<div class="formfield">
    <label for="email">Email</label>
    <input type="email" name="email" id="email">
</div>
.formfield {
  display: flex;
  justify-content: space-between;
  flex-direction:row;
}

Mobile

Op mobile veranderen we de flex-direction in column zodat de items onder elkaar komen te staan.

@media (max-width: 480px) {
  .formfield  {
    flex-direction:column;
  }
}



Validatie feedback met CSS

Je kan via CSS de stijl aanpassen van een form element dat niet goed is ingevuld.

<input type="email" required placeholder="piet@henk.nl">
input:user-invalid {
    background-color:pink;
    border: 2px solid red;
} 



Opdracht: Forms

In de komende opdrachten werk je toe naar een compleet formulier met alle opties die hierboven zijn besproken. Dit formulier ga je op een andere pagina maken dan de homepage. Dus je hebt de index.html, waar je tot nu toe in het hebt gewerkt, wat de homepage is. In onderstaande opdracht ga je ook een contact.html maken, waarin jouw formulier komt te staan. Dit bestand bekijk je via een andere URL dan de homepage, waardoor je dus twee verschillende pagina's kan bezoeken.


Opdracht 1: Nieuw project opzetten

Voor de lesopdracht van vandaag moet je een nieuw project opzetten, anders kan je opdracht 6 namelijk niet uitvoeren. Voer de volgende stappen uit:

  1. Maak een nieuw project aan en noem die forms, zoals omschreven in opdracht 1c van les 1. Zet daarin de bestandsstructuur neer, zoals omschreven in opdracht 1d uit les 1.
  2. Maak vervolgens in de nieuwe map forms nog een bestand aan met de naam contact.html. Kopieer de volledige inhoud van index.html en plak deze in contact.html. Dubbelcheck of je nu in beide bestanden dezelfde link hebt naar de style.css, zodat je dezelfde stijl op beide pagina's kan gebruiken.
  3. Kopieer vervolgens onderstaande startcode. Pas nog wel in beide HTML-bestanden de href van alle linkjes aan in de <nav>, zodat deze linken naar de juiste pagina. Voor meer info over hoe je dit correct instelt, lees dit dan hier terug bij les 3.
  4. Open de index.html met Live Server en controleer of de navigatie werkt. Wanneer je naar de andere pagina navigeert zou de <h1> moeten veranderen, want die is anders per pagina, maar de vormgeving zou wel hetzelfde moeten blijven.

⚠️ Zorg ervoor dat je de HTML-code in de <body> plakt!


index.html

<nav>
    <a href="">Home</a>
    <a href="">Contact</a>
</nav>

<main>
    <div class="center-container">
        <section>
            <h1>Homepage</h1>
        </section>
    </div>
</main>

contact.html

<nav>
    <a href="">Home</a>
    <a href="">Contact</a>
</nav>

<main>
    <div class="center-container">
        <section>
            <h1>Contactformulier</h1>
        </section>
    </div>
</main>

style.css

* {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
    background-color: #EDF0F7;
}

h1 {
    font-size: 2.5rem;
    margin-top: 0;
}

.center-container {
    margin: 0 auto;
    width: 90vw;
    max-width: 650px;
}

nav {
    background-color: #FFFFFF;
    padding: 15px 30px;
    display: flex;
    justify-content: flex-end;
    gap: 25px;
    border-bottom: 2px solid #1A202C;
}

nav a {
    color: #717D96;
    text-decoration: none;
}

nav a:hover {
    text-decoration: underline;
}

main {
    padding: 50px 0;
}



Opdracht 2: HTML formulier

In deze opdracht ga je de HTML van het formulier schrijven. Bouw hiervoor het formulier in onderstaand ontwerp na. Zorg ervoor dat het er inhoudelijk echt hetzelfde uitziet. Dus voer ook de placeholders in, maak alle velden required en kies de juiste type per veld.

Het enige wat je voor deze opdracht in de CSS moet doen is ervoor zorgen dat de inhoud van <form> als een column wordt weergegeven, zodat alles onder elkaar komt te staan.

Bij de <select> onder Verstuur naar* moet je kunnen kiezen uit de volgende docenten: Antwan, Bas, Erik en Martijn.

Wil je het formulier ook echt versturen? Kijk dan naar opdracht 6.

Opdracht 2



Opdracht 3: CSS formulier

Op dit moment is alle HTML geschreven, maar het ziet er nog niet zo mooi uit. Schrijf daarom de CSS, zodat het eruit ziet als onderstaand ontwerp. Bedenk hoe je Flexbox hiervoor kan inzetten.

Opdracht 3



Opdracht 4: Responsive

Je formulier ziet er nu mooi uit! Maar op mobile wordt het erg krap. Zorg er daarom voor dat jouw formulier eruit ziet zoals in onderstaand ontwerp.

Opdracht 4



Opdracht 5: Validatie

Jouw formulier ziet er nu mooi uit én is goed leesbaar op mobile. De laatste stap is om validatie toe te passen. Dat betekent dat je aangeeft welke velden correct zijn ingevoerd en welke nog niet. Dus wanneer er bijvoorbeeld geen naam is ingevoerd moet dat veld een rode rand krijgen. Zo wordt het voor de gebruiker duidelijk welke velden er nog ingevoerd moeten worden. Zorg er daarom voor dat jouw formulier er hetzelfde uitziet als in onderstaand ontwerp.

Opdracht 5



Opdracht 6: het formulier versturen

Tijdens dit vak ga je niet leren hoe je dit formulier kan verzenden, dat komt in de volgende periode. Om je toch te laten zien dat je dit formulier nu daadwerkelijk kan verzenden hebben we een testfunctie gemaakt waardoor jouw formulier wordt gemaild. Voer daarvoor de volgende stappen uit:

  1. In de <select> kies je een docent en naar diegene wordt jouw vraag gemaild. Om dit werkend te maken moet je bij ieder formulier-element de juiste name invoeren. De volgende names zijn nodig: 'name', 'city', 'email', 'birthdate', 'category', 'question' en 'send-to'. Iedere docent heeft trouwens een eigen nummer die je als value in moet stellen: 0 = Antwan, 1 = Bas, 2 = Erik en 3 = Martijn.

  2. Vervang de openings <form> tag voor onderstaande. De betekenis van deze attributen leer je bij Programmeren 2.

<form action="https://docent.cmi.hr.nl/moora/frontend/send-mail.php" method="POST">
  1. Maak in de map van deze opdracht (dus forms) een nieuw bestand aan met de naam contact-bedankt.html. Nadat je het formulier hebt verzonden word je automatisch doorgestuurd naar deze pagina. Zet hierop een tekst als "Bedankt voor je vraag, de gekozen docent zal er zo snel mogelijk op reageren.". Test of het werkt door op de submit button te klikken.



Links