Empty States - Designmönster
När en vy eller komponent saknar innehåll uppstår ett kommunikativt vakuum – användaren vet inte om något gått fel, om de befinner sig på fel ställe, eller om systemet helt enkelt är tomt. Utan ett empty state riskerar användaren att tolka frånvaron av innehåll som ett tekniskt fel eller ett gränssnittsproblem. Empty state-mönstret fyller detta vakuum med rätt förväntningssättning: det förklarar varför vyn är tom, vad som normalt sett skulle visas, och – när det är möjligt – ger användaren en väg framåt. Den övergripande principen är att tomhet aldrig ska kännas som ett misslyckande, utan som ett naturligt tillstånd med ett tydligt nästa steg.
Användning
Mål
Säkerställa att användaren förstår varför en vy eller komponent inte visar något innehåll
Ge användaren en korrekt förväntansbild av vad vyn normalt innehåller
Ge användaren möjlighet att agera och skapa eller hämta innehåll när det är relevant
Undvika att tomhet feltolkas som ett tekniskt fel eller ett systemfel
Skapa en visuellt och tonmässigt konsekvent upplevelse även i frånvaron av data
Använd när
En listvy, tabell eller inkorg är tom och förväntas fyllas med innehåll
Användaren precis har skapat ett konto eller ett nytt arbetsflöde och ännu inte genererat data
En sökning eller filtrering returnerar inga träffar
En komponent visar ett fält där information saknas eller ännu inte fyllts i
Innehåll har raderats och vyn är nu tom
Använd inte när
Innehåll laddas in – visa en laddningsindikator istället
Vyn är avsiktligt tom och förväntas förbli tom (d.v.s. det finns inget innehåll att förvänta sig)
Felet beror på ett systemfel eller ett nätverksproblem – använd ett felmeddelande-mönster istället
Vyn visar ett resultat av en sökning med nollträffar i en liten inline-kontext – en kortare textrad räcker ofta där
Varianter
Vy-nivå (full empty state)
Används när en hel vy eller ett helt sidavsnitt saknar innehåll. Innehåller illustration, rubrik, brödtext och i förekommande fall en CTA.
Passar för: Inkorgar, ärendelistor, dashboards, rapporter, sökresultat på helsida
Komponent-nivå (inline empty state)
Används inuti avgränsade komponenter som tabeller, kort eller datalistor. Visar en kortfattad text – utan illustration – som kommunicerar att information saknas. Texten är kursiv och använder färgen text-subtle-on-default för att visuellt särskilja sig från faktiskt innehåll.
Passar för: Tabellrader, fältgrupper i formulär, detaljvyer med ännu ej ifylld information
Klassificering
Tomt av naturliga skäl (no-content)
Vyn är tom för att användaren ännu inte skapat eller tagit emot något innehåll. Det är ett förväntat och normalt tillstånd.
Ton: uppmuntrande, framåtblickande
Inkludera en CTA om det är möjligt för användaren att initiera innehåll
Exempel: "Du har inga ärenden än. Skapa ditt första ärende för att komma igång."
Tomt efter filtrering eller sökning (no-results)
Vyn är tom som ett direkt resultat av användarens sökning eller filtrering.
Ton: neutral, hjälpsam
Förklara att inga träffar hittades utifrån aktuella kriterier
Föreslå att ändra söktermen eller rensa filter
Inkludera inte en skapande CTA – kontexten handlar om att hitta, inte skapa
Exempel: "Inga ärenden matchar din sökning. Prova att ändra sökord eller ta bort ett filter."
Saknad information i komponent (missing-data)
Ett fält eller en datapunkt saknar värde. Det kan bero på att informationen inte fyllts i, inte hämtats eller inte är tillgänglig.
Ton: neutral, deskriptiv
Använd en platshållartext som tydligt signalerar att värdet saknas, t.ex. — eller Ej angivet
Undvik att lämna fältet tomt – en tom yta ger ingen information
Exempel i en personvy: Ej angivet för namn, e-postadress och telefonnummer som ännu inte fyllts i
Riktlinjer
Beteende
Vy-nivå: empty state visas direkt när vyn laddas och inga dataobjekt finns att rendera. Det ska inte animeras in med fördröjning – det ska finnas där direkt. Om en CTA klickas, navigerar den användaren till relevant skapandeflöde eller utlöser en dialog; det hör till det aktuella flödets mönster att hantera det.
Komponent-nivå: platshållartexten ersätter det saknade värdet utan att förändra komponentens layout eller höjd. I tabeller placeras texten som en enda rad under kolumnrubrikerna och spänner hela tabellbredden.
Visuell utformning
Vy-nivå: centrera innehållet horisontellt i vyn. Illustrationen placeras ovanför rubriken. Använd illustrationer från designsystemets illustrationsbibliotek – aldrig ikoner. Välj en illustration som är semantiskt kopplad till vyns syfte. CTA-knappen placeras under preamble-texten och följer primär- eller sekundärknappshierarkin beroende på åtgärdens vikt.
Komponent-nivå: texten är kursiv och färgsatt med text-subtle-on-default. Ingen illustration, ingen rubrik. Storleken följer den omgivande komponentens textstil.
Innehåll och språk
Rubrik (vy-nivå): besvara varför vyn är tom i en kort, tydlig mening. Undvik generiska fraser som "Inget att visa". Var specifik utifrån vyns kontext.
Undvik: "Inga objekt hittades"
Föredra: "Du har inga meddelanden" eller "Inga ärenden har skapats ännu"
Preamble (vy-nivå): beskriv kort vad användaren normalt sett skulle se i den här vyn. Håll det till en till två meningar. Sätt förväntningar utan att vara teknisk.
CTA-text (vy-nivå, när relevant): använd ett handlingsorienterat verb kopplat till det specifika objektet.
Undvik: "Kom igång"
Föredra: "Skapa ärende" eller "Lägg till mottagare"
Platshållartext (komponent-nivå): använd Ej angivet för information som saknas men kan fyllas i. Använd ett tankstreck (—) för information som inte är tillämpbar. Undvik att lämna fältet tomt.
Gör / Gör inte
Gör
Använd en illustration som är semantiskt relevant för vyns syfte
Skriv en rubrik som är specifik för just den vyn eller det sammanhanget
Inkludera en CTA när användaren kan initiera innehåll direkt
Använd text-subtle-on-default och kursiv stil för komponent-nivå platshållartext
Separera no-content och no-results med olika ton och, i förekommande fall, olika CTA
Gör inte
Använd inte ikoner som visuellt huvudelement i vy-nivå empty states – använd illustrationer
Lämna inte fält tomma i komponent-nivå – skriv alltid ut att information saknas
Använd inte generiska fraser som "Inget att visa" eller "Tom vy"
Visa inte en CTA i no-results-tillstånd – det stör användarens mentala modell
Använd inte felmeddelande-komponenter för att kommunicera tomhet – det sänder fel signal
Tillgänglighet
WCAG-relevanta kriterier
Kriterium | Beskrivning |
1.3.1 Info and Relationships | Strukturen på empty state-innehållet (rubrik, beskrivning, CTA) ska kommuniceras semantiskt, inte bara visuellt. Använd rätt HTML-element. |
1.4.1 Use of Color | Platshållartexten på komponent-nivå kommuniceras med kursiv stil och färg. Säkerställ att information inte kommuniceras enbart via färgen text-subtle-on-default. |
1.4.3 Contrast | Platshållartexten med text-subtle-on-default ska uppfylla kontrastkravet 4.5:1 mot bakgrundsfärgen. Verifiera detta i designsystemets tokenspecifikation. |
2.4.6 Headings and Labels | Rubriken i vy-nivå empty states ska använda korrekt rubriknivå i dokumenthierarkin – vanligtvis h2 eller h3 beroende på sidstruktur. |
4.1.2 Name, Role, Value | Om empty state innehåller en CTA-knapp ska den ha ett tillgängligt namn som är meningsfullt utan visuell kontext. |
4.1.3 Status Messages | Om ett empty state visas dynamiskt (t.ex. efter en sökning) ska det programmatiskt kommuniceras till hjälpmedel utan att fokus förflyttas. |
Riktlinjer
Vy-nivå: lägg empty state-innehållet i en <section> eller <div> med ett beskrivande aria-label om det inte redan har en synlig rubrik som identifierar sektionen
Om empty state visas dynamiskt efter en användarinteraktion (t.ex. sökning): använd en role="status" eller aria-live="polite"-region för att meddela skärmläsare att inga resultat hittades, utan att flytta fokus
CTA-knappen ska ha ett tillgängligt namn som är självförklarande: "Skapa ärende" är tillgängligt, "Klicka här" är inte det
Illustration: märk upp illustrationen med alt="" (dekorativ) eftersom rubriken och preamble-texten kommunicerar det meningsbärande innehållet – illustrationen ska inte duplicera texten via alt-text
Komponent-nivå: platshållartexten är ren text i DOM – undvik att dölja den enbart visuellt med CSS på ett sätt som exkluderar den från tillgänglighetsträdet
Tangentbord: CTA i empty state ska nås och aktiveras med tangentbord enligt standard fokusordning. Inga särskilda fokushanteringsbehov finns om empty state är ett statiskt tillstånd. Om det visas dynamiskt, säkerställ att fokus inte hamnar utanför synligt innehåll.
Sammanfattning
Empty state-mönstret används för att kommunicera att en vy eller komponent saknar innehåll, och skiljer på vy-nivå (med illustration, rubrik, preamble och valfri CTA) och komponent-nivå (med kursiv platshållartext i text-subtle-on-default). Mönstret ska alltid sätta rätt förväntningar – förklara varför det är tomt och vad som normalt visas – och skilja på tillståndet "inget har skapats än" kontra "sökningen gav inga träffar". Dynamiskt visade empty states ska tillgängliggöras via aria-live så att skärmläsaranvändare får korrekt feedback.