Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Tables aren't even deprecated. IMO you're better off keeping the tables than transforming it into <div> soup. 20 years ago you'd hear it shouted from the rooftops: "Tables for layout are not semantic!". Guess what? <div>s are never semantic. Just use tables if it suits you.



> Tables aren't even deprecated. IMO you're better off keeping the tables than transforming it into <div> soup.

I wonder if any notable sites still use tables even for complicated things such as, say, nested comment threads?


> notable

Good one


If you want to remove the semantics of table elements, you could set a role="presentation" attribute on all table-related tags. I'm wondering what HTML semantics enthusiasts will say about this. ;-)


You almost got me. After all why not? So I had to go read stuff, and think more about it than I would have. So thanks for this.

So: <table role="presentation"> is probably mostly fine, but not great, and not good practice.

The ARIA spec [1] says:

> 2. Notes on ARIA Use in HTML

> 2.1 First Rule of ARIA Use

> If you can use a native HTML element [HTML51] or attribute with the semantics and behavior you require already built in, instead of re-purposing an element and adding an ARIA role, state or property to make it accessible, then do so.

That's because simpler is easily more accessible. ARIA is last resort, when all else failed. ARIA is complex and not always well implemented, or implemented at all, and when it is implemented, interpretations can differ. Your content will be more accessible to more users / for more browsers if it doesn't rely on ARIA to be accessible. And more often than not, you can do more harm than good by using aria attributes, because it's easy to misuse them, which is worse than not using them at all. Now, ARIA is still very useful and should be used when it improves things over what HTML/CSS supports by itself, but table-based layouts have readily available HTML/CSS solutions.

My opinion is that there's no good reason today to use tables for presentation. One of the reasons is always the same: separation of concerns. Structure your content, in the simplest possible way, and then style it. Structured content, with a structure that's as simple as possible, is more easily accessible. Add divs if really necessary for styling (which don't really change the structure, since they don't have meaning - keeping in mind that they are a compromise).

It's funny how everyone seem convinced by the principle of separation of concerns, except for HTML/CSS/JS.

You could use divs with display:table(-row|-cell) for the same result. Although CSS flex or CSS grid would let you achieve the same thing with a simpler structure and will allow you to have a responsive design. Fat tables with side menus are unwieldy on small screens and your <table><tr><td>-based structure will make it more difficult to offer a usable design to them.

Table layout are also not great on text / terminal-based browsers. Letting the content flow from top to bottom will be way better. You have this for free if you don't use tables, because usually terminal browsers don't understand CSS.

I would then reverse the question: why use tables when you can use display:table, CSS Flexbox or CSS Grid? What are the benefits? Especially when they are simpler as soon as you learned once how to do your favorite layout using these "new" things. I won't be convinced by any answer that sounds like "I don't really want to learn this stuff" because if we are trying to answer "What is the most correct way to do this", we should seek to use the better version, not the one we are familiar with.

It seems to me "Why not use <table role=presentation>?" is a bit like "Why not use this carafe labeled 'this is a glass' as a glass?". Sure, why not, it will work, but if you have a glass now, even if you need to pour the water into the glass before you can drink it, isn't it better? (of course, maybe not the best analogy, I'm not good at analogies, but I hope it can help understand my perspective on <table role=presentation>).

I also believe role="presentation" or role="none" is a code smell. It has legitimate uses (I guess), but the use better be clearly justified.

[1] https://www.w3.org/TR/using-aria/


one is a table the other pretends to be a table. There has to be a lot wrong for the table to forget what it is. try disabling style.

css also gets complicated much faster than html. I like to offload complexity to less complicated areas.

a practical example: i look at each row and set rowspan for duplicate values. a series of rows might have week 22 as their first cell and multiple with monday as their second.


> one is a table the other pretends to be a table

How about "one pretends to be a layout, and the other is a layout"?

I don't understand well what you are saying, but:

> a practical example: i look at each row and set rowspan for duplicate values. a series of rows might have week 22 as their first cell and multiple with monday as their second.

This seems to be a case of using a table as a table, which is fine. You should use tables when you are trying to represent tabular data.


i see what you mean. I couldn't imagine using fake tables for layout.

you use grid flex or even float (if you need L or Z shaped cells)


> why use tables when you can use display:table, CSS Flexbox or CSS Grid?

The benefit would be that the author can understand how to use it better.


This seems to fall under the unconvincing "I don't really want to learn this stuff". This seems to be the only reason people are tables for layouts today.


People doing this are probably not interested in the rhetorical efficacy of the justification. In other words it probably doesn't matter whether you find it convincing.


Counterpoint: no semantics is better than wrong semantics. If a screenreader thinks your layout is a (data)table, it makes your visually impaired users sad.


I always thought the Planet_ sites were the peak of table layout. Check out the source code on this: https://web.archive.org/web/20010301044204/http://www.planet...

Although I suppose at this point Hacker News is the peak of table layout!


I lost out on a front end job about 15 years ago because I marked up a business’s open and close hours in a table during a coding test. I was told that my skills were clearly out of date.


If you use tables for what they were intended for or you have no problem with them, keep on truckin. But they sucked when they were the only way to do things.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: