Načrtovanje in razvoj spletnih aplikacij

Oblikovanje tabel s CSS

Tabele lahko s CSS precej natančno oblikujemo. Določimo lahko robove, velikost, poravnavo, barve, notranje odmike, razdaljo med celicami in položaj opisa tabele. Pri tem pa ni pomemben le videz, ampak tudi preglednost in smiselna raba tabele za prikaz podatkov.

Pomni: Tabela je namenjena prikazu pregledno urejenih podatkov v vrsticah in stolpcih. CSS naj izboljša berljivost tabele, ne pa zakrije njeno strukturo.

Pri sodobnem oblikovanju tabel je poleg videza pomembna tudi berljivost. Pogosto uporabljamo združene robove, primerne notranje odmike celic, jasen kontrast med naslovnimi in navadnimi celicami ter opis tabele z elementom <caption>.

Osnovna pravila

  • Tabelo uporabljamo za podatke, ki sodijo v vrstice in stolpce.
  • Naslovne celice praviloma označimo z elementom th, navadne pa z elementom td.
  • Pri oblikovanju tabele pogosto določimo robove, širino, poravnavo, barve in notranje odmike.
  • Opis tabele je smiselno zapisati z elementom caption.
  • Pri preglednosti je pogosto koristna uporaba lastnosti border-collapse: collapse.

Pozor: Tabele niso namenjene splošni postavitvi strani. Za postavitev delov spletne strani danes uporabljamo druge pristope, na primer flex ali grid.

Obrobe tabel

Obrobe tabelam in celicam v CSS določimo z lastnostjo border. Robove lahko določimo tabeli, naslovnim celicam th in navadnim celicam td.

<table>
   <tr>
      <th>naslov 1</th>
      <th>naslov 2</th>
      <th>naslov 3</th>
   </tr>
   <tr>
      <td>celica 1</td>
      <td>celica 2</td>
      <td>celica 3</td>
   </tr>
   <tr>
      <td>celica 4</td>
      <td>celica 5</td>
      <td>celica 6</td>
   </tr>
