Hoe maak je een prijsoverzicht in HTML en CSS?

Je kent ze vast wel, van bijvoorbeeld een hosting bedrijf. Een prijsoverzicht met bijvoorbeeld vier mogelijkheden waaruit je kunt kiezen met bovenaan, of juist onderaan de juiste prijs.

Dit kun je maken met een afbeelding, maar het is prima mogelijk om een prijsoverzicht te maken met CSS, in combinatie met HTML. Het voordeel daarvan is dat je eenvoudig onderdelen kunt aanpassen op het moment dat er iets verandert.

Als de prijs omhoog gaat hoef je alleen maar de HTML code aan te passen en niet een hele afbeelding.
Daarnaast is HTML code natuurlijk veel beter als het gaat om zoekmachine optimalisatie.

Prijsoverzicht in HTML en CSS

In deze tutorial laat ik je zien hoe je deze prijstabel kunt maken.

Eindresultaat van een prijstabel in CSS

Eindresultaat van een prijstabel in CSS

De eerste stap die we moeten nemen is het maken van een tabel, met alle gegevens.

Een tabel die bestaat uit vier pakketten (de kolommen), en vijf onderdelen (de rijen). De pakketten noemen we voor het gemak even pakket 1 tot en met pakket 4.

De onderdelen zijn webruimte, bandbreedte, databases, domeinen en support.

De HTML code

De tabel wordt als volgt opgezet in HTML:

<!DOCTYPE html>
<html lang="nl">
<head>
	<meta charset="utf-8" />
	<title>prijs tabel</title>
	<link rel="stylesheet" type="text/css" media="all" href="stijl.css" />
</head>
<body>
<table class="prijzen">
      <col />
      <col />
      <col />
      <col />
 
	  <col />
 
<tr>
  		<td></td>
  <th scope="col">Pakket 1
  	<span class="price">&euro; 2,99</span></th>
  <th scope="col">Pakket 2
  	<span class="price">&euro; 4,99</span></th>
  <th scope="col">Pakket 3
  	<span class="price">&euro; 7,99</span></th>
  <th scope="col">Pakket 4
  	<span class="price">&euro; 15,99</span></th>
</tr>
 
<tr>
  <th scope="row">Webruimte</th>
  	<td>4 GB</td>
  	<td>6 GB</td>
  	<td>8 GB</td>
  	<td>12 GB</td>
</tr>
 
<tr>
  <th scope="row">Bandbreedte per maand</th>
  	<td>25 GB</td>
  	<td>50 GB</td>
  	<td>75 GB</td>
  	<td>100 GB</td>
</tr>
 
<tr>
  <th scope="row">Databases MySQL</th>
  	<td>1</td>
  	<td>5</td>
  	<td>onbeperkt</td>
  	<td>onbeperkt</td>
</tr>
 
<tr>
  <th scope="row">Domeinnamen</th>
  	<td>1</td>
  	<td>5</td>
  	<td>10</td>
  	<td>20</td>
</tr>
 
<tr>
  <th scope="row">Support</th>
  	<td>Kantooruren</td>
  	<td>24/7</td>
  	<td>24/7</td>
 
	<td>24/7</td>
</tr>
</table>
 
</body>
</html>

Hierboven geef je dus met th scope="col" de koptekst aan voor de kolommen.
Met th scope="row" geef je aan wat de tekst moet zijn aan het begin van een rij.

Met <col> kun je gemakkelijk stijlen bepalen voor de verschillende kolommen.

Het resultaat ziet er dan zo uit:

prijstabel zonder enige opmaak

prijstabel zonder enige opmaak

De eerste CSS code

De volgende stap is om er wat CSS tegenaan te gaan gooien. De HTML code, daar hoeven we vanaf nu eigenlijk niets meer aan te doen.

In het HTML bestand verwijs ik naar het stijlblad met de naam stijl.css. We maken dus een CSS bestand met deze naam aan.

De eerste stap is de volgende code:

body {
  background-color: #fff;
  color: #111;
  margin: 0;
  padding: 0;
  font: 1em/1.4 "Lucida Grande", "Lucida Sans Unicode",
    "Lucida Sans", Verdana, Tahoma, sans-serif;
}
 
.prijzen {
  border-collapse: collapse;
}
.prijzen col {
  width: 7em;
}

Dit zijn wat algemene instellingen zoals de achtergrondkleur, de kleur van de tekst en het lettertype. Daarnaast wil ik dat de (onzichtbare) lijnen van de tabel elkaar overlappen. Dat wordt geregeld met border-collapse.

De kolommen

De breedte van de kolommen wordt vastgelegd met width: 7em.

De breedte van de eerste kolom moet echter afwijkend zijn van de rest. Deze moet namelijk zo breed worden als de breedte van het grootste woord wat er in komt te staan. Dit kan gedaan worden met de first-child selector.

Deze selector zorgt ervoor dat de instelling alleen van toepassing is op het eerste onderdeel. In ons geval gaat het dus alleen om de eerste ‘col’ in de tabel met de naam prijzen.

.prijzen col:first-child {
  width: auto;
}

De volgende stap is om elke individuele cel te voorzien van een tekstkleur (color), een witte rand (border) en een beetje ruimte om de tekst heen (padding).

.prijzen td {
  color: rgb(51,51,51);
  border: 1px solid rgb(255,255,255);
  padding: 0.75em;
}

Je ziet dat we voor de kleur de zogenaamde RGB code gebruiken. Je kunt hier natuurlijk ook de naam of de hexadecimale code voor gebruiken.

Voor de padding, de ruimte om de tekst heen wordt em gebruikt.

