If I am required to use tables, my preferred approach would involve utilizing CSS :after
selectors.
Sample HTML Code:
<table width="50%" cellpadding="0" cellspacing="0">
<tr>
<th width="25%">Item</th>
<th width="25%">Status 1</th>
<th width="25%">Status 2</th>
<th width="25%">Status 3</th>
</tr>
<tr class="status3">
<td>Stat3</td>
<td><i class="circle"></i></td>
<td><i class="circle"></i></td>
<td><i class="circle"></i></td>
</tr>
<tr class="status1">
<td>Stat1</td>
<td><i class="circle"></i></td>
<td></td>
<td></td>
</tr>
<tr class="status2">
<td>Stat2</td>
<td><i class="circle"></i></td>
<td><i class="circle"></i></td>
<td></td>
</tr>
</table>
CSS Styles:
i.circle {
display: block;
width: 20px;
height: 20px;
border-radius: 10px;
background: #ccc;
margin: auto;
}
tr.status3 td:nth-child(2):after,
tr.status3 td:nth-child(3):after,
tr.status3 td:nth-child(4):after,
tr.status2 td:nth-child(2):after,
tr.status2 td:nth-child(3):after {
display: block;
width: 50%;
background: #ccc;
height: 5px;
content: ' ';
float: right;
margin-top: -12px;
}
tr.status3 td:nth-child(3):after{
width: 100%;
}
tr.status3 td:nth-child(4):after{
width: 50%;
float: left;
}
tr.status2 td:nth-child(3):after{
width: 50%;
float: left;
}
Check out the demonstration on this fiddle link:
https://jsfiddle.net/0Lz3zfLn/