Formularer i HTML: En Begynderguide
Lær at oprette interaktive HTML-formularer med inputtyper, labels, knapper og grundlæggende validering. Mestre formularers tilgængelighed og bedste praksis.
Lær at oprette interaktive HTML-formularer med inputtyper, labels, knapper og grundlæggende validering. Mestre formularers tilgængelighed og bedste praksis.
<form>
-elementet?<form>
-elementet er en container, der omslutter alle formularkontrolelementer og definerer, hvordan formulardataene skal behandles. Det fungerer som fundamentet for at indsamle brugerinput og sende det til en server.
<form action="/submit" method="POST">
<!-- Formularkontrolelementer kommer her -->
<input type="text" name="username" required>
<button type="submit">Send</button>
</form>
action
: Specificerer hvor formulardataene skal sendes når de indsendesmethod
: Definerer hvordan data skal sendes (GET eller POST)enctype
: Specificerer hvordan formulardata skal kodes (vigtigt for filupload)<form action="/contact" method="POST" enctype="multipart/form-data">
<!-- Formular til filupload -->
</form>
HTML5 introducerede talrige inputtyper, der giver bedre brugeroplevelse og indbygget validering. Lad os udforske de mest almindeligt anvendte:
<!-- Grundlæggende tekstinput -->
<input type="text" name="fullname" placeholder="Indtast dit fulde navn">
<!-- Password input (skjuler tegn) -->
<input type="password" name="password" placeholder="Indtast adgangskode">
<!-- Email input (med indbygget validering) -->
<input type="email" name="email" placeholder="bruger@eksempel.dk">
<!-- Telefonnummer input -->
<input type="tel" name="phone" placeholder="+45 12 34 56 78">
<!-- URL input -->
<input type="url" name="website" placeholder="https://eksempel.dk">
<!-- Nummer input med min/max værdier -->
<input type="number" name="age" min="18" max="100" step="1">
<!-- Datovælger -->
<input type="date" name="birthdate">
<!-- Tidsvælger -->
<input type="time" name="appointment">
<!-- Farvevælger -->
<input type="color" name="theme-color" value="#ff0000">
<!-- Filupload -->
<input type="file" name="resume" accept=".pdf,.doc,.docx">
<!-- Radioknapper (enkelt udvælgelse) -->
<input type="radio" name="gender" value="male" id="male">
<input type="radio" name="gender" value="female" id="female">
<!-- Checkboxe (flere udvælgelser) -->
<input type="checkbox" name="interests" value="coding" id="coding">
<input type="checkbox" name="interests" value="design" id="design">
<!-- Range slider -->
<input type="range" name="satisfaction" min="1" max="10" value="5">
Labels er afgørende for formulartilgængelighed. De giver kontekst for skærmlæsere og forbedrer brugervenligheden for alle brugere.
<!-- Metode 1: Brug af 'for' attribut -->
<label for="username">Brugernavn:</label>
<input type="text" id="username" name="username" required>
<!-- Metode 2: Omslutning af input inde i label -->
<label>
Email-adresse:
<input type="email" name="email" required>
</label>
<form action="/register" method="POST">
<fieldset>
<legend>Personlige oplysninger</legend>
<div class="form-group">
<label for="first-name">Fornavn *</label>
<input type="text" id="first-name" name="firstName" required
aria-describedby="first-name-help">
<small id="first-name-help">Indtast dit juridiske fornavn</small>
</div>
<div class="form-group">
<label for="email">Email-adresse *</label>
<input type="email" id="email" name="email" required
aria-describedby="email-help">
<small id="email-help">Vi deler aldrig din email</small>
</div>
<div class="form-group">
<label for="phone">Telefonnummer</label>
<input type="tel" id="phone" name="phone"
aria-describedby="phone-help">
<small id="phone-help">Valgfrit: Inkluder landekode</small>
</div>
</fieldset>
</form>
Knapper styrer formularadfærd og giver klare handlinger for brugere.
<!-- Send-knap (sender formularen) -->
<button type="submit">Opret konto</button>
<!-- Nulstil-knap (rydder formulardata) -->
<button type="reset">Ryd formular</button>
<!-- Almindelig knap (til JavaScript-interaktioner) -->
<button type="button" onclick="showHelp()">Brug for hjælp?</button>
<!-- Brug af input element -->
<input type="submit" value="Send formular">
<!-- Brug af button element (mere fleksibelt) -->
<button type="submit">
<span>Send formular</span>
<svg><!-- ikon --></svg>
</button>
HTML5 giver indbygget validering, der virker uden JavaScript, hvilket forbedrer brugeroplevelsen og datakvaliteten.
<input type="text" name="username" required>
<input type="email" name="email" required>
<select name="country" required>
<option value="">Vælg et land</option>
<option value="dk">Danmark</option>
<option value="se">Sverige</option>
</select>
<!-- Telefonnummermønster -->
<input type="tel" name="phone"
pattern="[0-9]{2} [0-9]{2} [0-9]{2} [0-9]{2}"
placeholder="12 34 56 78">
<!-- Brugerdefineret brugernavn mønster -->
<input type="text" name="username"
pattern="[a-zA-Z0-9_]{3,16}"
title="Brugernavn skal være 3-16 tegn, bogstaver, tal og understreger kun">
<!-- Tekstlængdegrænser -->
<input type="text" name="title" minlength="5" maxlength="100">
<!-- Talområder -->
<input type="number" name="quantity" min="1" max="10">
<!-- Datoområder -->
<input type="date" name="start-date" min="2025-01-01" max="2025-12-31">
Her er en omfattende kontaktformular, der demonstrerer alle de koncepter, vi har dækket:
<form action="/contact" method="POST" novalidate>
<fieldset>
<legend>Kontaktoplysninger</legend>
<div class="form-row">
<div class="form-group">
<label for="first-name">Fornavn *</label>
<input type="text" id="first-name" name="firstName"
required minlength="2" maxlength="50">
</div>
<div class="form-group">
<label for="last-name">Efternavn *</label>
<input type="text" id="last-name" name="lastName"
required minlength="2" maxlength="50">
</div>
</div>
<div class="form-group">
<label for="email">Email-adresse *</label>
<input type="email" id="email" name="email" required>
</div>
<div class="form-group">
<label for="phone">Telefonnummer</label>
<input type="tel" id="phone" name="phone"
pattern="[0-9]{2} [0-9]{2} [0-9]{2} [0-9]{2}"
placeholder="12 34 56 78">
</div>
</fieldset>
<fieldset>
<legend>Beskeddetaljer</legend>
<div class="form-group">
<label for="subject">Emne *</label>
<select id="subject" name="subject" required>
<option value="">Vælg et emne</option>
<option value="general">Generel forespørgsel</option>
<option value="support">Teknisk support</option>
<option value="billing">Faktureringsspørgsmål</option>
</select>
</div>
<div class="form-group">
<label for="message">Besked *</label>
<textarea id="message" name="message" required
minlength="10" maxlength="1000" rows="5"
placeholder="Beskriv venligst din forespørgsel..."></textarea>
</div>
<div class="form-group">
<label for="priority">Prioritetsniveau</label>
<input type="range" id="priority" name="priority"
min="1" max="5" value="3">
<output for="priority">3</output>
</div>
</fieldset>
<fieldset>
<legend>Præferencer</legend>
<div class="form-group">
<label>
<input type="checkbox" name="newsletter" value="yes">
Tilmeld dig vores nyhedsbrev
</label>
</div>
<div class="form-group">
<fieldset>
<legend>Foretrukken kontaktmetode</legend>
<label>
<input type="radio" name="contact-method" value="email" checked>
Email
</label>
<label>
<input type="radio" name="contact-method" value="phone">
Telefon
</label>
</fieldset>
</div>
</fieldset>
<div class="form-actions">
<button type="reset">Ryd formular</button>
<button type="submit">Send besked</button>
</div>
</form>
Selvom denne guide fokuserer på HTML, er her nogle CSS-tips til bedre formularpræsentation:
/* Grundlæggende formularstyling */
.form-group {
margin-bottom: 1rem;
}
.form-row {
display: flex;
gap: 1rem;
}
label {
display: block;
margin-bottom: 0.25rem;
font-weight: 500;
}
input, select, textarea {
width: 100%;
padding: 0.5rem;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 1rem;
}
input:focus, select:focus, textarea:focus {
outline: none;
border-color: #007bff;
box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
}
button {
padding: 0.75rem 1.5rem;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 1rem;
}
button[type="submit"] {
background-color: #007bff;
color: white;
}
HTML-formularer er essentielle for at skabe interaktive weboplevelser. Ved at forstå <form>
-elementet, forskellige inputtyper, korrekt labeling og grundlæggende validering kan du skabe formularer, der er både funktionelle og tilgængelige.
Husk disse nøgleprincipper:
Med disse fundamenter på plads vil du være i stand til at skabe formularer, der giver fremragende brugeroplevelser, mens de indsamler de data din applikation har brug for.
Fortsæt med at læse disse relaterede artikler
Mestre HTML-billeder med denne omfattende guide, der dækker img-tagget, alt-tekst, filformater, responsive billeder, srcset og webperformance-optimering.
Mestre HTML-lister med denne komplette guide, der dækker ul-, ol- og dl-elementer, indlejringsteknikker, styling med CSS og bedste praksis for tilgængelighed.
Lær HTML-tabeller fra grundlæggende til avancerede teknikker. Mestre table-, tr-, td-, th-elementer, tilgængelighed, responsivt design og hvornår tabeller skal bruges korrekt.
Opdag kraften i semantiske HTML-elementer som header, footer, article og section. Lær hvordan semantisk markup forbedrer SEO, tilgængelighed og kodevedligeholdelse.