Gå til innholdet

Search

Et fs-input med plass til et forstørrelsesglass. Begge klassene settes, så alle tilstandene og variablene fra Input gjelder her også.

import "@fristil/designsystem/tokens.css"
import "@fristil/designsystem/search.css"
import "@fristil/designsystem/button.css"

type="search" gir nettleserens eget kryss for å tømme feltet, og «Søk» i stedet for «Enter» på mobiltastaturet. Hvordan krysset ser ut, og om Escape tømmer feltet, varierer mellom nettleserne.

role="search" på skjemaet gjør at skjermlesere kan hoppe rett til søket på siden.

Plassholderen forsvinner idet brukeren skriver, og flere skjermlesere leser den ikke opp. Ser feltet så åpenbart ut som et søk at en synlig ledetekst blir støy, skjul den med .fs-sr-only framfor å la den være.

<input class="fs-input fs-search" type="search" id="sok" name="q" />
<p class="fs-sr-only" role="status" id="treff"></p>
<script type="module">
const felt = document.getElementById("sok")
const status = document.getElementById("treff")
let tidsavbrudd
felt.addEventListener("input", () => {
clearTimeout(tidsavbrudd)
tidsavbrudd = setTimeout(async () => {
const svar = await fetch(`/api/sok?q=${encodeURIComponent(felt.value)}`)
const saker = await svar.json()
tegnResultater(saker)
status.textContent = `${saker.length} treff`
}, 300)
})
</script>

Ventetiden på 300 millisekunder er ikke bare for serveren. Uten den leses antall treff opp for hvert tastetrykk.

import { fs } from "@fristil/designsystem"
const felt = document.querySelector<HTMLInputElement>("#sok")
fs.setAttributes(felt, fs.search())

fs.search() setter både fs-input og fs-search, og type="search". fs.search.row gir klassen på raden med feltet og knappen.

KlasseHva det er
.fs-searchSøkefeltet. Brukes sammen med .fs-input.
.fs-search-rowRaden med feltet og knappen
VariabelStandard
--fs-search-icon-spacevar(--size-10)
--fs-search-icon-sizevar(--size-5)

Ikonet kommer fra --semantic-icon-search og snur med temaet. Se Tilpasning.

  • Meld antall treff i et felt med role="status". Uten det vet ikke den som hører siden om søket ga noe.
  • Ikke fjern nettleserens kryss uten å gi noe annet. Å tømme feltet for hånd er tungvint på mobil.
  • Er søket hovedfunksjonen på siden, la feltet ha fokus fra start. Er det ett av flere verktøy, la være: fokus som hopper er forvirrende.