Laboration L7c-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. Ilegend
skriver 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
fieldset
lä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 fieldset
medbackground-color: #FED;
ochmargin-bottom: 20px;
- Skriv en regel för
#booking legend
med stil för fetstil och kursiv stil. - Skriv även en regel för
#send
meddisplay: 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
checked
i den andrainput
-taggen, så att den är vald från början.- Attributet
checked
har inget värde, så du skriver endast namnet utan likhetstecken och värde. - Med
checked
vä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>
- Det ska alltså vara på formen:
- 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
selected
i den förstaoption
-taggen.- Med
selected
anger man vilket alternativ som är förvalt. Det motsvararchecked
fö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
for
ochid
kopplar sammanlabel
ochinput
. Attributetname
används då formuläret skickas. - I detta fall använd
label
på 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 fieldset
lä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
#date
medgrid-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
#customer
medgrid-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 allalabel
hamnar i den första kolumnen och allainput
i den andra.
- Skriv en regel för
#customer input
medmax-width: 40ch;
- Detta sätter bredden på
input
-taggarna till 40 tecken (characters). - Eftersom
max-width
anvä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 #zipcode
medmax-width: 6ch;
- Det räcker inte med endast
#zipcode
, eftersom regeln#customer input
då ä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:hover
medbackground-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 fieldset
medgrid-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.nu/
- CSS-validator: https://jigsaw.w3.org/css-validator/#validate_by_upload