Before CSS layout was reliable across browsers, web developers built entire page layouts using HTML <table> elements — a technique that seems bizarre today but was the only reliable cross-browser option for years.
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td width="200" valign="top">Sidebar content</td>
<td valign="top">Main content</td>
</tr>
<tr>
<td colspan="2" align="center">Footer</td>
</tr>
</table>
Why It Happened
Tables had genuinely reliable, consistent rendering across every browser of the era, while early CSS positioning was buggy and inconsistently implemented — especially in Internet Explorer. Nesting tables within tables was a common (if fragile) way to achieve complex layouts.
Why It Eventually Died
Table layouts mixed presentation with document structure, were a nightmare for screen readers (which announce table semantics that had nothing to do with actual tabular data), and were notoriously hard to maintain. The “CSS Zen Garden” project in 2003, demonstrating dozens of wildly different designs from identical HTML using only CSS, became a rallying point for the shift away from tables entirely.