Een tabel met zebra strepen:
HTML:
<style>
table { border: 1px solid #DDD; border-spacing: 0; }
tr.even { background-color: #FFF; }
tr.odd { background-color: #EFEFEF; }
td { padding: 5px 10px; }
</style>
<table>
<tr><th>Stad</th><th>Inwoners</th></tr>
<tr class="even"><td>Amsterdam</td><td>783.364</td></tr>
<tr class="odd"><td>Breda</td><td>175.565</td></tr>
<tr class="even"><td>Den Haag</td><td>496.745</td></tr>
<tr class="odd"><td>Gouda</td><td>71.096</td></tr>
<tr class="even"><td>Rotterdam</td><td>612.502</td></tr>
</table>
Ik zal je laten zien hoe ik het jaren heb gedaan met dynamische data:
PHP:
// Array als voorbeeld, kan ook een Database Result zijn.
$aData = array(
array('stad' => 'Amsterdam', 'inwoners' => '783.364'),
array('stad' => 'Breda', 'inwoners' => '175.56'),
array('stad' => 'Den Haag', 'inwoners' => '496.745'),
array('stad' => 'Gouda', 'inwoners' => '71.096'),
array('stad' => 'Rotterdam', 'inwoners' => '612.502')
);
$i=0;
foreach($aData as $data){
echo '<tr class="' . ($i % 2 ? 'odd' : 'even') . '"><td>' . $data['stad'] . '</td><td>' . $data['inwoners'] . '</td></tr>';
$i++;
}
OF
PHP:
<?php $i=0; ?>
<?php foreach($aData as $data) { ?>
<tr class="<?php echo ($i % 2 ? 'odd' : 'even'); ?>">
<td><?php echo $data['stad']; ?></td>
<td><?php echo $data['inwoners']; ?></td>
</tr>
<?php $i++; ?>
<?php } ?>
Nadelen:
- Er moet extra PHP code worden toegevoegd in de template;
- Er moet een Iterator $1 (teller) worden gebruikt;
- Er wordt per item een if-else statement uitgevoerd.
Op een gegeven moment ben ik Smarty Templates gaan gebruiken:
HTML:
{foreach from=$aData name=data item=data}
<tr>
<td class="{cycle values="even,odd" advance=false}">{$data.plaats}</td>
<td class="{cycle values="even,odd"}">{$data.aantal}</td>
</tr>
{/foreach}
Let op: dat het laatste TD -element geen advance=false krijgt.
Nu wordt het leuk... met de introductie van jQuery kunnen we het volgende doen:
JavaScript:
$('td:even').addClass('even');
$('td:odd').addClass('odd');
We kunnen het nog mooier maken door elke rij van een CSS border-style te voorzien:
CSS:
td.border { border-bottom: 1px solid #DDD; }
PHP:
<td <?php if ($i < count($aData)-1) echo 'class="border"'; ?>></td>
Smarty:
<td {if not $smarty.foreach.data.last}class="border"{/if}></td>
Helaas ondersteund een TR -element geen border-style, anders zou de volgende oplossing ideaal zijn:
JavaScript:
$('tr:not(:last)').addClass('border');
Als laatst willen dat de rij oplicht als de cursor er overheen gaat:
CSS:
tr.hover { background-color: #FFFBBA !important; }
JavaScript:
$('tr').hover(function(){
$(this).addClass('hover');
},
function(){
$(this).removeClass('hover');
});
Meer informatie: A List Apart: Articles: Zebra Striping: More Data for the Case | A List Apart: Articles: Zebra Striping: Does it Really Help?