A long time ago many web developers used tables for layout. It was handy. It was an easy to do a layout. It was easy to understand.
"It is wrong, dead wrong," said the Tech Prophet.
"Tables are meant for data. Developers are misusing it for layout. It data markup, not layout. Use CSS for layout instead."
The wise priests listened. They looked into the CSS that the Tech Prophet had offered. They pointed out that it was hard to understand and hard to implement. The Tech Prophets cursed them out. They left and secretely kept using tables for layouts.
Those who remained became disciples of the Tech Prophet. The technically pure learned CSS layout. It was harder than tables, but they didn't care. What took them a few hours now took them some days to get it right. But they were technically pure. Over the years the disciples wrapped their solutions in frameworks. These frameworks used a grid metaphor.
The technically pured ended up doing layouts on grids. A grid is a table. They are using tables again, although in a more complex way. That was because a grid is the right metaphor.
The moral is that semantic purity can lead to an equivalent solution that is a lot more complex.