Siirry sisältöön

14.5.0

Pagination

Komponentti pitkien listausten sivutukseen.

Julkaistu versiossa 4.0.0

Esikatselu

Käyttötarkoitus

Sivutuksen avulla voit jakaa pitkät listat asiakkaan kannalta kohtuullisen pituisiin näkymiin. Voit jakaa esimerkiksi pitkän taulukkonäkymän tai hakutuloslistan useaan näkymään, jolloin yhden osion tietosisältöä on helpompi silmäillä. Sivutuksen avulla asiakas voi myös siirtyä sivulta toiselle.

Sivutuksen suunnitteluun vaikuttavat asiakkaan tarpeet ja käyttötilanne. Suunnittele sivutus kyseiseen tilanteeseen sopivaksi käyttämällä sivutuskomponentin tarjoamia vaihtoehtoja.

Mieti sivutuksen yhteydessä, kuinka paljon tietoa kannattaa kerralla näyttää. Asiakas ei saa joutua vaihtamaan sivua tarpeettoman moneen kertaan. Toisaalta pitkien listausten lataamisessa pitää huomioida myös järjestelmän suorituskyky.

Huomioi myös näytettävien tietojen järjestys. Jos asiakkaan kannalta oleellisimmat tiedot näytetään heti listauksen alussa, tarve sivujen vaihtamiselle vähenee.

Tee näin
  • Suunnittele sivutus sisällön ja käyttötilanteen ehdoilla.
  • Näytä aina, millä sivulla asiakas on.
  • Näytä aina sivujen kokonaismäärä, jos se on teknisesti mahdollista.
  • Tarjoa tarvittaessa Näytä kaikki -toiminto.
  • Sijoita sivutus asiakkaan kannalta järkevään paikkaan.
  • Anna asiakkaan tarvittaessa valita sivulla näytettävien kohteiden määrä..
  • Varmista, että sivutus toimii myös pienellä näytöllä. Suunnittele tarvittaessa pienelle näytölle erilainen sivutus.
  • Anna sivujen selaamisesta selkeä palaute myös ruudunlukijoille.
Älä tee näin
  • Älä näytä sivutusta, jos kaikki tiedot mahtuvat helposti samaan näkymään.
  • Vältä turhaa sivutusta. Jos tietojen määrä on kohtuullinen, sisältöä on usein helpompi selailla alaspäin vierittämällä.
  • Vältä tilannetta, jossa yhdelle sivulle jäisi vain muutama näytettävä tieto. Näytä tällöin kaikki tiedot samassa näkymässä.
  • Älä tarjoa sivutusta ainoana keinona tiedon löytämiseen. Tarjoa myös esimerkiksi hakutoiminto tai mahdollisuus tietojen suodattamiseen tai järjestämiseen.

Saavutettavuus

Varmista, että valittu sivutuskomponentti mahtuu tarvittaessa myös pienelle näytölle. Voit myös käyttää pienellä näytöllä erilaista sivutusta.

Pagination-komponentti renderöi <nav>-elementin. Muista kertoa ruudunlukijan käyttäjille mistä navigaatioelementissä on kyse aria-label-attribuutilla niin, että asiakas ymmärtää mitä sivulla olevia sisältöjä sivutus koskee.

Korosta aktiivisen sivun PaginationButton aina käyttämällä sivun korostusta active-propilla. Tämä korostaa painikkeen visuaalisesti ja lisää painikkeelle aina aria-current="page" -attribuutin automaattisesti.

Pudotusvalikossa olevalle sivulle aria-current="page" pitää asettaa itse, sillä se ei yleiskäyttöisenä komponenttina aseta tätä automaattisesti.

Jos sivutuksen eri sivuille on mahdollista linkittää tai sivun vaihtaminen päivittää osoitetta, kannattaa muuttaa sivutuksen painikkeet linkeiksi. Katso esimerkki kohdasta Sivutuksen toteutus linkkeinä. Kannattaa huomioida myös selaimen eteen- ja taaksepäin-painikkeiden toiminta.

Sivutustyypit

Valitse sivutustyyppi käyttökontekstin, asiakkaan tarpeiden ja käytettävissä olevan tilan mukaan. Sivutuskomponentti tarjoaa sivutuksen toteutukseen erilaisia painikkeita, joiden avulla voit rakentaa halutun sivutuksen.

Sivutuskomponentti koostuu useasta pienemmästä komponentista:

  • Pagination - Container-komponentti, jonka sisälle sivutus toteutetaan.
  • PaginationGroup - Komponentti, jonka avulla painikkeita ja tekstejä voi ryhmitellä loogisiin kokonaisuuksiin.
  • PaginationButton - Painike- tai linkkielementti yksittäisen sivun esittämiseen.
  • PaginationText - Sivutukseen liittyvät aputekstit, esim. näytettävien tietojen lukumäärä.

Sivunumerot

Käytä sivunumeroita, jotta asiakas voi selata sivuja järjestyksessä. Sivunumerot sopivat myös tilanteeseen, jossa sivuja on vähän, ja kaikki sivunumerot mahtuvat samaan näkymään. Asiakas voi siirtyä edelliselle tai seuraavalla sivulle nuolipainikkeella tai klikata haluamansa sivun numeroa.

Jos edelliselle tai seuraavalle sivulle ei voi siirtyä, älä piilota painikkeita, vaan estä painikkeen käyttö disabled-attribuutilla.

Voit näyttää sivuja niin monta kuin niitä näytölle mahtuu. Älä kuitenkaan rivitä sivunumeroita.

Jos sivuja on paljon, kaikki sivunumerot eivät välttämättä mahdu samaan näkymään. Tällöin sivuja voi piilottaa ja korvata ne kolmella pisteellä käyttämällä PaginationText-komponentin more-proppia. Ruudunlukijoille voi antaa kolmea pistettä paremmin kuvaavan tekstin srOnlyText-propilla. Näytä kuitenkin aina ensimmäinen sivu, viimeinen sivu, valittu sivu ja sitä edeltävät ja seuraavat 1-2 sivua (käytettävissä olevasta tilasta riippuen).

Jos tila ei riitä sivujen piilottamisesta huolimatta (esim. pienellä näytöllä), älä rivitä painikkeita vaan käytä mieluummin pudotusvalikkoa (ks. esimerkit alla).

Sivutus, kun asiakas on ensimmäisellä sivulla.

Sivutus, kun asiakas on sivujoukon keskellä olevalla sivulla.

Sivutus, kun asiakas on viimeisellä sivulla.

Jos sivujen kokonaismäärää ei tiedetä, sivun viimeisen painikkeen voi korvata kolmella pisteellä käyttämällä PaginationText-komponenttia ja more-propia.

Pudotusvalikko

Jos sivutettavaa sisältöä on paljon tai jos asiakas ei välttämättä selaa sisältöä järjestyksessä, kannattaa tarjota mahdollisuus siirtyä suoraan tietylle sivulle käyttämällä pudotusvalikkoa. Pudotusvalikko sopii myös tilanteisiin, joissa käytettävissä olevaa tilaa on vain vähän (esimerkiksi pienellä näytöllä). Näytä pudotusvalikon lisäksi aina myös edellinen- ja seuraava-painikkeet.

Jos sivujen kokonaismäärää ei tiedetä, sivutuksessa näytetään siirtymät edelliselle, seuraavalle ja ensimmäiselle sivulle. Lisäksi pudotusvalikon tilalla näytetään nykyisen sivun numero.

Sivutus, kun asiakas on ensimmäisellä sivulla.

Sivutus, kun asiakas on muulla kuin ensimmäisellä sivulla.

Yhdistelmä

Tarvittaessa voit yhdistellä komponenteista kokonaisuuden, joka vastaa asiakkaan tarpeisiin.

Näytä ensin sivun vaihtamiseen tarkoitetut painikkeet ja sen jälkeen mahdolliset sivutukseen liittyvät tekstimuotoiset lisätiedot. Esitä lopuksi muut sivutustoiminnot (esim. yhdellä sivulla näytettävien tietojen lukumäärä).

Näytettävien tietojen lukumäärä

Tarvittaessa voit antaa asiakkaan valita, kuinka paljon tietoa näkymässä kerrallaan näytetään. Aseta oletusvalinta niin, että se soveltuu useimpiin tilanteisiin eikä sitä tarvitse joka kerta vaihtaa.

Toteuta valikon porrastus siten, että valinnan muuttamisella on oikeasti merkitystä. Esimerkiksi 20 - 50 - 100 on merkityksellisempi porrastus kuin 10 - 20 - 30. Älä kuitenkaan tarjoa liikaa vaihtoehtoja, jotta kokonaisuus säilyy selkeänä.

Asiakkaalle voi tarjota Näytä kaikki -toiminnallisuuden, jos järjestelmän suorituskyky mahdollistaa sen (Esim. 20 - 50 - 100 - Kaikki). Huomioi kuitenkin aina myös se, kuinka paljon tietoa asiakkaan näytölle mahtuu.

Sivutettujen tietojen kokonaismäärän ja muut sivutusta tukevat aputekstit voi toteuttaa PaginationText -komponentilla.

Sijainti ja ryhmittely

Sivutus tasataan oletuksena vasempaan reunaan.

Kaksipalstaisen lomakeasettelun yhteydessä esiintyvän taulukon sivutuspainikkeet tasataan oikealle samoin kuin lomakkeen painikkeet.

Sivutus esitetään oletuksena aina listan alapuolella. Joissain tilanteissa (esim. pitkät hakutuloslistaukset) sivutus voidaan tarvittaessa esittää myös listan yläpuolella. Listan yläpuolelle sijoitetussa sivutuksessa kannattaa huomioida asiakkaan käyttökokemus. Selvitä, onko asiakkaalla tarve selata listan näkyvä sivu loppuun ennen seuraalle sivulle siirtymistä.

Sivutus voi koostua useasta toiminnosta tai toimintoryhmästä. Yksittäisen toimintoryhmän sisällä olevien painikkeiden välissä on aina 8px tyhjää tilaa. Erillisten toimintoryhmien välissä tilaa on 24px, jolloin erilaiset toiminnot erottuvat toisistaan selkeästi.

Aseta sivutuksen komponentit aina PaginationGroup-komponentin sisälle ja luo sillä tarvittavat toimintoryhmät Pagination-komponentin sisälle. PaginationGroup asettaa komponenttiryhmille automaattisesti halutun välistyksen.

Koodiesimerkit sivutuksen toteutukseen

Sivutuksen toteuttamiseen voi hyödyntää usePagination-hookkia.

Normaali sivutus

Näytettävien tietojen lukumäärän muuttaminen

Sivutuksen toteutus linkkeinä

Esimerkki päivittää osoitteen page-parametria, kun sivua vaihdetaan. Tämä mahdollistaa myös linkittämisen tietylle sivulle sekä selaimen takaisin- ja eteenpäin-painikkeiden toiminnan.

Toteutuksessa kannattaa hyödyntää sovelluksen käyttämää routeria.