Gå til innholdet

Input

Ren CSS på et vanlig <input>, så nettleserens egen validering, autofyll og tastaturhåndtering virker som før.

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

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

Bare date, time og datetime-local påvirker utseendet. De øvrige typene finnes for at TypeScript-hjelperen skal kunne sette type for deg.

SituasjonKomponent
Nettleserens egen datovelger holderInput med type="date"
Du skal be om en datoDato i et skjema
import { fs, type FieldState } from "@fristil/designsystem"
const felt = document.querySelector<HTMLInputElement>("#epost")
fs.setAttributes(felt, fs.input({ type: "email" }))

type setter både HTML-typen og ikonvarianten, så de kan ikke komme i utakt. Fellen over er ikke mulig å gå i.

Ved validering kaller du den på nytt med ny tilstand:

felt.addEventListener("blur", () => {
const tilstand: FieldState = felt.validity.valid ? "default" : "invalid"
fs.setAttributes(felt, fs.input({ type: "email", state: tilstand }))
})

state: "invalid" setter både data-state for fargen og aria-invalid for skjermleseren. Går feltet tilbake til "default", fjerner fs.setAttributes begge. Uten det ville feltet blitt stående rødt etter at feilen var rettet.

Verdier utenfra: fs.input.isType(x) og fs.input.isState(x). Se Typesikker bruk.

KlasseHva det er
.fs-inputFeltet. Tilstanden kommer fra data-state, ikonet fra data-variant.
VariabelStandard
--fs-input-paddingvar(--size-2) var(--size-3)
--fs-input-radiusvar(--size-1)

Se Tilpasning for hvordan variablene og laget virker.

  • Hvert felt trenger en synlig <label> med for. placeholder er ingen erstatning, siden den forsvinner idet brukeren skriver.
  • Bruk riktig type. Det bestemmer mobiltastaturet og hva nettleseren tilbyr av autofyll.
  • Sett autocomplete på felt som spør om personopplysninger, for eksempel autocomplete="email".