HTML & CSS for begyndere

HTML & CSS for begyndere (Del 07): Tabeller (01)

Alle videoer i tutorialen

Tabeller er ret komplekse strukturer, der består af rækker og kolonner. Den ydre grundstruktur af tabeller dannes altid af table-elementet.

<table>
…
</table>

Inden i dette element sker den faktiske tabeldefinition. Det anbefales i øvrigt at tildele tabellen en ramme under implementeringen i HTML. På denne måde kan man bedre følge, hvordan rækker og kolonner præcist kører. Dette opnås ved at tildele attributværdikombinationen border="1" til det indledende <table>. (Bemærk, at attributten border ikke bør bruges i HTML. Her skal man i stedet benytte de tilsvarende CSS-egenskaber. Men mere om det senere).

<table border="1">
…
</table>



Næste skridt er definitionen af tabelrækker. Dette gøres ved hjælp af elementet tr.

<table border="1">
   <tr></tr>
</table>



Men dette fører stadig ikke til den ønskede output. Næste trin er nemlig at definere kolonnerne. Dette gøres igen ved hjælp af td-elementet.

<table border="1">
   <tr>
      <td></td>
   </tr>
</table>

Nu kan du definere det første tabelindhold. Dette gøres mellem <td> og </td>.

<table border="1">
   <tr>
      <td>Indhold 1</td>
   </tr>
</table>



Først nu er det værd at se resultatet i browseren.

HTML & CSS for begyndere (del 07): Tabeller (01)

Dette er sandsynligvis ikke særlig spektakulært, da tabellen i øjeblikket kun består af en tabelcelle. Du kan nu tilføje en ekstra kolonne. Dette gøres igen ved hjælp af et td-element. Vær opmærksom på at definere dette inden for tr-elementet.

<table border="1">
   <tr>
      <td>Indhold 1</td>
      <td>Indhold 2</td>
   </tr>
</table>



Igen, se resultatet her.

HTML & CSS for begyndere (Del 07): Tabeller (01)

For at tilføje yderligere rækker til tabellen, opretter du blot et andet tr-element, hvori de ønskede td-elementer defineres.

Igen et eksempel hertil:

<table border="1">
   <tr>
      <td>Indhold 1</td>
      <td>Indhold 2</td>
   </tr>
   <tr>
      <td>Indhold 3</td>
      <td>Indhold 4</td>
   </tr>
</table>



Se resultatet i browseren for at få følgende resultat:

HTML & CSS for begyndere (Del 07): Tabeller (01)



På denne måde kan du også oprette omfattende tabeller.

Fastlæg hoved, krop og fod

Tabeller kan opdeles i logiske områder. Dette omfatter en hoved-, en eller flere databere og en fod.

<table border="1">
  <thead>
    <tr>
      <th>Afgang</th>
      <th>Ankomst</th>
      <th>Perron</th>
    </tr>
  </thead>
  <tfoot>
    <tr>
      <td>Berlin</td>
      <td>Stralsund</td>
      <td>5</td>
    </tr>
  </tfoot>
  <tbody>
    <tr>
      <td>Berlin</td>
      <td>Hamborg</td>
      <td>1</td>
    </tr>
    <tr>
      <td>München</td>
      <td>Berlin</td>
      <td>3</td>
    </tr>
  </tbody>
</table>

Og her er resultatet i browseren:

HTML & CSS for begyndere (Del 07): Tabeller (01)



Opdelingen i de nævnte områder har åbenlyst ikke nogen visuel effekt. Der opstår selvfølgelig et spørgsmål: Hvorfor skulle man så besvære sig med at definere disse områder? Der er to gode grunde til dette:

• Ved hjælp af CSS kan områderne formateres forskelligt efter behov.

• Når lange tabeller udskrives, kan browsere gentage tabellens overskrift og fod på hver side.

Tabellens overskrift indledes med thead. Herefter følger de rækker i tabellen, som hører til overskriftsområdet. Husk at lukke overskriftsområdet </thead>.

Hvis tabellen skal have en fod, skal denne absolut defineres før tabellens krop. Foden indledes med <tfoot>. Herefter kan en eller flere rækker følge, som hører til fodområdet. Luk foden med </tfoot>.

Den faktiske tabelkrop defineres inden for tbody-elementet. Dette tbody kan forekomme flere gange. Luk en tabelkrop ved hjælp af </tbody> hver gang.

Hvorfor skulle man f.eks. bruge flere tbody-elementer i en tabel? Et godt eksempel kunne være Bundesliga-tabellen. I en sådan tabel er der normalt flere områder.

• Mester

• Champions League-deltagere

• Champions League-kvalifikationsvinder

• Europa League-deltagere

• Det grå midtfelt

• Nedrykningsplads

• Nedrykkere

Hver af disse områder kunne pakkes i sit eget tbody-element, og sådan kan de forskellige områder formateres anderledes med CSS.

Definer kolonner på forhånd

Hvordan tabellen vises af browsere afhænger naturligvis primært af antallet af rækker og kolonner. Processen med at vise en tabel er dog ikke helt enkel for browseren. Faktisk skal en browser altid først læse hele tabellen, før den kan vise tabellen. Især med meget omfattende tabeller kan det selvfølgelig tage lidt tid. Dette problem kan undgås ved direkte at informere browseren om, hvor mange kolonner tabellen faktisk består af.

<table>
   <colgroup span="2"></colgroup>
   <tr>
     <th>ISBN</th>
     <th>Titel</th>
     <th>Pris</th>
   </tr>
   <tr>
     <td>23223423434</td>
     <td>En kort historie om næsten alt</td>
     <td>29,95 Euro</td>
   </tr>
 </table>



Med colgroup indledes forhåndsdefinitionen af kolonneangivelserne. Bemærk at de fleste af attributterne tilgængelige i tidligere HTML-versioner ikke længere er tilladt i HTML5 for colgroup. Blandt disse er kun span-attributtet tilladt. Dette attribut forventer antallet af kolonner i tabellen som dets værdi.

Elementet colgroup placeres direkte bag det initielle <table>. Kolonnerne defineres derefter gennem de enkelte col-elementer.

Ved brug af colgroup er der grundlæggende to muligheder:

• Med span-attribut

• Uden span-attribut

Hvis man ikke bruger span-attributtet, skal der defineres et col-element for hver kolonne, som kolonnegruppen skal strække sig over, inde i colgroup-elementet. Bemærk at col er et standalone-element.

<table>
   <colgroup>
   <col />
   <col />
 </colgroup>
   <tr>
     <th>ISBN</th>
     <th>Titel</th>
     <th>Pris</th>
   </tr>
   <tr>
     <td>23223423434</td>
     <td>En kort historie om næsten alt</td>
     <td>29,95 Euro</td>
   </tr>
 </table>



Der findes i øvrigt også en blanding af begge muligheder.

<table> 
 <colgroup> 
 <col> 
 </colgroup> 
 <colgroup span="2"></colgroup>
 …



Dette er praktisk, når en kolonne skal defineres separat, men man ønsker at gruppere de andre sammen.