Web designers have been using the <table> element type to achieve layout since it existed, as it is convenient and highly flexible. But it is also plainly wrong to do so. Let's take a good old 3-column layout as an example, with a rich navigation menu on the left, advertising on the right, and the main text in the centre.

This is bad for the following reasons:

My alternative advice is to not use a <table> for layout – or, indeed, for anything other than real tables. Instead, assume a possibly non-visual medium where CSS is disabled, then set out the page in a usable and sensible way in that medium, then get your visual CSS to apply your chosen layout — as one is supposed to.

Unfortunately, CSS isn't quite rich enough to give the full flexibility of <table>, and you're forced to apply lots of benign <div>s and <span>s, producing a mess possibly with no satisfactory result. You end up going back to <table> for layout because you can find nothing better at the moment.

However, there are features in the pipeline (Media Queries and Template Layout) which should be able to solve the problem:

Combine these two features, and you can enable a popular multi-column layout only when sufficient space is detected, defaulting to a simpler linear layout in smaller windows. You would structure your HTML very plainly:

<body>
  <div id="head">
    <!-- Heading and short navigation -->
  </div>
  <div id="content">
    <!-- Main content -->
  </div>
  <div id="nav">
    <!-- Extensive navigation or sitemap -->
  </div>
  <div id="ads">
    <!-- Advertisments -->
  </div>
</body>

Then you would apply a width-hungry layout on the condition that space was available:

@media screen and (min-width: 80em) {
  /* This section is disabled if Media Queries
     are not available. */

  body {
    /* We need all of the space we've detected. */
    max-width: none;

    /* Lay out as three columns with a banner
       heading. */
    display: "aaaaa"
             "bcccd";
  }

  #head    { position: a; }
  #content { position: c; }
  #nav     { position: b; }
  #ads     { position: d; }
}

Assuming the proposals don't change too much, you can start using these features now. If you design your page to remain usable even when they're not available (e.g., by assuming a narrow window when the media query isn't understood, as above), you'll still get your message across. If they are available, they're a bonus.

If you're not satisfied expressing your layout using these features (e.g., because support is so poor), don't even try — it's not a job that HTML is supposed to tackle, and CSS at version 2.1 is not up to it.

I sincerely hope that W3C will push forward Template Layout and Media Queries, so that browsers can start implementing them effectively, and that designers can have something better to hand than abusing <table>. If that seems like a vain hope, then it damn-well shouldn't be!