</table>
table, th, td { border: 2px solid #FBA517; }
naslov 1 naslov 2 naslov 3
celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

Pomni: Če robove določimo tako tabeli kot celicam, je prikaz robov odvisen tudi od lastnosti border-collapse.

Višina in širina tabel

Višino in širino tabel, vrstic in celic določamo predvsem z lastnostima height in width. V sodobni praksi se najpogosteje uporabljajo enote, kot so px, em, rem in %.

table { 
   border: 2px solid #FBA517;
   width: 100%;
}
th { 
   border: 2px solid #FBA517;
   height: 30px;
}
td { 
   border: 2px solid #FBA517;
}
naslov 1 naslov 2 naslov 3
celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

Poravnava besedila v tabelah

Besedilo v celicah tabel poravnamo predvsem z lastnostima:

  • text-align – vodoravna poravnava besedila
  • vertical-align – navpična poravnava vsebine znotraj celice

Pri lastnosti text-align v tabelah najpogosteje uporabljamo vrednosti left, right, center in justify. Uporabimo lahko tudi logični vrednosti start in end, ki se prilagodita smeri pisanja besedila.

Pri lastnosti vertical-align v tabelah najpogosteje uporabljamo vrednosti top, middle in bottom. Možne so tudi druge vrednosti, na primer baseline, vendar se v tabelah najpogosteje uporabljajo prve tri.

table { 
   border: 2px solid #FBA517;
   width: 100%;
}
th { 
   border: 2px solid #FBA517;
   height: 40px;
   vertical-align: bottom;
}
td { 
   border: 2px solid #FBA517;
   text-align: left;
}
naslov 1 naslov 2 naslov 3
celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

Pozor: Pri tabelah z veliko podatki je slaba poravnava lahko hitro nepregledna. Številčne podatke je pogosto smiselno poravnati drugače kot besedilo.

Barve tabel

Barve tabel, vrstic in celic določimo predvsem z lastnostma:

  • background-color – barva ozadja,
  • color – barva besedila.
table { 
   border: 2px solid #FBA517;
   width: 100%;
}
th { 
   border: 2px solid #FBA517;
   background-color: #FBB025;
   color: #FFFFFF;
}
td { 
   border: 2px solid #FBA517;
   background-color: #F8E9C2;
}
naslov 1 naslov 2 naslov 3
celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

Odmiki v tabelah

Pri tabelah razlikujemo:

  • padding – prostor med vsebino celice in njenim robom,
  • border-spacing – prostor med sosednjimi celicami, kadar tabela uporablja border-collapse: separate.
table { 
   border: 2px solid #FBA517;
   width: 100%;
}
th, td { 
   border: 2px solid #FBA517;
   padding: 15px 0 5px 20px;
}
naslov 1 naslov 2 naslov 3
celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

table-layout

Z lastnostjo table-layout vplivamo na način, kako brskalnik izračuna širine stolpcev:

  • auto – širine stolpcev so odvisne tudi od vsebine celic,
  • fixed – širine stolpcev so določene hitreje in bolj predvidljivo, vendar mora biti širina tabele določena.
Vrednost Pomen
auto širina tabele in stolpcev je odvisna tudi od vsebine celic
fixed širina stolpcev je bolj predvidljiva; deluje smiselno le, če ima tabela določeno širino
initial ta vrednost naj bo privzeta
inherit vrednost podeduje od nadrejenega elementa
<p>Tabela ima lastnost <em>table-layout: <strong>auto</strong></em></p>
<table class="auto">
   <tr>
      <td>celica 1 celica 1 celica 1</td>
      <td>celica 2</td>
   </tr>
</table>

<p>Tabela ima lastnost <em>table-layout: <strong>fixed</strong></em></p>
<table class="fixed">
   <tr>
      <td>celica 1 celica 1 celica 1</td>
      <td>celica 2</td>
   </tr>
</table>
.auto { table-layout: auto; width: 100%; }
.fixed { table-layout: fixed; width: 100%; }

Tabela ima lastnost table-layout: auto

celica 1 celica 1 celica 1 celica 2

Tabela ima lastnost table-layout: fixed

celica 1 celica 1 celica 1 celica 2

Pomni: Pri lastnosti table-layout: fixed vsebina celic sama po sebi ne določa več širine stolpcev tako kot pri vrednosti auto.

border-collapse

Z lastnostjo border-collapse določimo, ali bo vsaka celica tabele imela svoje robove ali pa si bosta sosednji celici delili skupen rob.

Vrednost Pomen
separate vsaka celica ima svoje robove
collapse sosednji celici si delita skupen rob
initial ta vrednost naj bo privzeta
inherit vrednost podeduje od nadrejenega elementa
<table class="separate">
   <tr>
      <td>celica 1</td>
      <td>celica 2</td>
      <td>celica 3</td>
   </tr>
   <tr>
      <td>celica 4</td>
      <td>celica 5</td>
      <td>celica 6</td>
   </tr>
</table>
.separate { border-collapse: separate; }
.collapse { border-collapse: collapse; }

Tabela ima lastnost border-collapse: separate

celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

Tabela ima lastnost border-collapse: collapse

celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

border-spacing

Kadar ima tabela lastnost border-collapse: separate, lahko z lastnostjo border-spacing določimo razdaljo med sosednjimi celicami. Če navedemo eno vrednost, velja ta za vodoravno in navpično smer. Če navedemo dve vrednosti, prva določa vodoravno, druga pa navpično razdaljo med celicami.

Vrednost Pomen
dolžina enaka vodoravna in navpična razdalja med celicami
dolžina dolžina prva vrednost določa vodoravno, druga pa navpično razdaljo med celicami
initial ta vrednost naj bo privzeta
inherit vrednost podeduje od nadrejenega elementa
.spacing0 { 
   border-collapse: separate;
   background-color: #E8E8E8;
   border-spacing: 0; 
}
.spacing3 { 
   border-collapse: separate;
   background-color: #E8E8E8;
   border-spacing: 3px; 
}

Tabela ima lastnosti:
border-collapse: separate; background-color: #E8E8E8;
border-spacing: 0

celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

Tabela ima lastnosti:
border-collapse: separate; background-color: #E8E8E8;
border-spacing: 3px

celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

Tabela ima lastnosti:
border-collapse: separate; background-color: #E8E8E8;
border-spacing: 20px 5px

celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

Pozor: Lastnost border-spacing ne deluje, če tabela uporablja border-collapse: collapse.

empty-cells

Če tabela uporablja border-collapse: separate, lahko z lastnostjo empty-cells določimo, ali naj se robovi in ozadje prikažejo tudi pri praznih celicah.

Vrednost Pomen
hide prazne celice nimajo vidnega roba in ozadja
show tudi prazne celice imajo rob in ozadje
initial ta vrednost naj bo privzeta
inherit vrednost podeduje od nadrejenega elementa
.hide { 
   border-collapse: separate;
   empty-cells: hide;
}
.show { 
   border-collapse: separate;
   empty-cells: show;
}

Tabela ima lastnost empty-cells: hide

celica 1 celica 3
celica 4 celica 5

Tabela ima lastnost empty-cells: show

celica 1 celica 3
celica 4 celica 5

caption-side

Z lastnostjo caption-side določimo, na kateri strani tabele bo prikazan opis tabele.

Vrednost Pomen
top opis tabele je nad tabelo oziroma na začetni strani tabele
bottom opis tabele je pod tabelo
initial ta vrednost naj bo privzeta
inherit vrednost podeduje od nadrejenega elementa
.top { caption-side: top; }
.bottom { caption-side: bottom; }

Tabela ima lastnost caption-side: top

Opis tabele
celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

Tabela ima lastnost caption-side: bottom

Opis tabele
celica 1 celica 2 celica 3
celica 4 celica 5 celica 6

Priporočila

  • Za preglednejši prikaz tabel pogosto uporabi border-collapse: collapse.
  • Naslovne celice vizualno loči od navadnih celic z barvo, debelino pisave ali ozadjem.
  • V celicah uporabi dovolj velik padding, da besedilo ni stisnjeno ob robove.
  • Opis tabele dodaj z elementom caption, kadar pomaga pri razumevanju podatkov.
  • Pri tabelah z več podatki poskrbi za dober kontrast in jasno poravnavo vsebine.

Pogoste napake

  • Tabela se uporablja za postavitev strani namesto za prikaz podatkov.
  • V tabeli ni jasne razlike med naslovnimi in navadnimi celicami.
  • Lastnost border-spacing se uporablja skupaj z border-collapse: collapse.
  • Pri vrednosti table-layout: fixed ni določena širina tabele.
  • Prazne celice se oblikujejo brez razumevanja vpliva lastnosti empty-cells.