Nu gaan we aan de slag met het opmaken van de verschillende regels in de tabel ‘prijzen’. We willen dat de regels om en om een iets afwijkende kleur grijs bevatten. Eerst wat lichter, dan weer wat donkerder.

Pseudo selector nth:child

Dit kun je regelen met de pseudo selector nth-child. Deze pseudo selector bepaald voor een lijst dat je iets kunt regelen voor bijvoorbeeld elke derde regel, of voor de regels om en om.

In ons geval kiezen we voor odd (oneven regelnummers (1,3,5 enz.)) of even (even regelnummers (2,4,6 enz)). Het gaat om de regels, of beter gezegd de rijen.

.prijzen tr:nth-child(odd) {
  background-color: rgb(240,240,240);
}
.prijzen tr:nth-child(even) {
  background-color: rgba(246,246,246,.5);
}

Hover

Nu wil ik ook dat elke oneven rij iets oplicht, op het moment dat ik er met de muis overheen ga (:hover).
Dat is ook weer te bepalen met behulp van deze zelfde pseudo selector.

.prijzen tr:nth-child(odd):hover td {
  background-color: rgba(59,87,98,.2);
}
.prijzen tr:nth-child(even):hover td {
  background-color: rgba(91,124,121,.2);
}

De tabel ziet er nu als volgt uit:

tabel met kleur rijen tr nth-child

tabel met kleur rijen tr nth-child

Je ziet dat de muis over de derde regel gaat, en de regel die iets donkerder oplicht.

We willen dat het :hover effect niet in de hoek linksboven ontstaat, dus we voegen toe:

.prijzen tr:first-child, .prijzen tr:first-child:hover td {
  background-color: transparent;
}

Afgeronde hoeken

We willen tenslotte ook nog dat er een bovenste regel (th) komt met een andere achtergrondkleur en afgeronde hoeken aan de bovenzijde. Dit doen we met de volgende code:

.prijzen th[scope="col"] {
  background-color: rgb(59,87,98);
  color: rgb(255,255,255);
  border: 1px solid rgb(255,255,255);
  font-weight: normal;
  padding: 0.75em;
  -moz-border-radius-topleft: 10px;
  -moz-border-radius-topright: 10px;
  -moz-border-radius-bottomright: 0px;
  -moz-border-radius-bottomleft: 0px;
  -webkit-border-radius: 10px 10px 0px 0px;
  border-radius: 10px 10px 0px 0px;
  text-shadow: 1px 1px 3px #111111;
}

We voegen [scope="col"] aan de eerste regel toe. Dit is om te regelen dat het gaat om de kop van de kolom. En dus niet om de eerste cel van een rij. Die krijgt namelijk scope="row" mee voor het geval je dat nog niet opgevallen was.

Het resultaat ziet er al heel wat interessanter uit.

tabel met kop met afgeronde hoeken

tabel met kop met afgeronde hoeken

De details van de prijstabel

Je ziet dat onze tabel inmiddels al goed van uitstraling is. Maar toch missen er nog wat details. Het is namelijk leuker om te zien dat elke kolom een andere kleur heeft. Ook hiervoor gebruik je de pseudo selector :nth-child. Nu gericht op scope="col".

Elke tweede kolom krijgt als kop een alternatieve kleur.

.prijzen th[scope="col"]:nth-child(odd) {
  background-color: rgb(91,124,121);
}
Tabel in CSS, de kleur aangepast

Tabel in CSS, de kleur aangepast

In de kopjes staat ook de prijs. Dit wil ik op een nieuwe regel plaatsen in een iets kleinere lettergrootte.

.prijzen th span.price {
  display: block;
  padding: 0.2em 0 0 0;
  font-size: 87.5%;
  font-weight: bold;
}

Scope row

Als laatste is het nog mooier om de eerste kolom, waar de omschrijvingen in staan aan te passen. Deze kolom heeft als scope, row. Dat betekent dat het kopjes zijn van de rij.

Door deze een andere kleur te geven en de tekst naar links te laten uitlijnen is onze tabel af. Een tabel waarmee je dus recht doet aan datgene waar een tabel voor bedoeld is, namelijk het weergeven van data.

.prijzen th[scope="row"] {
  background-color: rgb(232,232,232);
  color: rgb(0,0,0);
  border: 1px solid rgb(255,255,255);
  padding: 0.75em;
  font-weight: normal;
  text-align: left;
}

Om het geheel af te maken geven we elke oneven regel weer een net iets andere kleur als achtergrond.

.prijzen tr:nth-child(odd) th[scope="row"] {
  background-color: rgba(232,232,232,.5);
}

Het eindresultaat

Het resultaat nogmaals:

Eindresultaat van een prijstabel in CSS

Eindresultaat van een prijstabel in CSS

Ik geloof je heus wel!

Je zit echt niet te wachten op weer een saaie nieuwsbrief...
Met allerlei oninteressante informatie.
Maar echt, als je mijn mails probeert, dan beloof ik je te helpen met de zoektocht naar jouw perfecte niche! Zodat jij een website kunt maken rond jouw favoriete onderwerp of idee!
En je krijgt meteen toegang tot mijn gratis downloads. Proberen? Meld je hieronder aan!

2 reacties

  1. Patrick schreef:

    Wat een goeie uitleg.
    Het is me gelukt. hopelijk post je vaker dit soort tutorials.

  1. 4 mei 2020

    […] een klein beetje CSS kan je tabel er als nooit tevoren uitzien. Dat is ook een ding wat je goed moet onthouden: CSS bepaald hoe je […]

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *