I denna laboration ska du experimentera med formulär. Laborationen är uppdelad i två delar. I 7C-1 ska du skapa ett formulär och i 7C-2 ska du se hur hanteringen går till då formulär skickas.
Laboration 7C-1 - Skapa ett formulär
I denna del av laborationen ska du i HTML skapa ett formulär med några olika typer av objekt. Du ska också stilsätta det med CSS.
Förberedelser
- Öppna mappen L7c i Visual Studio Code (VSC).
- Öppna filerna index.html och style.css i VSC och öppna sidan i Live Server.
- Studera den kod som finns i HTML- och CSS-filerna, så att du blir insatt i den.
Grunden för formuläret
HTML
- Skriv in start- och sluttagg för ett
form-element med attributetid="booking". - Skapa struktur genom att lägga in fyra
fieldset-element med varsittlegend-element. Ilegendskriver du Val av rum, Datum och antal nätter, Tillägg samt Kund. - I starttaggen för
fieldset-elementen lägger du inid-attribut, så att vi sedan kan referera till dem i CSS-koden. Använd namnen “room”, “date”, “facilities” och “customer” iid-attributen. - Efter sista
fieldsetlägger du in eninput-tagg med attributentype="submit",value="Skicka förfrågan"ochid="send".
CSS
- Skriv en regel för
#booking(dvs hela formuläret) medpadding 20px; - Lägg till en regel för
#booking fieldsetmedbackground-color: #FED;ochmargin-bottom: 20px; - Skriv en regel för
#booking legendmed stil för fetstil och kursiv stil. - Skriv även en regel för
#sendmeddisplay: block;ochmargin-left: auto;- Detta högerjusterar knappen.
Val av rum
HTML
Följande ska läggas in i det första fieldset-elementet.
-
Lägg in tre
input-taggar medtype="radio". Efterinput-taggarna skriver du texterna Enkelrum, Dubbelrum och Familjerum. -
Lägg in attributet
checkedi den andrainput-taggen, så att den är vald från början.- Attributet
checkedhar inget värde, så du skriver endast namnet utan likhetstecken och värde. - Med
checkedväljer man vilket alternativ som ska vara förvalt, så man bör lägga det i den knapp som man tror är det vanligaste alternativet.
- Attributet
-
Lägg också in
value-attribut med värdena “enkel”, “dubbel” respektive “familj” iinput-taggarna.- Det är dessa värden som sedan används, då formuläret skickas.
-
Prova att klicka på knapparna i webbläsaren.
- Du bör se att du måste klicka på ringen samt att du kan markera flera alternativ.
-
Lägg in attributet
name="roomType"i alla treinput-taggarna.- Med samma namn, kan endast en av dem vara vald.
-
Lägg in ett
label-element som omger varjeinput-tagg och dess text.- Det ska alltså vara på formen: <label> <input …> text </label>
-
Prova igen att klicka på knapparna i webbläsaren.
- Du bör nu kunna välja knapp genom att klicka på dess text och du kan endast välja en.
Datum och antal nätter
HTML
Följande ska läggas in i det andra fieldset-elementet.
- Lägg in ett
label-element med texten Ankomstdag följt av eninput-tagg medtype="date"ochname="arrival". - Lägg också in ett
label-element med texten Antal nätter och ettselect-elemet med åttaoption-element. Texten ioption-elementen ska vara 1, 2, 3, 4, 5, 6, 1 vecka och 2 veckor. - Lägg in
value-attribut ioption-taggarna med värdena “1”, “2”, “3”, “4”, “5”, “6”, “7” respektive “14”.- Detta är antal dagar för de olika alternativen och de värden som används, då formuläret skickas.
- Lägg även in attributet
selectedi den förstaoption-taggen.- Med
selectedanger man vilket alternativ som är förvalt. Det motsvararcheckedför radioknapparna.
- Med
- I
select-taggen lägger du in attributetname="nrOfNights".
Val av tillägg
HTML
Följande ska läggas in i det tredje fieldset-elementet.
- Lägg till tre
label-element medinput-taggar medtype="checkbox"ochname="facility". Efterinput-taggarna skriver du Internet, Parkering respektive Sjöutsikt. - Lägg även in
value-attribut iinput-taggarna med “internet”, “parkering” respektive “sjöutsikt”.
Data om kunden
HTML
Följande ska läggas in i det fjärde fieldset-elementet.
-
Lägg in fem objekt på formen
<label for="x">Rubrik</label>
<input type="text" name="x" id="x"> -
Rubrik i de olika objekten ska vara Namn, Gatuadress, Postnummer, Ort och E-post. Det som markeras med “x” ska vara “name”, “street”, “zipcode”, “city” och “email”.
- Attributen
forochidkopplar sammanlabelochinput. Attributetnameanvänds då formuläret skickas. - I detta fall använd
labelpå ett annat sätt än för rumstyp och tillägg. Det beror på att vi här vill separera texterna ochinput-taggarna i varsina element, för att sedan i CSS kunna lägga dem i varsina kolumner.
- Attributen
Stilsättning av formuläret
CSS
-
I regeln för
#booking fieldsetlägger du tilldisplay: grid;gap: 0.6em;ochwhite-space: nowrap;- Den sista egenskapen tas med, för att inte rubriker med mer än ett ord ska radbrytas.
-
Lägg till en regel för
#datemedgrid-template-columns: 1fr 1fr;- Detta skapar två lika breda kolumner, så att ankomstdatum och antal nätter hamnar intill varandra.
-
Skriv en regel för
#customermedgrid-template-columns: min-content auto;- Detta skapar också två kolumner, fast i detta fall ska den första kolumnen inte vara bredare än vad som krävs för innehållet i elmenten. Den andra kolumnen sätts automatiskt till det utrymme som finns kvar.
- I HTML-koden varvas
label- ochinput-element. Vartannat hamnar i den första kolumnen och vartannat i den andra kolumnen, dvs allalabelhamnar i den första kolumnen och allainputi den andra.
-
Skriv en regel för
#customer inputmedmax-width: 40ch;- Detta sätter bredden på
input-taggarna till 40 tecken (characters). - Eftersom
max-widthanvänds, blir det flexibelt och fälten blir smalare om fönstret är smalare än 40 tecken.
- Detta sätter bredden på
-
Skriv även en regel för
#customer #zipcodemedmax-width: 6ch;- Det räcker inte med endast
#zipcode, eftersom regeln#customer inputdå är mer specificerad och får företräde. Alternativt skulle man kunna skriva selektorn sominput#zipcode, vilket betyder eninput-tagg med id som är"zipcode".
- Det räcker inte med endast
-
Lägg till
font-size: 1.5em; border-radius: 0.6em;ochbackground-color: #7BE;i regeln för#send, dvs knappen. -
Lägg även till en regel för
#send:hovermedbackground-color: #7E8;
Flexibel layout
- Ta fram Följsamt designläge och gör fönstret smalare, för att kontrollera hur pass flexibel layouten är.
- Skriv en media query för gränsen
max-width: 560px. Lägg in en regel för#booking fieldsetmedgrid-template-columns: auto;ochgap: 0.2em;- Då läggs innehållet i varje fieldset i en kolumn och avståndet mellan objekten blir lite mindre, jämfört med den kod som lagts in tidigare.
Validera koden
- Validera både HTML- och CSS-filen och rätta eventuella fel.
- HTML-validator: https://validator.w3.org/nu/
- CSS-validator: https://jigsaw.w3.org/css-validator/#validate_by_upload
Laboration 7C-2 - Skicka ett formulär
I denna laboration ska du använda Netlifys tjänst för hantering av formulär. Det innebär att du måste publicera mappen den på Netlify, för att kunna testa detta. Detta kan du göra via GitHub eller manuellt (som i Lab 1b).
Netlifys tjänst för hantering av formulär är gratis upp till 100 inskickade formulär per månad. Du kan läsa mer om tjänsten på https://docs.netlify.com/forms/setup/
Förberedelser
- Öppna mappen L7c i Visual Studio Code (VSC), om du inte redan har den öppen.
- Du ska nu jobba vidare med samma filer som i föregående del av laborationen.
- Du behöver göra en inställning i netlify för att det skall gå att skicka in formulär. För att göra det så behöver du börja med att publicera sidan på netlify så att den finns där.
- Publicera på samma sätt som du gjort i Lab 1b samt Uppgift 1 och 2.
- När publiceringen är klar och du är inne i kontrollpanelen för den nya sajten i netlify klickar du på fliken
Forms. Där väljer duEnable form detection. Nu kommer netlify automatiskt att hitta och aktivera formulär på sidan nästa gång du gör en deploy.
Tillägg i form-taggen
- Lägg till attributen
method="POST"ochnetlifyiform-taggen.- Det ska inte finnas något
action-attribut för denna tjänst.
- Det ska inte finnas något
Obligatoriska fält
HTML
- Fälten för Ankomstdag, Namn och E-post ska vara obligatoriska. Markera dessa med en stjärna i början av rubriken för dem och lägg in attributet
requirediinput-taggarna.- Attributet har inget värde, så skriv bara
requiredi taggrna.
- Attributet har inget värde, så skriv bara
- Även Antal nätter är obligatoriskt, så markera även det med en stjärna, men här kan inte
requiredanvändas. Istället finns redan ett “default”-värde med hjälp avselected. - Prova att lämna ett obligatoriskt fält tomt och klicka på skicka-knappen.
Publicera webbsidan
- Uppdatera sajten på netlify genom att publicera igen.
Testa formuläret
- Fyll i något i formuläret och klicka på knappen för att skicka in det.
- Gå till Netlify och ta fram sidan för din “site”, om du inte redan har den framme. Klicka på fliken Forms.
- Under rubriken Active forms klickar du på booking och kan sedan gå vidare med att ta fram det som skickats in via formuläret.