Gå til sidens indhold

Vælg et tema

Vælger du ikke et tema, vælger vi et for dig. Du kan efterfølgende skifte tema i footeren.


Eksempler

Formular

Eksempel på formularstruktur

Dine kontaktoplysninger

Vis HTML for eksempel på formularstruktur
<h2>Dine kontaktoplysninger</h2>
<form novalidate>

    <div class="form-group">
        <label class="form-label" for="simple-fnavn">Fornavn</label>

        <input type="text" id="simple-fnavn" name="fnavn" class="form-input" required
            autocomplete="given-name">
    </div>

    <div class="form-group">
        <label class="form-label" for="simple-enavn">Efternavn</label>

        <input type="text" id="simple-enavn" name="enavn" class="form-input" required
            autocomplete="family-name">
    </div>

    <div class="form-group">
        <label class="form-label" for="simple-email">E-mailadresse</label>

        <input type="email" id="simple-email" name="email" class="form-input" required
            autocomplete="email">
    </div>

    <div class="form-group">
        <label class="form-label" for="simple-telefon">Telefonnummer</label>

        <input type="tel" id="simple-telefon" name="telefon" class="form-input input-width-s"
            required autocomplete="tel">
    </div>

    <button class="button button-primary mt-9">
        Gem oplysninger
    </button>
</form>

Vejledning

Gør brug af <div class="form-group">, fieldset og overskrifter til at strukturere din formular.

Skærmlæsere følger rækkefølgen af formularelementerne, som de er angivet i koden.

Overhold derfor sammenhængen mellem den viste rækkefølge af formularelementer på skærmen og deres rækkefølge i koden og brug ikke CSS til at ændre på rækkefølgen af formularelementerne.

Gruppér sammenhængende formularelementer ved hjælp af fieldset og brug et enkelt legend for hvert fieldset, hvor det giver mening.

Tilføj label med korrekt for attribut, hvor værdien er ens med værdien i id attributten på formularelementet det tilhører.

Sørg for at labels til formularelementer er meningsfulde og præcise.

Undgå placeholder-tekst. Browserne kan ikke garantere tilstrækkeligt kontrastniveau og teksten kan desuden forvirre brugerne. Placeholder-tekst forsvinder, når brugeren klikker i feltet, og dermed forsvinder information, som kunne gavne brugeren.

Tillad copy/paste i formularelementer, hvor brugeren selv skal indtaste oplysninger.

Formularelementer skal automatisk fremhæves, når brugeren navigerer til dem ved hjælp af tastaturet.

Sørg for at alle elementer står i register, dvs. at de står på linje og i et naturligt lodret læse-flow fra top til bund.

Formular do's and don'ts

Sådan (do)

Eksempel på, hvordan formular-struktur kan se ud

Sådan: Opdel komplicerede formularer i små bidder, og placér hvert element på en side for sig (Silver, 2018, s. 68-73). Princippet hedder 'One thing per page' (én ting pr. side) og har vist sig at fungere godt på mobile enheder og være bedre i forbindelse med fx fejlhåndtering (Paul, 2015). Konceptet er også fordelagtigt for ældre brugere med nedsatte kognitive evner (Johnson & Finn, 2017, s. 99) og nye computerbrugere (Long, 2017).

Ikke sådan (don't)

Eksempel på, hvordan formular-struktur ikke bør se ud

Ikke sådan: Del ikke tæt relaterede felter op på flere sider (Silver, 2018, s. 71). Felter for postnummer og by bør fx stå på samme side (Jarret & Gaffney, 2010, s. 102). Det samme gælder felter til fornavn og efternavn samt datoer og tidspunkter (Wroblewski, 2008, s. 84).

Overskrifter do's and don'ts

Sådan (do)

Eksempel på, hvordan headers kan se ud

Sådan: Giv formularen en overskrift, der gør det klart, hvad den gør (Wroblewski, 2008, s. 40). Giv overskrifter prominens (fx vha. størrelse eller farve) i formularens visuelle hierarki (Wroblewski, 2003). Brug verber i stedet for navneord i overskriften (Downe, 2015), fx ”Skriv dit barn op til pasning”.

Ikke sådan (don't)

Eksempel på, hvordan headers ikke bør se ud

Ikke sådan: Undgå at formulere titler som navneord. Især navneord, der taler om systemet (fx ”Digital pladsanvisning”) frem for brugernes ærinder. Brugerne er muligvis ikke bekendte med de navne, som myndighederne har givet selvbetjeningsløsningerne for at kunne identificere dem (Downe, 2015).

Sådan (do)

Eksempel på, hvordan headers kan se ud

Sådan: Lad formålet med den enkelte side fremgå af overskriften under løsningstitlen, når formularen har flere sider (Lior, 2013, s. 205).

Ikke sådan (don't)

Eksempel på, hvordan headers ikke bør se ud

Ikke sådan: Risikér ikke, at brugerne mister fornemmelsen af, hvilken formular de er ved at udfylde eller hvad de er ved at udfylde på den pågældende side, hvis formularen har flere sider.

Se eksempelløsninger

Referencer

  • Adam Silver: Form Design Patterns (2018)
  • Tim Paul: One thing per page (2015)
  • Jeff Johnson & Kate Finn: Designing User Interfaces for an Aging Population (2017)
  • Ally Long: Field-tested interfaces for the next billion (2017)
  • Caroline Jarrett & Gerry Gaffney: Forms that Work: Designing Web Forms for Usability (2009)
  • Luke Wroblewski: Web Form Design: Filling in the Blanks (2008)
  • Luke Wroblewski: Visible Narratives: Understanding Visual Organization (2003)
  • Louise Downe: Good services are verbs, bad services are nouns (2015)
  • Linda Newman Lior: Writing for Interaction (2013)

Kompleks formular

Eksempel på kompleks formularstruktur

Dine kontaktoplysninger

Hvordan vil du helst kontaktes?
Hvornår på dagen vil det passe bedst, at vi kontakter dig?
Personlige oplysninger
Fødselsdato For eksempel: 05 12 1987
Bor du i Odense?
Vis HTML for eksempel på kompleks formularstruktur
<h3>Dine kontaktoplysninger</h3>
<form novalidate>

    <div class="form-group">
        <label class="form-label" for="fnavn-complex">Fornavn</label>

        <input type="text" id="fnavn-complex" name="fnavn-complex" class="form-input" required
            autocomplete="given-name">
    </div>

    <div class="form-group">
        <label class="form-label" for="enavn-complex">Efternavn</label>

        <input type="text" id="enavn-complex" name="enavn-complex" class="form-input" required
            autocomplete="family-name">
    </div>

    <div class="form-group">
        <label class="form-label" for="email-complex">E-mailadresse</label>

        <input type="email" id="email-complex" name="email-complex" class="form-input"
            required autocomplete="email">
    </div>

    <div class="form-group">
        <label class="form-label" for="telefon-complex">Telefonnummer</label>

        <input type="tel" id="telefon-complex" name="telefon-complex"
            class="form-input input-width-s" required autocomplete="tel">
    </div>

    <div class="form-group">
        <fieldset role="radiogroup">
            <legend class="form-label">
                Hvordan vil du helst kontaktes?
            </legend>

            <div class="form-group-radio">
                <input type="radio" id="kontakt-option1" name="kontakt"
                    class="form-radio radio-large" value="telefon">
                <label class="form-label" for="kontakt-option1">Pr. telefon</label>

            </div>

            <div class="form-group-radio">
                <input type="radio" id="kontakt-option2" name="kontakt"
                    class="form-radio radio-large" value="email">
                <label class="form-label" for="kontakt-option2">Pr. e-mail</label>

            </div>

        </fieldset>
    </div>

    <div class="form-group">
        <fieldset>
            <legend class="form-label">
                Hvornår på dagen vil det passe bedst, at vi kontakter dig?
            </legend>

            <div class="form-group-checkbox">
                <input type="checkbox" id="checkbox-tidspunkt-option1" name="tidspunkt[]"
                    class="form-checkbox checkbox-large" value="morgen">
                <label class="form-label" for="checkbox-tidspunkt-option1">Om morgenen</label>

            </div>

            <div class="form-group-checkbox">
                <input type="checkbox" id="checkbox-tidspunkt-option2" name="tidspunkt[]"
                    class="form-checkbox checkbox-large" value="middag">
                <label class="form-label" for="checkbox-tidspunkt-option2">Ved
                    middagstid</label>

            </div>

            <div class="form-group-checkbox">
                <input type="checkbox" id="checkbox-tidspunkt-option3" name="tidspunkt[]"
                    class="form-checkbox checkbox-large" value="eftermiddag">
                <label class="form-label" for="checkbox-tidspunkt-option3">Om
                    eftermiddagen</label>

            </div>

            <div class="form-group-checkbox">
                <input type="checkbox" id="checkbox-tidspunkt-option4" name="tidspunkt[]"
                    class="form-checkbox checkbox-large" value="aften">
                <label class="form-label" for="checkbox-tidspunkt-option4">Om aftenen</label>

            </div>

        </fieldset>
    </div>

    <div class="form-group">
        <fieldset>
            <legend class="h4">Personlige oplysninger</legend>

            <div class="form-group mt-0">
                <fieldset aria-describedby="date-input-birthday-hint ">
                    <legend class="form-label">
                        Fødselsdato
                    </legend>
                    <span class="form-hint" id="date-input-birthday-hint">For eksempel: 05 12
                        1987</span>

                    <div class="date-group js-calendar-group mt-3">

                        <div class="form-group form-group-day">
                            <label class="form-label"
                                for="date-input-birthday-day">Dag</label>

                            <input type="tel" id="date-input-birthday-day"
                                class="form-input js-calendar-day-input" required
                                autocomplete="bday-day" data-min="1" data-max="31"
                                maxlength="2" pattern="^[0-9]{0,2}$"
                                data-input-regex="^[0-9]{0,2}$"
                                title="Indtast dag på måneden som tal">
                        </div>

                        <div class="form-group form-group-month">
                            <label class="form-label"
                                for="date-input-birthday-month">Måned</label>

                            <input type="tel" id="date-input-birthday-month"
                                class="form-input js-calendar-month-input" required
                                autocomplete="bday-month" data-min="1" data-max="12"
                                maxlength="2" pattern="^[0-9]{0,2}$"
                                data-input-regex="^[0-9]{0,2}$"
                                title="Indtast månedens nummer">
                        </div>

                        <div class="form-group form-group-year">
                            <label class="form-label"
                                for="date-input-birthday-year">År</label>

                            <input type="tel" id="date-input-birthday-year"
                                class="form-input js-calendar-year-input" required
                                autocomplete="bday-year" data-min="1900" data-max="3000"
                                maxlength="4" pattern="^[0-9]{0,4}$"
                                data-input-regex="^[0-9]{0,4}$" title="Indtast årstal">
                        </div>

                    </div>
                </fieldset>
            </div>

            <div class="form-group">
                <fieldset role="radiogroup">
                    <legend class="form-label">
                        Bor du i Odense?
                    </legend>

                    <div class="form-group-radio">
                        <input type="radio" id="odense-option1" name="odense"
                            class="form-radio radio-large" value="ja">
                        <label class="form-label" for="odense-option1">Ja</label>

                    </div>

                    <div class="form-group-radio">
                        <input type="radio" id="odense-option2" name="odense"
                            class="form-radio radio-large" value="nej">
                        <label class="form-label" for="odense-option2">Nej</label>

                    </div>

                </fieldset>
            </div>

        </fieldset>
    </div>
    <button class="button button-primary mt-9">
        Gem oplysninger
    </button>
</form>