Gå til innholdet

Textarea

Samme utseende og tilstander som Input, for svar som blir lengre enn én linje.

import "@fristil/designsystem/tokens.css"
import "@fristil/designsystem/textarea.css"
data-stateBrukes til
(utelatt)Normaltilstand
invalidValideringen har feilet
successInnholdet er bekreftet gyldig

data-state er farge. Skjermlesere trenger aria-invalid="true" i tillegg, eller Field, som setter begge.

import { fs, type FieldState } from "@fristil/designsystem"
const felt = document.querySelector<HTMLTextAreaElement>("#begrunnelse")
felt.addEventListener("blur", () => {
const tilstand: FieldState = felt.value.trim().length >= 20 ? "success" : "invalid"
fs.setAttributes(felt, fs.textarea({ state: tilstand }))
})

state er samme type som i Input og Select, så verdien kan sendes mellom dem. fs.setAttributes rydder bort tilstanden fra forrige kall, så feltet ikke blir stående rødt etter at feilen er rettet.

KlasseHva det er
.fs-textareaFeltet. Tilstanden kommer fra data-state.
VariabelStandard
--fs-textarea-min-heightcalc(var(--size-4) * 5)
--fs-textarea-paddingvar(--size-2) var(--size-3)
--fs-textarea-radiusvar(--size-1)

--fs-textarea-min-height er en minstehøyde, ikke en fast høyde. rows og brukerens eget drag i hjørnet virker som før.

Se Tilpasning for hvordan variablene og laget virker.

  • Hvert felt trenger en synlig <label> med for som peker på id-en.
  • Har feltet en øvre grense, si det i hjelpeteksten før brukeren skriver. maxlength alene hindrer innskriving uten å forklare hvorfor.
  • Bruker du en tegnteller, legg den i et element med aria-live="polite" og la den melde fra bare når grensen nærmer seg. Ellers avbryter den opplesingen for hvert tastetrykk.
  • Ikke slå av resize. Det er ofte eneste måten brukeren får oversikt over lang tekst.