Yleistä
Taulukoiden ja listojen avulla voidaan näyttää tietoryhmiä helposti selailtavassa muodossa.
Oikean esitystavan valinta vaikuttaa siihen, miten helposti käyttäjä löytää ja hahmottaa tiedot. Hyvin valittu esitystapa vähentää myös käyttäjän kognitiivista kuormaa. Myös käytettävissä oleva tila voi asettaa rajoitteita.
Taulukot
Taulukot mahdollistavat suurtenkin tietomassojen selailun, käsittelyn ja vertailun. Olennaiset tiedot on usein helppo löytää taulukosta, ja myös tietojen järjestäminen ja suodattaminen on tehokasta. Taulukot voi toteuttaa TableV2-komponentilla
Taulukot sopivat tyypillisesti esimerkiksi asiantuntijakäyttöliittymiin, joissa tietomäärät ovat suuria ja joissa tietoja pitää voida selailla tehokkaasti. Asiantuntijakäyttöliittymissä näytön leveys ei yleensä rajoita taulukon kokoa samalla tavalla kuin kapeammissa näkymissä, koska niitä ei yleensä käytetä mobiililaitteilla.
Huomioi, että taulukot vaativat riittävästi tilaa vaakasuunnassa. Ne eivät siten välttämättä sovellu kapeisiin näkymiin, jotka ovat tyypillisiä henkilöasiakkaiden palveluissa. Tarvittaessa taulukkoon voi sisällyttää vaakasuuntaisen vierityspalkin, mutta tämä usein huonontaa käytettävyyttä.
Käytä taulukkoa, kun
- tietoja pitää pystyä vertailemaan tai analysoimaan
- tietoja pitää pystyä suodattamaan ja lajittelemaan
- numeerisia tietoja pitää pystyä laskemaan yhteen
- tietoryhmät ovat rakenteeltaan yhteismitallisia, ja niille voidaan antaa yhteiset sarakeotsikot
- tietomassat ovat suuria, ja tietoja pitää pysytä näkemään mahdollisimman paljon kerrallaan
- käytettävissä on riittävästi vaakasuuntaista tilaa.
function ExampleTable() {
const headers = [
{
name: "Nimi",
key: "nimi",
align: "left",
},
{
name: "Menolaji",
key: "menolaji",
align: "left",
},
{
name: "Lisätieto",
key: "lisatieto",
align: "left",
},
{
name: "Ilmoitettu",
key: "ilmoitettu",
align: "right",
},
{
name: "Huomioitu",
key: "huomioitu",
align: "right",
},
];
const rows = [
{
id: "row-0",
nimi: "Suominen, Anni Onni",
menolaji: "Perusosa",
lisatieto: "Yksin asuva",
ilmoitettu: null,
huomioitu: 487.89,
},
{
id: "row-1",
nimi: "Suominen, Anni Onni",
menolaji: "Hammashoitomaksu",
lisatieto: null,
ilmoitettu: 75.0,
huomioitu: 75.0,
},
{
id: "row-2",
nimi: "Suominen, Anni Onni",
menolaji: "Asiakirjamaksu",
lisatieto: null,
ilmoitettu: 150.0,
huomioitu: 150.0,
},
{
id: "row-3",
nimi: "Suominen, Anni Onni",
menolaji: "Vakuutusmaksu",
lisatieto: null,
ilmoitettu: 50.0,
huomioitu: 50.0,
},
{
id: "row-4",
nimi: "Suominen, Anni Onni",
menolaji: "Asiantuntijalausunto",
lisatieto: null,
ilmoitettu: 350.0,
huomioitu: 350.0,
},
{
id: "row-5",
nimi: "Suominen, Anni Onni",
menolaji: "Lääkekulut",
lisatieto: null,
ilmoitettu: 15.0,
huomioitu: 15.0,
},
];
const formatCurrency = (amount) => new Intl.NumberFormat("fi-FI", { minimumFractionDigits: 2 }).format(amount);
const getTotalSum = (data, prop) => data.reduce((sum, el) => sum + (Number(el[prop]) || 0), 0);
const { data, sortKey, sortOrder, requestSort } = useSort(rows);
const description = {
none: "ei järjestystä",
ascending: "järjestetty nousevasti",
descending: "järjestetty laskevasti",
};
const sortLabel = headers.find((el) => el.key === sortKey)?.name || undefined;
const sortDescription = description?.[sortOrder];
return (
<TableV2 sortLabel={sortLabel} sortDescription={sortDescription} size="xs">
<TableV2Caption className="kds-mb-1">Menot</TableV2Caption>
<TableV2Head>
<TableV2HeadRow hasBorder={false}>
{headers.map(({ key, name, align }) => (
<TableV2HeadCell
align={align}
key={key}
onClick={() => requestSort(key)}
order={sortKey === key ? sortOrder : null}
scope="col"
>
{name}
</TableV2HeadCell>
))}
</TableV2HeadRow>
<TableV2HeadRow>
<TableV2HeadCell dense="top" scope="col">
<Select size="xs" aria-label="Suodata nimen perusteella">
<option>Suodata</option>
<option>Suominen Anni Onni</option>
</Select>
</TableV2HeadCell>
<TableV2HeadCell dense="top" scope="col">
<Select size="xs" aria-label="Suodata menolajin perusteella">
<option>Suodata</option>
<option>Hammashoitomaksu</option>
<option>Asiakirjamaksu</option>
</Select>
</TableV2HeadCell>
<TableV2HeadCell as="td" dense="top" />
<TableV2HeadCell as="td" dense="top" />
<TableV2HeadCell as="td" dense="top" />
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
{data.map((row) => (
<TableV2Row key={row.id}>
{headers.map(({ key, align }) => (
<TableV2Cell key={`${key}-${row.id}`} align={align}>
{typeof row[key] === "number" && formatCurrency(row[key])}
{typeof row[key] !== "number" && row[key]}
</TableV2Cell>
))}
</TableV2Row>
))}
</TableV2Body>
<TableV2Footer>
<TableV2Row isSummary>
<TableV2Cell colSpan={3} align="right">
Yhteensä
</TableV2Cell>
<TableV2Cell align="right">{formatCurrency(getTotalSum(rows, "ilmoitettu"))}</TableV2Cell>
<TableV2Cell align="right">{formatCurrency(getTotalSum(rows, "huomioitu"))}</TableV2Cell>
</TableV2Row>
</TableV2Footer>
</TableV2>
);
}
Listat
Listojen avulla selattavat tietomassat saadaan sopimaan taulukoita paremmin kapeille näytöille. Listojen avulla voi esittää myös sellaisia tietoja, jotka eivät luonteeltaan sovi taulukoihin.
Listojen periaatteita noudattaa myös korttimainen esitystapa.
Käytä listaa, kun
- käyttäjän on tärkeämpää löytää ja tarkastella yksittäisiä kohteita kuin vertailla niitä keskenään
- tietoryhmillä ei ole keskenään samanlaista rakennetta tai ne eivät ole keskenään yhteismitallisia
- vaakasuuntaista tilaa on käytössä rajallisesti (esim. kapea mobiilinäkymä)
- tietoryhmä sisältää visuaalisia elementtejä (esim. kuvia).
function TopicalElement({ date, heading, badge, desc, border = true }) {
return (
<div className={clsx("kds-py-4", { "kds-border-b kds-border-default kds-border-solid": border })}>
<Text color="muted" mb={2}>
<span className="kds-mr-4">{date}</span>
<Badge variant="light">{badge}</Badge>
</Text>
<Heading as="h5" mb={2} mt={0}>
<Link href="#" className="kds-relative kds-block kds-pr-12" underline={false} variant="dark">
{heading}
<IconUiArrowRight className="kds-absolute right-0 top-1" size="sm" />
</Link>
</Heading>
<Text color="muted" mb={0}>
{desc}
</Text>
</div>
);
}
function ArticleList() {
return (
<div className="kds-max-w-screen-sm">
<Heading as="h4" mt={0}>
Tiedotteet ja artikkelit
</Heading>
<List mb={0} unstyled>
<ListItem>
<TopicalElement
date="13.9.2025"
heading="Matkailijan terveysopas: Näin varaudut sairaanhoitoon ulkomailla"
badge="Artikkeli"
desc="Henkilöasiakkaat"
/>
</ListItem>
<ListItem>
<TopicalElement
date="9.6.2025"
heading="Veronpalautus voi vaikuttaa toimeentulotukeen"
badge="Tiedote"
desc="Henkilöasiakkaat | Kumppanit | Media ja sidosryhmät"
/>
</ListItem>
<ListItem>
<TopicalElement
date="5.6.2025"
heading="Pohditko toimeentulotuen hakemista? Nämä asiat voivat estää tuen saamisen"
badge="Artikkeli"
desc="Henkilöasiakkaat"
/>
</ListItem>
<ListItem>
<TopicalElement
date="4.6.2025"
heading="Kela ei enää lähetä kirjettä kuntoutuskustannusten maksamisesta"
badge="Artikkeli"
desc="Henkilöasiakkaat"
border={false}
/>
</ListItem>
</List>
</div>
);
}
render(<ArticleList />);
function TopicalElement({ date, heading, badge, desc, variant, type, border = true }) {
return (
<div className={clsx("kds-py-4", { "kds-border-b kds-border-default kds-border-solid": border })}>
<Text className="kds-flex kds-justify-between" color="muted" mb={2}>
<span>{date}</span>
<span>{type}</span>
</Text>
<Heading as="h5" mb={2} mt={0}>
{heading}
</Heading>
<Text mb={2}>
<Badge variant={variant}>{badge}</Badge>
</Text>
<Text mb={0}>{desc}</Text>
</div>
);
}
function ArticleList() {
return (
<div style={{ maxWidth: "24rem" }}>
<List mb={0} unstyled>
<ListItem>
<TopicalElement
date="13.9.2025"
heading="Sairastaminen"
badge="Valmis"
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
variant="success"
type={
<>
<IconUiPhone className="kds-mr-2" />
Puhelu
</>
}
/>
</ListItem>
<ListItem>
<TopicalElement
date="9.6.2025"
heading="Työttömyys"
badge="Odottaa vastausta"
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
variant="warning"
type={
<>
<IconUiMessage className="kds-mr-2" />
Viesti
</>
}
/>
</ListItem>
<ListItem>
<TopicalElement
date="5.6.2025"
heading="Kuntoutukseen hakeminen"
badge="Valmis"
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
variant="success"
type={
<>
<IconUiPhone className="kds-mr-2" />
Puhelu
</>
}
/>
</ListItem>
<ListItem>
<TopicalElement
date="4.6.2025"
heading="Lapsen syntymä"
badge="Valmis"
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
variant="success"
type={
<>
<IconUiChatBubble className="kds-mr-2" />
Chat
</>
}
border={false}
/>
</ListItem>
</List>
</div>
);
}
render(<ArticleList />);
function TopicalElement({ heading, desc, phone, mail }) {
return (
<div className="kds-flex kds-mb-6">
<div
style={{ width: "7rem", height: "8rem", backgroundColor: "var(--kds-color-light-bg)" }}
className="kds-mr-4 kds-border kds-border-default kds-border-solid"
/>
<div>
<Heading as="h5" mb={1} mt={2}>
{heading}
</Heading>
<Text color="muted" mb={2}>
{desc}
</Text>
<Text mb={0}>
<Link href="#">{mail}</Link>
<br />
<Link href="#">{phone}</Link>
</Text>
</div>
</div>
);
}
function ArticleList() {
return (
<div style={{ maxWidth: "24rem" }}>
<List unstyled>
<ListItem>
<TopicalElement heading="Eija Esimerkki" desc="tutkija" mail="eija.esimerkki@kela.fi" phone="050 123 4567" />
</ListItem>
<ListItem>
<TopicalElement
heading="Matti Meikäläinen"
desc="erikoistutkija"
mail="matti.meikäläinen@kela.fi"
phone="050 123 4567"
/>
</ListItem>
<ListItem>
<TopicalElement
heading="Kerttu Kelalainen"
desc="tutkimuspäällikkö"
mail="kerttu.kelalainen@kela.fi"
phone="050 123 4567"
/>
</ListItem>
</List>
</div>
);
}
render(<ArticleList />);
Taulukon muuttaminen listaksi
Suuret taulukot ovat harvoin selkein tapa esittää tietoa kansalaisten palveluissa, joiden tulee toimia myös mobiilinäytöillä. Taulukoita voikin olla tarpeen muuttaa listoiksi esimerkiksi tilanteissa, joissa käytössä ollut taulukkomuotoinen esitystapa pitäisi saada muutettua mobiilikäyttöliittymälle sopivaan muotoon.
Jos taulukko on laaja, tiedot voi olla joskus hyödyllistä jakaa useampaan listaan. Laajojen taulukoiden osalta on myös hyvä varmistaa, ovatko kaikki tiedot käyttäjän kannalta olennaisia.
Yksinkertaisin tapa muuttaa taulukko listaksi on näyttää kunkin rivin tiedot allekkain ryhmänä. Jos tilaa on riittävästi, tietoja voi esittää myös rinnakkain.
function BadgeTable({ rows = 3 }) {
const tableVariants = ["light", "light", "light", "primary"];
return (
<div className="w-full">
<TableV2>
<TableV2Head>
<TableV2HeadRow>
{tableVariants.map((variant, idx) => (
<TableV2HeadCell key={`head-${idx}`}>
<Badge variant="dark" className={idx < 3 ? "kds-w-2/4" : "kds-w-1/4"} style={{ height: ".75rem" }}>
{" "}
</Badge>
</TableV2HeadCell>
))}
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
{[...Array(rows)].map((_, rowIndex) => (
<TableV2Row key={`row-${rowIndex}`}>
{tableVariants.map((variant, cellIndex) => (
<TableV2Cell key={`cell-${rowIndex}-${cellIndex}`}>
<Badge
variant={rowIndex === 2 && variant === "primary" ? "danger" : variant}
className={cellIndex < 3 ? "kds-w-2/4" : "kds-w-1/4"}
style={{ height: ".75rem" }}
>
{" "}
</Badge>
</TableV2Cell>
))}
</TableV2Row>
))}
</TableV2Body>
</TableV2>
</div>
);
}
<div>
{[...Array(3)].map((_, rowIndex) => (
<div key={`list-row-${rowIndex}`} className="grid grid-cols-2 gap-2" style={{ maxWidth: "24rem" }}>
<List unstyled className="kds-py-4 kds-border-b kds-border-default kds-border-solid" mb={0}>
<ListItem className="flex items-center">
<Badge variant="dark" className="kds-w-2/4" style={{ height: ".75rem" }}>
{" "}
</Badge>
<Badge
variant={rowIndex !== 2 ? "primary" : "danger"}
className="kds-w-1/4 kds-ml-4"
style={{ height: ".75rem" }}
>
{" "}
</Badge>
</ListItem>
<ListItem className="flex items-center">
<Badge variant="light" className="kds-w-2/4" style={{ height: ".75rem" }}>
{" "}
</Badge>
</ListItem>
<ListItem className="flex items-center">
<Badge variant="light" className="kds-w-2/4" style={{ height: ".75rem" }}>
{" "}
</Badge>
</ListItem>
</List>
</div>
))}
</div>
Listan ulkoasua ja käytettävyyttä voi parantaa kiinnittämällä huomiota seuraaviin asioihin:
- Minkälainen tietojen järjestys tukee listan silmäilyä?
- Mitkä tiedot ovat tarpeellisia? Voiko taulukon sarakeotsikot jättää listasta pois?
- Onko jotain tietoja tarpeen korostaa?
<TableV2>
<TableV2Head>
<TableV2HeadRow>
<TableV2HeadCell>Etuus</TableV2HeadCell>
<TableV2HeadCell>Ratkaisupäivä</TableV2HeadCell>
<TableV2HeadCell>Ratkaisu</TableV2HeadCell>
<TableV2HeadCell>Ajanjakso</TableV2HeadCell>
<TableV2HeadCell>Lisätieto</TableV2HeadCell>
<TableV2HeadCell>Päätös</TableV2HeadCell>
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
<TableV2Row>
<TableV2Cell>Äitiyspäiväraha</TableV2Cell>
<TableV2Cell>14.3.2022</TableV2Cell>
<TableV2Cell>Myönnetty</TableV2Cell>
<TableV2Cell>28.3.2022-31.3.2023</TableV2Cell>
<TableV2Cell>Nostrud exercitation</TableV2Cell>
<TableV2Cell>
<Link href="#" standalone>
Avaa päätös
</Link>
</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Sairauspäiväraha</TableV2Cell>
<TableV2Cell>15.5.2022</TableV2Cell>
<TableV2Cell>Myönnetty</TableV2Cell>
<TableV2Cell>20.4.2022-31.3.2023</TableV2Cell>
<TableV2Cell></TableV2Cell>
<TableV2Cell>
<Link href="#" standalone>
Avaa päätös
</Link>
</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Työkyvyttömyyseläke</TableV2Cell>
<TableV2Cell>30.5.2022</TableV2Cell>
<TableV2Cell>Hylätty</TableV2Cell>
<TableV2Cell>28.3.2022-</TableV2Cell>
<TableV2Cell>Nostrud exercitation</TableV2Cell>
<TableV2Cell>
<Link href="#" standalone>
Avaa päätös
</Link>
</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Työttömyyspäiväraha</TableV2Cell>
<TableV2Cell>30.5.2025</TableV2Cell>
<TableV2Cell>Myönnetty</TableV2Cell>
<TableV2Cell>20.4.2025-31.6.2025</TableV2Cell>
<TableV2Cell></TableV2Cell>
<TableV2Cell>
<Link href="#" standalone>
Avaa päätös
</Link>
</TableV2Cell>
</TableV2Row>
</TableV2Body>
</TableV2>
<List unstyled mb={0} style={{ maxWidth: "24rem" }}>
<ListItem className="kds-border-solid kds-border-b kds-border-default kds-pb-6 kds-mb-6">
<Heading as="h5" mt={0}>
Äitiyspäiväraha
</Heading>
<DescriptionList spacing="sm" className="kds-mb-4">
<DescriptionListItem label="Ratkaisupäivä">14.3.2025</DescriptionListItem>
<DescriptionListItem label="Ajanjakso">28.3.2022-31.3.2023</DescriptionListItem>
<DescriptionListItem label="Ratkaisu">Myönnetty</DescriptionListItem>
<DescriptionListItem label="Lisätieto">Nostrud exercitation</DescriptionListItem>
</DescriptionList>
<Text mb={0}>
<Link href="#" standalone target="_blank">
Avaa päätös
</Link>
</Text>
</ListItem>
<ListItem>
<Heading as="h5" mt={0}>
Sairauspäiväraha
</Heading>
<DescriptionList spacing="sm" className="kds-mb-4">
<DescriptionListItem label="Ratkaisupäivä">14.3.2025</DescriptionListItem>
<DescriptionListItem label="Ajanjakso">28.3.2022-31.3.2023</DescriptionListItem>
<DescriptionListItem label="Ratkaisu">Myönnetty</DescriptionListItem>
<DescriptionListItem label="Lisätieto">Nostrud exercitation</DescriptionListItem>
</DescriptionList>
<Text mb={0}>
<Link href="#" standalone target="_blank">
Avaa päätös
</Link>
</Text>
</ListItem>
</List>
<List unstyled mb={0} style={{ maxWidth: "24rem" }} size="sm">
<ListItem className="kds-border-solid kds-border-b kds-border-default kds-pb-4 kds-mb-4">
<Heading as="h5" mt={0} mb={4}>
Äitiyspäiväraha
</Heading>
<DescriptionList spacing="xs" labelWidth="xs" className="kds-mb-2">
<DescriptionListItem label="Ratkaisupäivä">14.3.2025</DescriptionListItem>
<DescriptionListItem label="Ajanjakso">28.3.2022-31.3.2023</DescriptionListItem>
<DescriptionListItem label="Ratkaisu">Myönnetty</DescriptionListItem>
<DescriptionListItem label="Lisätieto">Nostrud exercitation</DescriptionListItem>
</DescriptionList>
<Text mb={0}>
<Link href="#" standalone target="_blank">
Avaa päätös
</Link>
</Text>
</ListItem>
<ListItem>
<Heading as="h5" mt={0} mb={4}>
Sairauspäiväraha
</Heading>
<DescriptionList spacing="xs" labelWidth="xs" className="kds-mb-2">
<DescriptionListItem label="Ratkaisupäivä">14.3.2025</DescriptionListItem>
<DescriptionListItem label="Ajanjakso">28.3.2022-31.3.2023</DescriptionListItem>
<DescriptionListItem label="Ratkaisu">Myönnetty</DescriptionListItem>
<DescriptionListItem label="Lisätieto">Nostrud exercitation</DescriptionListItem>
</DescriptionList>
<Text mb={0}>
<Link href="#" standalone target="_blank">
Avaa päätös
</Link>
</Text>
</ListItem>
</List>
function TopicalElement({ date, heading, badge, desc, dateRange }) {
return (
<div>
<Text color="muted" mb={2}>
{date}
</Text>
<Heading as="h5" mt={0} mb={2}>
{heading}
</Heading>
<Text color="muted" mb={2}>
{dateRange}
</Text>
<Text mb={2}>{badge}</Text>
<Text mb={2}>{desc}</Text>
<Text mb={0}>
<Link href="#" standalone target="_blank">
Avaa päätös
</Link>
</Text>
</div>
);
}
function ArticleList() {
return (
<div style={{ maxWidth: "24rem" }}>
<List unstyled>
<ListItem className="kds-border-solid kds-border-b kds-border-default kds-pb-4 kds-mb-4">
<TopicalElement
date="13.9.2025"
dateRange="28.3.2022 - 31.3.2023"
heading="Äitiyspäiväraha"
badge={<Badge variant="success">Myönnetty</Badge>}
desc="Nostrud exercitation ullamco laboris."
/>
</ListItem>
<ListItem className="kds-border-solid kds-border-b kds-border-default kds-pb-4 kds-mb-4">
<TopicalElement
date="13.9.2025"
dateRange="28.3.2022 - 31.3.2023"
heading="Sairauspäiväraha"
badge={<Badge variant="success">Myönnetty</Badge>}
/>
</ListItem>
<ListItem className="kds-border-solid kds-border-b kds-border-default kds-pb-4 kds-mb-4">
<TopicalElement
date="13.9.2025"
dateRange="28.3.2022 - 31.3.2023"
heading="Työkyvyttömyyseläke"
badge={<Badge variant="danger">Hylätty</Badge>}
desc="Nostrud exercitation ullamco laboris."
/>
</ListItem>
<ListItem>
<TopicalElement
date="13.9.2025"
dateRange="28.3.2022 - 31.3.2023"
heading="Työttömyyspäiväraha"
badge={<Badge variant="success">Myönnetty</Badge>}
/>
</ListItem>
</List>
</div>
);
}
render(<ArticleList />);
Aina taulukon tietojen muuttaminen listaksi ei ole tarpeen. Useita sarakkeita sisältävän taulukon näyttäminen listana voi hankaloittaa tietokokonaisuuden hahmottamista ja tietojen vertailua. Tarvittaessa taulukkoon voi sisällyttää kapealla näytöllä vaakasuuntaisen vierityspalkin, joka toisaalta saattaa heikentää taulukon käytettävyyttä.
<TableV2 hasScrollHint>
<TableV2Head>
<TableV2HeadRow>
<TableV2HeadCell scope="col">Hyvinvointialue</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Väestö, alle 65-vuotiaat
</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Yleisenasumistuen saajat
</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Saajien osuus, %
</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Tukea saavat ruokakunnat
</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Keskimääräinen asumistuki, e/kk
</TableV2HeadCell>
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
<TableV2Row>
<TableV2Cell>Helsinki</TableV2Cell>
<TableV2Cell align="right">566 683</TableV2Cell>
<TableV2Cell align="right">108 591</TableV2Cell>
<TableV2Cell align="right">19,2</TableV2Cell>
<TableV2Cell align="right">68 049</TableV2Cell>
<TableV2Cell align="right">461,19</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Pirkanmaa</TableV2Cell>
<TableV2Cell align="right">423 892</TableV2Cell>
<TableV2Cell align="right">63 242</TableV2Cell>
<TableV2Cell align="right">14,9</TableV2Cell>
<TableV2Cell align="right">43 630</TableV2Cell>
<TableV2Cell align="right">322,77</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Länsi-Uusimaa</TableV2Cell>
<TableV2Cell align="right">409 785</TableV2Cell>
<TableV2Cell align="right">52 257</TableV2Cell>
<TableV2Cell align="right">12,8</TableV2Cell>
<TableV2Cell align="right">28 070</TableV2Cell>
<TableV2Cell align="right">447,02</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Varsinais-Suomi</TableV2Cell>
<TableV2Cell align="right">375 275</TableV2Cell>
<TableV2Cell align="right">52 611</TableV2Cell>
<TableV2Cell align="right">14,0</TableV2Cell>
<TableV2Cell align="right">35 184</TableV2Cell>
<TableV2Cell align="right">325,32</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Pohjois-Pohjanmaa</TableV2Cell>
<TableV2Cell align="right">328 445</TableV2Cell>
<TableV2Cell align="right">43 798</TableV2Cell>
<TableV2Cell align="right">13,3</TableV2Cell>
<TableV2Cell align="right">28 148</TableV2Cell>
<TableV2Cell align="right">316,89</TableV2Cell>
</TableV2Row>
</TableV2Body>
</TableV2>
Tilankäyttö
Responsiivisuus tarkoittaa sisältöjen mukautumista eri näyttökokoihin. Taulukoiden ja listojen responsiivisuus vaikuttaa sekä asetteluun että käytettävyyteen.
Jos leveällä näytöllä näytettävä taulukko ei mahdu kapealle näytölle, näkymän kaventuessa tiedot voidaan näyttää esimerkiksi listassa.
Jos sisällöt on ensisijaisesti suunniteltu mobiilikäyttöön ja ne esitetään listana, varmista, että sisällöt toistuvat selkeinä myös leveillä näytöillä. Listan asettelua voi muuttaa leveille näytöille sopivaksi esimerkiksi tuomalla tietoja rinnakkain.
Alla oleva koodiesimerkki mukautuu käytettävissä olevan tilan mukaan. Leveässä näkymässä tiedot näytetään rinnakkain, jolloin ne toimivat taulukon sarakkeiden tapaan.
<>
<List unstyled>
<ListItem>
<Box p={0} rounded bgColor="background">
<LinkBox href="#" className="kds-focus-ring-inset kds-rounded-t-md sm:kds-py-6" contentAs="div">
<Heading as="h3" size={5} mt={0} mb={2}>
AMORION 50 mg/ml
</Heading>
<Text color="brand-primary" darkColor="body">
jauhe oraalisuspensiota varten
</Text>
</LinkBox>
<Spacing base={4} sm={6}>
<DescriptionList labelWidth="sm" spacing="xs" emphasizeValue sm={8} md={6} lg={6} xl={3} gy={4} stack>
<DescriptionListItem label="Määräyspäivä">26.5.2025</DescriptionListItem>
<DescriptionListItem label="Määrätty määrä">1 x 60 ml</DescriptionListItem>
<DescriptionListItem label="Lääkettä jäljellä">0</DescriptionListItem>
<DescriptionListItem label="Reseptin viimeinen voimassaolopäivä">26.5.2027</DescriptionListItem>
</DescriptionList>
</Spacing>
</Box>
</ListItem>
<ListItem>
<Box p={0} rounded bgColor="background">
<LinkBox href="#" className="kds-focus-ring-inset kds-rounded-t-md sm:kds-py-6" contentAs="div">
<Heading as="h3" size={5} mt={0} mb={2}>
Burana 600 mg
</Heading>
<Text color="brand-primary" darkColor="body">
Tabletti, kalvopäällysteinen
</Text>
</LinkBox>
<Spacing base={4} sm={6}>
<DescriptionList labelWidth="sm" spacing="xs" emphasizeValue sm={8} md={6} lg={6} xl={3} gy={4} stack>
<DescriptionListItem label="Määräyspäivä">14.10.2021</DescriptionListItem>
<DescriptionListItem label="Määrätty määrä">2 x 100 kpl</DescriptionListItem>
<DescriptionListItem label="Lääkettä jäljellä">0</DescriptionListItem>
<DescriptionListItem label="Reseptin viimeinen voimassaolopäivä">Ei voimassa</DescriptionListItem>
</DescriptionList>
</Spacing>
</Box>
</ListItem>
</List>
</>
Dataintensiivisyys tarkoittaa sitä, kuinka tiiviisti tai väljästi tiedot esitetään. Dataintensiivisyys voi vaikuttaa siihen, kuinka tehokkaasti käyttäjä saa oman tehtävänsä hoidettua.
Jos käyttäjän on tarve nähdä kerralla mahdollisimman paljon tietoryhmiä, kannattaa taulukoista ja listoista käyttää tiivistä esitystapaa. Tiivistäminen onnistuu usein välistyksiä pienentämällä tai asettelemalla tiedot rinnakkain. TableV2-komponentti tarjoaa myös tiiviin esitystavan.
Väljä lista:
<List unstyled mb={0} style={{ maxWidth: "24rem" }}>
<ListItem className="kds-border-solid kds-border-b kds-border-default kds-pb-6 kds-mb-6">
<Heading as="h5" mt={0}>
Äitiyspäiväraha
</Heading>
<DescriptionList spacing="sm" className="kds-mb-4">
<DescriptionListItem label="Ratkaisupäivä">14.3.2025</DescriptionListItem>
<DescriptionListItem label="Ajanjakso">28.3.2022-31.3.2023</DescriptionListItem>
<DescriptionListItem label="Ratkaisu">Myönnetty</DescriptionListItem>
<DescriptionListItem label="Lisätieto">Nostrud exercitation</DescriptionListItem>
</DescriptionList>
<Text mb={0}>
<Link href="#" standalone target="_blank">
Avaa päätös
</Link>
</Text>
</ListItem>
<ListItem>
<Heading as="h5" mt={0}>
Sairauspäiväraha
</Heading>
<DescriptionList spacing="sm" className="kds-mb-4">
<DescriptionListItem label="Ratkaisupäivä">14.3.2025</DescriptionListItem>
<DescriptionListItem label="Ajanjakso">28.3.2022-31.3.2023</DescriptionListItem>
<DescriptionListItem label="Ratkaisu">Myönnetty</DescriptionListItem>
<DescriptionListItem label="Lisätieto">Nostrud exercitation</DescriptionListItem>
</DescriptionList>
<Text mb={0}>
<Link href="#" standalone target="_blank">
Avaa päätös
</Link>
</Text>
</ListItem>
</List>
Tiivis lista:
<List unstyled mb={0} style={{ maxWidth: "24rem" }} size="sm">
<ListItem className="kds-border-solid kds-border-b kds-border-default kds-pb-4 kds-mb-4">
<Heading as="h5" mt={0} mb={4}>
Äitiyspäiväraha
</Heading>
<DescriptionList spacing="xs" labelWidth="xs" className="kds-mb-2">
<DescriptionListItem label="Ratkaisupäivä">14.3.2025</DescriptionListItem>
<DescriptionListItem label="Ajanjakso">28.3.2022-31.3.2023</DescriptionListItem>
<DescriptionListItem label="Ratkaisu">Myönnetty</DescriptionListItem>
<DescriptionListItem label="Lisätieto">Nostrud exercitation</DescriptionListItem>
</DescriptionList>
<Text mb={0}>
<Link href="#" standalone target="_blank">
Avaa päätös
</Link>
</Text>
</ListItem>
<ListItem>
<Heading as="h5" mt={0} mb={4}>
Sairauspäiväraha
</Heading>
<DescriptionList spacing="xs" labelWidth="xs" className="kds-mb-2">
<DescriptionListItem label="Ratkaisupäivä">14.3.2025</DescriptionListItem>
<DescriptionListItem label="Ajanjakso">28.3.2022-31.3.2023</DescriptionListItem>
<DescriptionListItem label="Ratkaisu">Myönnetty</DescriptionListItem>
<DescriptionListItem label="Lisätieto">Nostrud exercitation</DescriptionListItem>
</DescriptionList>
<Text mb={0}>
<Link href="#" standalone target="_blank">
Avaa päätös
</Link>
</Text>
</ListItem>
</List>
Väljä taulukko:
<TableV2>
<TableV2Head>
<TableV2HeadRow>
<TableV2HeadCell scope="col">Hyvinvointialue</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Kuntoutujien määrä
</TableV2HeadCell>
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
<TableV2Row>
<TableV2Cell>Pirkanmaa</TableV2Cell>
<TableV2Cell align="right">4 879</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Pohjois-Pohjanmaa</TableV2Cell>
<TableV2Cell align="right">3 474</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Varsinais-Suomi</TableV2Cell>
<TableV2Cell align="right">3 060</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Helsinki</TableV2Cell>
<TableV2Cell align="right">2 534</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Pohjois-Savo</TableV2Cell>
<TableV2Cell align="right">2 315</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Keski-Suomi</TableV2Cell>
<TableV2Cell align="right">2 219</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Pohjois-Karjala</TableV2Cell>
<TableV2Cell align="right">2 020</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Länsi-Uusimaa</TableV2Cell>
<TableV2Cell align="right">1 562</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Etelä-Pohjanmaa</TableV2Cell>
<TableV2Cell align="right">1 360</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Vantaa ja Kerava</TableV2Cell>
<TableV2Cell align="right">1 303</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Satakunta</TableV2Cell>
<TableV2Cell align="right">1 262</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Kanta-Häme</TableV2Cell>
<TableV2Cell align="right">1 198</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Lappi</TableV2Cell>
<TableV2Cell align="right">1 086</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Etelä-Savo</TableV2Cell>
<TableV2Cell align="right">1 052</TableV2Cell>
</TableV2Row>
</TableV2Body>
</TableV2>
Tiivis taulukko:
<TableV2 isStriped size="xs">
<TableV2Head>
<TableV2HeadRow>
<TableV2HeadCell scope="col">Hyvinvointialue</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Kuntoutujien määrä
</TableV2HeadCell>
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
<TableV2Row>
<TableV2Cell>Pirkanmaa</TableV2Cell>
<TableV2Cell align="right">4 879</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Pohjois-Pohjanmaa</TableV2Cell>
<TableV2Cell align="right">3 474</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Varsinais-Suomi</TableV2Cell>
<TableV2Cell align="right">3 060</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Helsinki</TableV2Cell>
<TableV2Cell align="right">2 534</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Pohjois-Savo</TableV2Cell>
<TableV2Cell align="right">2 315</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Keski-Suomi</TableV2Cell>
<TableV2Cell align="right">2 219</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Pohjois-Karjala</TableV2Cell>
<TableV2Cell align="right">2 020</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Länsi-Uusimaa</TableV2Cell>
<TableV2Cell align="right">1 562</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Etelä-Pohjanmaa</TableV2Cell>
<TableV2Cell align="right">1 360</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Vantaa ja Kerava</TableV2Cell>
<TableV2Cell align="right">1 303</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Satakunta</TableV2Cell>
<TableV2Cell align="right">1 262</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Kanta-Häme</TableV2Cell>
<TableV2Cell align="right">1 198</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Lappi</TableV2Cell>
<TableV2Cell align="right">1 086</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>Etelä-Savo</TableV2Cell>
<TableV2Cell align="right">1 052</TableV2Cell>
</TableV2Row>
</TableV2Body>
</TableV2>
Saavutettavuus
Listat toimivat ruudunlukijakäyttäjillä eri tavalla kuin taulukot. Listat luetaan käyttäjälle rivi kerrallaan. Taulukot puolestaan luetaan siten, että ruudunlukija toistaa jokaisesta solusta sekä sarakeotsikon että solun arvon.
Alla olevissa esimerkeissä on esitetty samat tiedot sekä taulukkona että listana. Molemmat esitystavat vievät käyttöliittymällä saman verran tilaa ja näyttävän hyvin samankaltaisilta. Ruudunlukijakäyttäjälle tietojen selaaminen listana on kuitenkin nopeampaa, sillä taulukossa ruudunlukija toistaa sarakeotsikon joka solussa.
<TableV2>
<TableV2Caption>Lapsilisän maksupäivät vuonna 2025</TableV2Caption>
<TableV2Head>
<TableV2HeadRow>
<TableV2HeadCell>Kuukausi</TableV2HeadCell>
<TableV2HeadCell>Maksupäivä</TableV2HeadCell>
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
<TableV2Row>
<TableV2Cell>tammikuu</TableV2Cell>
<TableV2Cell>24.1</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>helmikuu</TableV2Cell>
<TableV2Cell>26.2</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>maaliskuu</TableV2Cell>
<TableV2Cell>26.3</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>huhtikuu</TableV2Cell>
<TableV2Cell>25.4</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>toukokuu</TableV2Cell>
<TableV2Cell>23.5</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>kesäkuu</TableV2Cell>
<TableV2Cell>26.6</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>heinäkuu</TableV2Cell>
<TableV2Cell>25.7</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>elokuu</TableV2Cell>
<TableV2Cell>26.8</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>syyskuu</TableV2Cell>
<TableV2Cell>26.9</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>lokakuu</TableV2Cell>
<TableV2Cell>24.10</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>marraskuu</TableV2Cell>
<TableV2Cell>26.11</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell>joulukuu</TableV2Cell>
<TableV2Cell>23.12</TableV2Cell>
</TableV2Row>
</TableV2Body>
</TableV2>
<div>
<Heading as="h5" mt={0}>
Lapsilisän maksupäivät vuonna 2024
</Heading>
<div className="kds-px-4">
<DescriptionList gy={2}>
<DescriptionListItem
label="tammikuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
26.1.
</DescriptionListItem>
<DescriptionListItem
label="helmikuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
23.2.
</DescriptionListItem>
<DescriptionListItem
label="maaliskuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
26.3.
</DescriptionListItem>
<DescriptionListItem
label="huhtikuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
26.4.
</DescriptionListItem>
<DescriptionListItem
label="toukokuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
24.5.
</DescriptionListItem>
<DescriptionListItem
label="kesäkuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
26.6.
</DescriptionListItem>
<DescriptionListItem
label="heinäkuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
26.7.
</DescriptionListItem>
<DescriptionListItem
label="elokuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
23.8.
</DescriptionListItem>
<DescriptionListItem
label="syyskuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
26.9.
</DescriptionListItem>
<DescriptionListItem
label="lokakuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
25.10.
</DescriptionListItem>
<DescriptionListItem
label="marraskuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
26.11.
</DescriptionListItem>
<DescriptionListItem
label="joulukuu"
className="kds-border-b kds-border-solid kds-border-default kds-pb-2 kds-px-0"
>
20.12.
</DescriptionListItem>
</DescriptionList>
</div>
</div>