Frontend
Det, der driver web'et
Interaktioner mellem bruger og websted
Interaktion mellem mennesker
The "money-maker"
E-handel
Lead-generatoion (nyhedsbrev)
osv.
En deal-breaker
Noget, der er i vejen
UX bliver meget vigtigt
Sikre sig, at de rigtige data er angivet
Standardiseret
Vi stiller ingen spørgsmål, vi udfylder bare formularen
Login
Search
Facebook post
<form>
</form>
<form>
<label>Label</label>
</form>
<form>
<label>Label</label>
<input>
</form>
<form>
<label>Label</label>
<input>
<button>Submit button</button>
</form>
<form>
<label>Label</label>
<input>
<button>Submit button</button>
</form>
Label
Submit button
It’s hard to overstate just how much software developers have given the finger to reliability in the past 10 years or so. It’s for the simplest, silliest reasons, too, like those web forms.
My web browser has been perfectly competent at submitting HTML forms for the past 28 years, but for some stupid reason some asshole developer decided to reimplement all of the form semantics in JavaScript,
and now I can’t pay my electricity bill without opening up the dev tools. Imagine what it’s like to not know how to do that. Imagine if you were blind.
It’s hard to overstate just how much software developers have given the finger to reliability in the past 10 years or so. It’s for the simplest, silliest reasons, too, like those web forms.
My web browser has been perfectly competent at submitting HTML forms for the past 28 years, but for some stupid reason some asshole developer decided to reimplement all of the form semantics in JavaScript,
and now I can’t pay my electricity bill without opening up the dev tools. Imagine what it’s like to not know how to do that. Imagine if you were blind.
My web browser has been perfectly competent at submitting HTML forms for the past 28 years, but for some stupid reason some asshole developer decided to reimplement all of the form semantics in JavaScript,
and now I can’t pay my electricity bill without opening up the dev tools. Imagine what it’s like to not know how to do that. Imagine if you were blind.
Grupper
Gå ind på dsb.dk. Herefter må du kun bruge tastaturet.
Search for a topic of interest...
A better user experience
HTML forms
Frontend elective, 3rd SEM
Search for a topic of interest...
og skærmlæsere
* Man henviser dog ofte til tags, der bærer en mere specifik betydning angående indholdets type eller funktion, som kan hjælpe skærmlæsere, søgemaskiner og browsere med at forstå og formidle indholdet mere præcist.
A better user experience
HTML forms
Frontend elective, 3rd SEM
Frontend elective, 3rd SEM
<header>
<search>
<nav>
<main>
<article>
<aside>
<footer>
<a href="#0" class="button">
I am a fake unsemantic button
</a>
<div class="button">
I am even worse
</div>
<button type="button">
I am a real semantic button
</button>
<button>
<a href="#0" class="button">
WTF?!
</a>
</button>
<div
class="btn"
role="button"
aria-pressed="false"
tabindex="0">
</div>
wrapper.addEventListener("keydown", e => {
if (e.key === " " || e.key === "Enter" || e.key === "Spacebar") {
toggleBtn(e.target);
}
});
https://benfrain.com/converting-divs-into-accessible-pseudo-buttons/
Tilgængelighed
Server handling
Tilgængelighed
Server handling
Tilgængelighed
Tilgængelighed
Funktionalitet
Tilgængelighed
Funktionalitet
<div>Denne tekst er vigtig, alvorlig eller akut</div>
Lider du af
Hvad er det rigtige tag?
<strong>Denne tekst er vigtig, alvorlig eller akut</strong>
<strong>
Lider du af
<div>Jeg er et selvstændigt indholdselement</div>
Lider du af
<article>Jeg er et selvstændigt indholdselement</article>
<article>
Lider du af
<div>Websitets hovedindhold</div>
Lider du af
<main>Websitets hovedindhold</main>
<main>
Lider du af
<div>Indtast dit navn</div>
<input type="text">
Lider du af
<label>
Lider du af
<label>Indtast dit navn</label>
<input type="text">
<label>
<label>
form lingo
<form>
<label>Label</label>
<input>
<button>Submit button</button>
</form>
Label
Submit button
<form>
<label for="full-name">Full name</label>
<input
id="full-name"
name="fname"
type="text">
<label for="email">Email</label>
<input
id="email"
name="email"
type="email">
<button>Submit</button>
</form>
Full name
Submit
<form action="[URL]" method="GET">
<label for="full-name">Full name</label>
<input
id="full-name"
name="fname"
type="text">
<label for="email">Email</label>
<input
id="email"
name="email"
type="email">
<button type="submit">Submit</button>
</form>
<input type="submit" value="Send data">
<!-- or -->
<button type="submit">Send data</button>
<!-- or just -->
<button>Send data</button> <!-- default is submit -->
maybe never use this
Loading...
<button>Send data</button> <!-- default is submit -->
<button type="button">Send data</button> <!-- override the default -->
Loading...
<input type="checkbox" id="my-id">
<label for="my-id">Whole row</label>
Hver <input> skal helsthave tilknyttet en <label>. Dette gør feltet tilgængeligt for skærmlæsere og giver brugeren et større mål, da man kan klikke på <label> for at fokusere input-feltet.
<input type="checkbox" id="my-id">
<label for="my-id">Whole row</label>
<input type="checkbox" id="my-id">
<label for="my-id">Whole row</label>
<label>
<input type="checkbox">
Whole row
</label>
<label for="my-id">
<input id="my-id" type="checkbox">
Whole row
</label>
<label for="my-id">
<input id="my-id" type="checkbox">
Whole row
</label>
<search>
<label for=s>Site</label>
<input type=search id=s>
<button>Go!</button>
</search>
<label for="password">
Password (Required)
<span>Your password should be at least 6 characters long</span>
<input type="password" id="password">
</label>
<label for="my-id">Label</label>
<input id="my-id" type="text" aria-describedby="instruction">
<p id="instruction">Instruction</p>
<fieldset>
<legend>Choose your favorite superhero</legend>
<label for="batman">Batman</label>
<input id="batman" name="fav-hero" value="batman">
...
</fieldset>
<input type=" ">
text
number
radio
checkbox
tel
date
<input type=" ">
text
number
radio
checkbox
tel
date
Single line text field
<input type=" ">
text
number
radio
checkbox
tel
date
Numbers
<input type=" ">
text
number
radio
checkbox
tel
date
<input type=" ">
text
number
radio
checkbox
tel
date
Radio button
<input type=" ">
text
number
radio
checkbox
tel
date
Checkbox
<input type=" ">
text
number
radio
checkbox
tel
date
Phone number
<input type=" ">
text
number
radio
checkbox
tel
date
Date
<input list="list">
<datalist id="list">
<option value="Gryffindor">
</datalist>
<select>
<optgroup label="Theropods">
<option>Tyrannosaurus</option>
...
<textarea>
It was a dark and stormy night...
</textarea>
<select>
<optgroup label="Theropods">
<option>Tyrannosaurus</option>
...
<textarea>
It was a dark and stormy night...
</textarea>
<input list="list">
<datalist id="list">
<option value="Gryffindor">
</datalist>
<select>
<optgroup label="Theropods">
<option>Tyrannosaurus</option>
...
<textarea>
It was a dark and stormy night...
</textarea>
<input list="list">
<datalist id="list">
<option value="Gryffindor">
</datalist>
<input type="tel">
Choose your favorite
Choose toppings
<form>
<fieldset>
<legend>Choose your interests</legend>
<div class="form-control">
<input type="checkbox" id="coding" name="interest" value="coding" checked>
<label for="coding">Coding</label>
</div>
<div class="form-control">
<input type="checkbox" id="music" name="interest" value="music">
<label for="music">Music</label>
</div>
</fieldset>
</form>
<label>
<input type="checkbox">
Whole row
</label>
<form>
<label>Enter your email</label>
<input
type="email"
>
</form>
<form>
<label>Enter your email</label>
<input
type="email"
name="email"
>
</form>
<form>
<label>Enter your email</label>
<input
type="email"
name="email"
placeholder="e.g. john@doe.com"
>
</form>
<form>
<label>Enter your email</label>
<input
type="email"
name="email"
placeholder="e.g. john@doe.com"
value="Prefilled"
>
</form>
<form>
<label>Enter your email</label>
<input
type="email"
name="email"
placeholder="e.g. john@doe.com"
value="Prefilled"
class="email-field"
>
</form>
<form>
<label>Enter your email</label>
<input
type="email"
name="email"
placeholder="e.g. john@doe.com"
value="Prefilled"
class="email-field"
required
>
</form>
<form>
<label>Enter your email</label>
<input
type="email"
name="email"
placeholder="e.g. john@doe.com"
value="Prefilled"
class="email-field"
required
readonly
>
</form>
<form>
<label>Enter your email</label>
<input
type="email"
name="email"
placeholder="e.g. john@doe.com"
value="Prefilled"
class="email-field"
required
readonly
disabled>
</form>
name
<form>
<label>Enter your email</label>
<input
type="email"
name="email"
placeholder="e.g. john@doe.com"
value="Prefilled"
class="email-field"
required
readonly
disabled>
</form>
name
is used by the server to identify the fields in form submits
name
Some of the inputs also share the same name which is important to note because it allows the same data property to have multiple values.
<form>
<h2>Sign up to our service</h2>
<div class="form-group">
<label for="email">Email address</label>
<input
id="email"
name="email"
type="email"
required>
</div>
<div class="form-group">
<label for="username">Username</label>
<span>Must be between 5 and 10 characters long</span>
<input
id="username"
name="username"
type="text"
minlength="5"
maxlength="10"
required>
</div>
<div class="form-group">
<label for="password">Password</label>
<span>Must be at least 8 characters with at least 1 digit, 1 lowercase and 1 uppercase character</span>
<input
id="password"
name="password"
type="password"
pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
required>
</div>
<button>Sign up</button>
</form>
input[type="text"]:valid {
color: green;
}
input[type="text"]:invalid {
color: red;
}
<form>
<label for="pass">Enter a password</label>
<input
pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
type="password"
id="pass"
required>
<button type="submit">Set password</button>
</form>
<form>
<label for="pass">Enter a password</label>
<input
pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
type="password"
id="pass"
required>
<button type="submit">Set password</button>
</form>
<input
pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"
type="password"
required
>
Regular expression from html5pattern.com
is used to specify the maximum length of the value that can be entered
Used alongside the range attribute to determine what the min/max values should be. You can use step to determine the interval of your range input.
maxlength/minlength:
max/min:
Don't make the user feel stupid
Do we really need all this?
(Reduce cognitive load)
<form>
<fieldset>
<legend>Personal information</legend>
<label>
First Name<br>
<input name="fname">
</label>
<label>
Last Name<br>
<input name="lname">
</label>
<label>
Email<br>
<input name="email" type="email">
</label>
</fieldset>
</form>
avoid this ->
Users may feel uncomfortable sharing personal information
Placeholders as labels
It's difficult to remember what information belongs in a field, and to check for and fix errors
— nngroup
province + country
farm size
name
d.o.b.
members
Opret en HTML-struktur af en formular til din "pets"-database.
Find de relevante form controls til indsamling af dine data: