Taulukko on sopiva esitysmuoto silloin, kun tiedoilla on sama tai samankaltainen rakenne. Taulukot säästävät tilaa
ja helpottavat tietojen silmäilyä ja vertailua. Pyri pitämään sarakeotsikoiden ja taulukon solujen sisältö tiiviinä. Liian pitkät
sisällöt heikentävät taulukon luettavuutta ja vaikeuttavat vertailua.
Tee näin
Esitä taulukon sisältö tiiviisti, se helpottaa silmäilyä ja vertailua.
Otsikoi taulukon sarakkeet lyhyesti ja selkeästi.
Varmista taulukoiden toiminta ruudunlukijalla ja eri kokoisilla näytöillä.
Älä tee näin
Älä käytä taulukoita sivurakenteen toteutukseen tai sisältöjen asetteluun.
Älä käytä taulukoissa eri fonttikokoa saman näkymän tai palvelun sisällä, ellei se ole perusteltua.
Responsiivisuus
Suurten tietomäärien esittäminen pienellä näytöllä on haastavaa, eikä tämä komponentti välttämättä ratkaise tätä ongelmaa.
Responsiivisten taulukoiden toteutukseen on useita eri vaihtoehtoja ja oikea toteutustapa riippuu sisällöstä ja sen käyttökontekstista.
toiminnallisuus, jolla käyttäjä voi itse valita mitä sarakkeita taulukossa näytetään
jokin kokonaan muu esitystapa kuin taulukko pienemmillä näytöillä
TableV2 tarjoaa tällä hetkellä valmiina avattavat rivit ja sivusuunnassa vieritettävän taulukon.
Saavutettavuus
Otsikoi taulukon solut ja merkitse otsikointi ruudunlukijoille joko HTML-taulukon scope-attribuutilla, tai vaihtoehtoisesti käyttämällä id- ja headers-attribuuttia.
Jos taulukoissa on tyhjiä soluja, ne jätetään lähtökohtaisesti tyhjiksi.
Jos kaikissa sarakkeissa pitäisi olla tieto (esim. Kyllä / Ei), on taulukon yläpuolella kerrottava, mitä tyhjä solu tarkoittaa.
Esim. “Alla olevassa taulukossa tyhjä sarake tarkoittaa, että kyseinen tieto ei ole vielä saapunut Kelaan.”
Muista aina antaa pelkkiä kuvakkeita sisältäville soluille ja painikkeille saavutettavat tekstivastineet.
rivin tilakuvake
rivin valintaruutu/-painike
rivin avauspainike
muut painikkeet
Vältä monimutkaisten taulukkorakenteiden käyttöä, esim. sisäkkäiset taulukot tai erilaiset yhdistetyt solut. Näiden käyttö
tekee taulukosta vaikeasti ymmärrettävän erityisesti ruudunlukijoiden käyttäjille.
Järjestettävää taulukkoa käytettäessä komponentille voi antaa sortLabel ja sortDescription-propit. sortLabel välittää ruudunlukijalle sarakkeen otsikon
ja sortDescription kertoo järjestyksen suunnan.
Esimerkki proppien käytöstä ja tarkempi ohjeistus järjestettävästä talukosta löytyy Taulukon järjestäminen osiosta.
Taulukon rakenne
Taulukko koostuu seuraavista komponenteista:
TableV2 - Taulukon pääelementti.
TableV2Head - Taulukon otsikkoelementti.
TableV2HeadRow - Taulukon otsikkorivi.
TableV2HeadCell - Taulukon otsikkosolu.
TableV2Body - Taulukon runko.
TableV2Row - Taulukon rivi.
TableV2Cell - Taulukon solu.
TableV2Footer- Taulukon alatunniste.
Seuraavat komponentit ovat saatavilla erikseen, jos niitä on tarve räätälöidä:
TableV2Container - Taulukon ympäröivä elementti, joka tarvittaessa luo vaakavierityspalkin.
TableV2Caption - Taulukkoa kuvaava otsikko.
TableV2SortButton - Sarakkeen järjestyspainike.
Taulukon ulkoasu
Tasaa taulukon solut sisältötyyppien mukaan oikealle tai vasemmalle.
Suositukset:
teksti, päivämäärät ja kellonajat tasataan vasemmalle
muut numeeriset arvot, kuten rahasummat tai muut vertailtavat lukuarvot tasataan oikealle
tasaa sarakeotsikot aina sisältöä vastaavasti
tasaa taulukon lukusuunnassa ensimmäinen sarake aina vasemmalle.
Esitä toistuvat yksiköt, kuten rahayksiköt, sarakeotsikoissa.
Taulukoissa käytetään oletuksena samaa tekstikokoa kuin leipätekstissä. Sarakeotsikot ovat lihavoituja ja ne erotetaan
sisältösoluista selkeästi erottuvalla reunaviivalla. Taulukon sisältörivit erotetaan toisistaan vaakaviivoilla.
Taulukon rivin voi korostaa tehostevärillä ja kuvakkeella.
Sininen rivi (info): lisätieto, joka asiakkaan on hyvä tietää tai joka tukee hänen toimintaansa.
Vihreä rivi (success): onnistuneen toiminnon korostaminen.
Keltainen rivi (warning): huomiota vaativa tilanne, esim. tiedon tarkistaminen.
Punainen rivi (danger): välittömästi käyttäjän toimia vaativa tilanne, esim. virhe.
Taulukon muille riveille lisätään automaattisesti (hasVariants="auto") kuvaketta vastaava tyhjä solu niin, että taulukon rakenne pysyy ehjänä.
Suorituskyvyn parantamiseksi voi asettaa hasVariants={true|false} sen mukaan sisältääkö taulukko tilatiedollisia rivejä, erityisesti jos taulukko
sisältää paljon tietoa, joka päivittyy useasti.
Lisää otsikkoriville ja korostetulle riville ruudunlukijoiden tekstivastine variantLabel-propilla, joka toimii kuvakkeen lisätietotekstinä.
Käytä avattavaa riviä, kun kaikki taulukkoon haluttu tieto ei mahdu esitettäväksi tai kun haluat priorisoida taulukossa olevaa tietoa.
Vähemmän tärkeän tiedon tai riviin liittyviä toimintoja voi laittaa piiloon avattavan rivin sisälle.
Lisää avauspainikkeiden kuvakkeille saavutettava tekstivastine collapseLabel-propilla.
function ExampleTable() {
const { isToggleOn: isOpen, flipToggle: toggleOpen, flipAll: toggleAllOpen } = useToggle();
return (
<TableV2>
<TableV2Head>
<TableV2HeadRow
isCollapseOpen={isOpen("row-all")}
onCollapseClick={() => toggleAllOpen(["row-all", "row-1", "row-2"])}
collapseLabel="Laajenna kaikki rivit"
>
<TableV2HeadCell scope="col">Tutkinnon laajuus op</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Huomioitava lainan enimmäismäärä e
</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Opintolainahyvityksen enimmäismäärä e
</TableV2HeadCell>
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
<TableV2Row
isCollapseOpen={isOpen("row-1")}
collapseLabel="Laajenna rivi"
onCollapseClick={() => toggleOpen("row-1")}
collapseColspan={4}
collapseContent={
<Text mb={0}>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere interdum sem. Quisque ligula eros
ullamcorper quis, lacinia quis facilisis sed sapien. Mauris varius diam vitae arcu. Sed arcu lectus auctor
vitae, consectetuer et venenatis eget velit. Sed augue orci, lacinia eu tincidunt et eleifend nec lacus.
Donec ultricies nisl ut felis, suspendisse potenti. Lorem ipsum ligula ut hendrerit mollis.
</Text>
}
>
<TableV2Cell>210</TableV2Cell>
<TableV2Cell align="right">12 800,00</TableV2Cell>
<TableV2Cell align="right">4 120,00</TableV2Cell>
</TableV2Row>
<TableV2Row
isCollapseOpen={isOpen("row-2")}
collapseLabel="Laajenna rivi"
onCollapseClick={() => toggleOpen("row-2")}
collapseColspan={4}
collapseContent={
<Text mb={0}>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere interdum sem. Quisque ligula eros
ullamcorper quis, lacinia quis facilisis sed sapien. Mauris varius diam vitae arcu. Sed arcu lectus auctor
vitae, consectetuer et venenatis eget velit. Sed augue orci, lacinia eu tincidunt et eleifend nec lacus.
Donec ultricies nisl ut felis, suspendisse potenti. Lorem ipsum ligula ut hendrerit mollis.
</Text>
}
>
<TableV2Cell>180</TableV2Cell>
<TableV2Cell align="right">10 800,00</TableV2Cell>
<TableV2Cell align="right">3 320,00</TableV2Cell>
</TableV2Row>
</TableV2Body>
</TableV2>
);
}
Tarvittaessa koko rivin voi määrittää klikattavaksi alueeksi. Samalle riville ei silloin kannata lisätä muita klikattavia toimintoja.
function ExampleTable() {
const { isToggleOn, flipToggle, flipAll } = useToggle();
return (
<TableV2>
<TableV2Head>
<TableV2HeadRow
isCollapseOpen={isToggleOn("row-all")}
onCollapseClick={() => flipAll(["row-all", "row-1", "row-2"])}
collapseLabel="Laajenna kaikki rivit"
>
<TableV2HeadCell scope="col">Tutkinnon laajuus op</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Huomioitava lainan enimmäismäärä e
</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Opintolainahyvityksen enimmäismäärä e
</TableV2HeadCell>
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
<TableV2Row
className="kds-cursor-pointer"
onClick={() => flipToggle("row-1")}
isCollapseOpen={isToggleOn("row-1")}
collapseLabel="Laajenna rivi"
onCollapseClick={() => flipToggle("row-1")}
collapseColspan={4}
collapseContent={
<Text mb={0}>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere interdum sem. Quisque ligula eros
ullamcorper quis, lacinia quis facilisis sed sapien. Mauris varius diam vitae arcu. Sed arcu lectus auctor
vitae, consectetuer et venenatis eget velit. Sed augue orci, lacinia eu tincidunt et eleifend nec lacus.
Donec ultricies nisl ut felis, suspendisse potenti. Lorem ipsum ligula ut hendrerit mollis.
</Text>
}
>
<TableV2Cell>210</TableV2Cell>
<TableV2Cell align="right">12 800,00</TableV2Cell>
<TableV2Cell align="right">4 120,00</TableV2Cell>
</TableV2Row>
<TableV2Row
className="kds-cursor-pointer"
onClick={() => flipToggle("row-2")}
isCollapseOpen={isToggleOn("row-2")}
collapseLabel="Laajenna rivi"
onCollapseClick={() => flipToggle("row-2")}
collapseColspan={4}
collapseContent={
<Text mb={0}>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere interdum sem. Quisque ligula eros
ullamcorper quis, lacinia quis facilisis sed sapien. Mauris varius diam vitae arcu. Sed arcu lectus auctor
vitae, consectetuer et venenatis eget velit. Sed augue orci, lacinia eu tincidunt et eleifend nec lacus.
Donec ultricies nisl ut felis, suspendisse potenti. Lorem ipsum ligula ut hendrerit mollis.
</Text>
}
>
<TableV2Cell>180</TableV2Cell>
<TableV2Cell align="right">10 800,00</TableV2Cell>
<TableV2Cell align="right">3 320,00</TableV2Cell>
</TableV2Row>
</TableV2Body>
</TableV2>
);
}
Rivien valinta
Useiden rivien valinta valintaruuduilla.
Rivien valinnan toimintaa sivutetussa taulukossa ei ole vielä päätetty tai ohjeistettu.
Käytettäessä estettyjä valintaruutuja, jää sovelluksen vastuulle huolehtia siitä, että valintoja ei päivitetä esimerkiksi "valitse kaikki" -toiminnolla.
function ExampleTable() {
const { isToggleOn: isOpen, flipToggle: toggleOpen, flipAll: toggleAllOpen } = useToggle();
const { isToggleOn: isSelected, flipToggle: toggleSelect, flipAll: toggleAllSelected } = useToggle();
return (
<TableV2>
<TableV2Head>
<TableV2HeadRow
isCollapseOpen={isOpen("row-all")}
onCollapseClick={() => toggleAllOpen(["row-all", "row-1", "row-2"])}
collapseLabel="Laajenna kaikki rivit"
selectLabel="Valitse kaikki rivit"
onSelectChange={() => toggleAllSelected(["row-1", "row-2"])}
>
<TableV2HeadCell scope="col">Tutkinnon laajuus op</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Huomioitava lainan enimmäismäärä e
</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Opintolainahyvityksen enimmäismäärä e
</TableV2HeadCell>
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
<TableV2Row
isCollapseOpen={isOpen("row-1")}
selectType="multiple"
isSelected={isSelected("row-1")}
selectLabel="Valitse rivi"
onSelectChange={() => toggleSelect("row-1")}
collapseLabel="Laajenna rivi"
onCollapseClick={() => toggleOpen("row-1")}
collapseColspan={5}
collapseContent={
<Text mb={0}>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere interdum sem. Quisque ligula eros
ullamcorper quis, lacinia quis facilisis sed sapien. Mauris varius diam vitae arcu. Sed arcu lectus auctor
vitae, consectetuer et venenatis eget velit. Sed augue orci, lacinia eu tincidunt et eleifend nec lacus.
Donec ultricies nisl ut felis, suspendisse potenti. Lorem ipsum ligula ut hendrerit mollis.
</Text>
}
>
<TableV2Cell>180</TableV2Cell>
<TableV2Cell align="right">10 800,00</TableV2Cell>
<TableV2Cell align="right">3 320,00</TableV2Cell>
</TableV2Row>
<TableV2Row
isCollapseOpen={isOpen("row-2")}
selectType="multiple"
isSelected={isSelected("row-2")}
selectLabel="Valitse rivi"
onSelectChange={() => toggleSelect("row-2")}
collapseLabel="Laajenna rivi"
onCollapseClick={() => toggleOpen("row-2")}
collapseColspan={5}
collapseContent={
<Text mb={0}>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere interdum sem. Quisque ligula eros
ullamcorper quis, lacinia quis facilisis sed sapien. Mauris varius diam vitae arcu. Sed arcu lectus auctor
vitae, consectetuer et venenatis eget velit. Sed augue orci, lacinia eu tincidunt et eleifend nec lacus.
Donec ultricies nisl ut felis, suspendisse potenti. Lorem ipsum ligula ut hendrerit mollis.
</Text>
}
>
<TableV2Cell>210</TableV2Cell>
<TableV2Cell align="right">12 800,00</TableV2Cell>
<TableV2Cell align="right">4 120,00</TableV2Cell>
</TableV2Row>
</TableV2Body>
</TableV2>
);
}
Tarvittaessa toimintaa voi myös räätälöidä.
function ExampleTable() {
const { isToggleOn: isOpen, flipToggle: toggleOpen } = useToggle();
const { isToggleOn: isSelected, flipToggle: toggleSelect } = useToggle();
return (
<TableV2>
<TableV2Head>
<TableV2HeadRow isCollapseOpen={isOpen("row-all")}>
<TableV2HeadCell as="td" dense="auto" />
<TableV2HeadCell as="td" dense="auto" />
<TableV2HeadCell scope="col">Tutkinnon laajuus op</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Huomioitava lainan enimmäismäärä e
</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Opintolainahyvityksen enimmäismäärä e
</TableV2HeadCell>
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
<TableV2Row
isCollapseOpen={isOpen("row-1")}
isSelected={isSelected("row-1")}
collapseLabel="Laajenna rivi"
onCollapseClick={() => toggleOpen("row-1")}
collapseColspan={5}
collapseContent={
<Text mb={0}>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere interdum sem. Quisque ligula eros
ullamcorper quis, lacinia quis facilisis sed sapien. Mauris varius diam vitae arcu. Sed arcu lectus auctor
vitae, consectetuer et venenatis eget velit. Sed augue orci, lacinia eu tincidunt et eleifend nec lacus.
Donec ultricies nisl ut felis, suspendisse potenti. Lorem ipsum ligula ut hendrerit mollis.
</Text>
}
>
<TableV2Cell cellType="selection">
<Checkbox
onChange={() => toggleSelect("row-1")}
checked={isSelected("row-1")}
labelText="Valitse rivi"
hideLabel
/>
</TableV2Cell>
<TableV2Cell>180</TableV2Cell>
<TableV2Cell align="right">10 800,00</TableV2Cell>
<TableV2Cell align="right">3 320,00</TableV2Cell>
</TableV2Row>
<TableV2Row
isCollapseOpen={isOpen("row-2")}
isSelected={isSelected("row-2")}
collapseLabel="Laajenna rivi"
onCollapseClick={() => toggleOpen("row-2")}
collapseColspan={5}
collapseContent={
<Text mb={0}>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere interdum sem. Quisque ligula eros
ullamcorper quis, lacinia quis facilisis sed sapien. Mauris varius diam vitae arcu. Sed arcu lectus auctor
vitae, consectetuer et venenatis eget velit. Sed augue orci, lacinia eu tincidunt et eleifend nec lacus.
Donec ultricies nisl ut felis, suspendisse potenti. Lorem ipsum ligula ut hendrerit mollis.
</Text>
}
>
<TableV2Cell cellType="selection">
<Checkbox
onChange={() => toggleSelect("row-2")}
checked={isSelected("row-2")}
labelText="Valitse rivi"
hideLabel
/>
</TableV2Cell>
<TableV2Cell>210</TableV2Cell>
<TableV2Cell align="right">12 800,00</TableV2Cell>
<TableV2Cell align="right">4 120,00</TableV2Cell>
</TableV2Row>
<TableV2Row>
<TableV2Cell cellType="toggle">
<IconCaretDown aria-hidden className="kds-text-muted" size="s" />
</TableV2Cell>
<TableV2Cell cellType="selection">
<Checkbox name="select-row-3" labelText="Valitse rivi" hideLabel disabled />
</TableV2Cell>
<TableV2Cell>240</TableV2Cell>
<TableV2Cell align="right">14 400,00</TableV2Cell>
<TableV2Cell align="right">4 760,00</TableV2Cell>
</TableV2Row>
</TableV2Body>
</TableV2>
);
}
Taulukon järjestäminen
Taulukon sarakkeiden otsikoista voi tehdä painikkeet välittämällä TableV2HeadCell-komponentille onClick- ja order-propit.
Voit käyttää KDS:n tarjoamaa useSort-hookia tekstiä ja numeroita sisältävien solujen järjestämiseen.
Järjestystoiminnon tulee noudattaa aina samaa järjestystä, kun painiketta painetaan: ei järjestystä → laskeva järjestys → nouseva järjestys → ei järjestystä…
Ruudunlukija lukee sarakeotsikon aria-sort-attribuutin, kun kohdistus siirtyy otsikkosoluun tai poistuu siitä. TableV2-komponentti toteuttaa aria-live-alueen,
joka kertoo ruudunlukijoille järjestyksen automaattisesti, kun painiketta painetaan. Muista välittää komponentille aria-live-alueen tarvitsemat tekstit:
sortLabel: järjestetyn sarakkeen otsikko, esim. “Lisätieto”
sortDescription: järjestyksen suunnan kuvaus, esim. “järjestetty laskevasti”
Ruudunlukija lukee tekstit muodossa {sortLabel} {sortDescription}, esim. “Lisätieto järjestetty laskevasti”, kun taulukon järjestys muuttuu.
Näytettävän tiedon tiheydestä ja määrästä riippuen voi olla tarpeellista käyttää tiivistettyä taulukkoa.
Tiivistetty taulukko on suunniteltu käytettäväksi asiantuntijakäyttöliittymissä.
Pitkien taulukoiden rivien lukemisen helpottamiseen voi käyttää apuna raidallista korostusta. Raidallista
taulukkoa käytettäessä on hyvä huomioida, että raidoituksen käyttäminen muun visuaalisen korostuksen kanssa
voi tehdä taulukosta hankalasti tulkittavan.
function ExampleTable() {
const { isToggleOn: isOpen, flipToggle: toggleOpen, flipAll: toggleAllOpen } = useToggle();
const { isToggleOn: isSelected, flipToggle: toggleSelect, flipAll: toggleAllSelected } = useToggle();
return (
<TableV2Container className="app-custom-table-v2--xs">
<TableV2 isScrollable={false}>
<TableV2Head>
<TableV2HeadRow
isCollapseOpen={isOpen("row-all")}
onCollapseClick={() => toggleAllOpen(["row-all", "row-1", "row-2"])}
collapseLabel="Laajenna kaikki rivit"
selectLabel="Valitse kaikki rivit"
onSelectChange={() => toggleAllSelected(["row-0", "row-1", "row-2"])}
>
<TableV2HeadCell scope="col">Tutkinnon laajuus op</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Huomioitava lainan enimmäismäärä e
</TableV2HeadCell>
<TableV2HeadCell scope="col" align="right">
Opintolainahyvityksen enimmäismäärä e
</TableV2HeadCell>
</TableV2HeadRow>
</TableV2Head>
<TableV2Body>
<TableV2Row
isCollapseOpen={isOpen("row-1")}
selectType="multiple"
isSelected={isSelected("row-1")}
selectLabel="Valitse rivi"
onSelectChange={() => toggleSelect("row-1")}
collapseLabel="Laajenna rivi"
onCollapseClick={() => toggleOpen("row-1")}
collapseColspan={5}
collapseContent={
<Text size="sm" mb={0}>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere interdum sem. Quisque ligula eros
ullamcorper quis, lacinia quis facilisis sed sapien. Mauris varius diam vitae arcu. Sed arcu lectus
auctor vitae, consectetuer et venenatis eget velit. Sed augue orci, lacinia eu tincidunt et eleifend nec
lacus. Donec ultricies nisl ut felis, suspendisse potenti. Lorem ipsum ligula ut hendrerit mollis.
</Text>
}
>
<TableV2Cell>180</TableV2Cell>
<TableV2Cell align="right">10 800,00</TableV2Cell>
<TableV2Cell align="right">3 320,00</TableV2Cell>
</TableV2Row>
<TableV2Row
isCollapseOpen={isOpen("row-2")}
selectType="multiple"
isSelected={isSelected("row-2")}
selectLabel="Valitse rivi"
onSelectChange={() => toggleSelect("row-2")}
collapseLabel="Laajenna rivi"
onCollapseClick={() => toggleOpen("row-2")}
collapseColspan={5}
collapseContent={
<Text size="sm" mb={0}>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere interdum sem. Quisque ligula eros
ullamcorper quis, lacinia quis facilisis sed sapien. Mauris varius diam vitae arcu. Sed arcu lectus
auctor vitae, consectetuer et venenatis eget velit. Sed augue orci, lacinia eu tincidunt et eleifend nec
lacus. Donec ultricies nisl ut felis, suspendisse potenti. Lorem ipsum ligula ut hendrerit mollis.
</Text>
}
>
<TableV2Cell>210</TableV2Cell>
<TableV2Cell align="right">12 800,00</TableV2Cell>
<TableV2Cell align="right">4 120,00</TableV2Cell>
</TableV2Row>
</TableV2Body>
</TableV2>
</TableV2Container>
);
}
Sisällön päällä kelluva otsikkorivi
Pitkät taulukot voivat olla hankalasti luettavia etenkin pienillä näytöillä. Jos taulukon sisältö ei
kokonaisuudessaan mahdu näytölle, voidaan harkita kelluvan otsikkorivin käyttämistä. Vierittäessä
taulukon otsikkorivi kelluu sisällön päällä, joka helpottaa taulukon lukemista.
Alla on karkea esimerkkitoteutus. Jos taulukko mahtuu mobiiliruudulle, voi isScrollable-propin asettaa arvoon
false ja toteuttaa kelluvan otsikkorivin pelkästään CSS:n avulla position: sticky; määrityksellä.