Monday, February 02, 2009

CSS and the meaning of life

Wow, my little CSS screed seems to have really hit a nerve. In just six hours it has hit #6 on the Reddit front page (up to #5 now). I didn't even submit it to Reddit because it has been ages since I was able to get any traction over there! All those karma points, they could have been mine. Oh well.

I would love to respond to all the comments, but the volume is pretty overwhelming. But this one really stands out as my favorite:

Yes, you are an idiot.

Why mince words? I confess, I am not a CSS expert. I all but admitted as much in my piece, which is why I based my example on code that was not written by me, but by someone who holds themselves out as being a CSS expert. Maybe I'm so idiotic that I can't even tell a real expert from a snake oil salesman. But I submit that whatever the case, I am an very good company. The mere fact that the CSS wars have gone on for as long as they have is ample evidence that there are a lot of people out there who do not find CSS a model of intuitive clarity.

I don't want to re-fight the CSS wars here. Instead I want to focus on some things that surely we can all agree on, to wit -- that the CSS wars have been going on for a long time, that a lot of people have put a lot of effort into fighting them, and that very little progress has been made towards resolving the dispute -- and ask the following question: What conclusions can we draw from these observations?

One possibility, of course, is that one side is right and the other side is wrong, and that the people on the wrong side are simply dim-witted or intransigent, or both. I try (not always successfully) to take seriously the possibility that I could be wrong whenever I write anything. Maybe Dr. Howard R. Fine is right and I really am an idiot. One of the many problems with idiocy is that it does not yield readily to introspection. I take some comfort from the fact that the vast majority of the people accusing me of idiocy don't actually dispute any of the points that I made. But maybe I'm such an idiot that I'm not even worth educating (hard to tell from where I'm sitting). So the best I can do is to leave that on the table as a possibility and move on to the next option, which is, I believe, if it not a more plausible hypothesis, at least more promising as a potentially productive line of inquiry.

I humbly submit for your consideration the possibility that different people want different things out of life. It seems self-evident, but it can sometimes be surprisingly hard to wrap your brain around the fact that someone else doesn't want the same things you do. One person wants long-term maintainability while another just wants to get it done as quickly as possible. One person wants their web site to be accessible to blind people, another doesn't. One wants SEO, another doesn't care.

Underlying my conclusion that tables were the way to go was a tacitly assumed quality metric that not everyone shares. At the time I was writing I was not even consciously aware of some aspects of my own quality metric. For example, accessibility to the blind had not even entered my mind. It's just not something I have ever had to deal with, and about which I know next to nothing.

There are other aspects of my quality metric about which I was aware, but about which I was not explicit. For example, I tacitly assumed that having content spill out beyond the boundaries of its containing DIV is Bad. I think most people would agree on this and other tacit aesthetic judgements that I made, but not all would. A blind person, for example, couldn't care less where on the screen something ended up. (I'm actually guessing about this. I really know very little about how blind people navigate the web. Maybe someone can enlighten me.)

There are likewise tacit aspects of other people's quality metrics that manifest themselves in their comments. For example, a lot of people seem to think that anything that was done in the 1990's is automatically bad. It is certainly true that tables can be, and during the 90's often were, badly abused. But IMO that is no reason to throw out the baby with the bath water. It's overreactions like that that led to throwing out Lisp with the rest of AI during the 80's, a mistake from which computer engineering is still not fully recovered.

And then there is one element of my quality metric which seems to be at the heart of the controversy: I believe that computers are meant to serve people and not the other way around. That means that if something inherently simple is difficult to do, it's wrong.

Not everyone agrees with this. A surprising number of people like things to be difficult. I have never understood this, but it is a fact. Some people revel in the intellectual studliness of mastering, say, C++ template programming or x86 assembler. I don't. I think C++ is a pain in the ass. Life is short, and I would rather spend my allotted time skiing or making love to my wife than worrying about whether or not I need to define a virtual destructor in my base class in order to avoid memory leaks. And that means that when I want, say, for something to appear centered on the screen, I want to be able to do it by typing "center" rather than "margin:auto". If I can't tell a computer to center something by saying "center", then as far as I'm concerned the computer is wrong, not me.

Like I said, not everyone buys in to this worldview. I don't get it, but it is surprisingly common. I think it might have something to do with job security. I first encountered the complicated-is-beautiful mindset when I was working for NASA. I had an idea for how to simplify spacecraft sequencing and make it less error prone. I figured everyone would love it. To the contrary, the establishment fought the idea tooth-and-nail (and still does to this day). And this attitude is everywhere. It's the reason the tax code is so fucked up. It's the reason the law is so byzantine. It's the reason that languages like C++ and Perl thrive.

I like simplicity. I think the computer should have to conform to my brain and not the other way around. That's why I like tables. They are simple, and they work -- for some value of "work".

Different people have different ideas of what it means to "work". For me, the ratio of effort expended to the quality of the visual appearance on the screen is paramount. I want to put forth as little effort as possible to get something that looks decent. (Yes, I'm a lazy bum. It's my greatest strength. Laziness is a powerful motivator for finding more effective ways of doing things, and it has served me quite well.) Everything else is secondary. I don't have any blind customers. I am not in any business where SEO really matters all that much. But your situation, of course, could be different.

That said, I do believe that some of the things said in favor of CSS and against tables are just flat-out bogus, and to point out some of those was the purpose of my essay. CSS is touted as separating layout from content. It doesn't. Maybe with the new table layouts in CSS3 that will change, but one of the external constraints that I have to live with is that what I do has to work in IE6. While the popularity of IE6 is mercifully in decline, the sad fact of the matter is that it still has a significant market share, and I am not in a position to ignore that much as I would like to.

Another common thread is that "tables are for tabular data, not layout." Why? Just because they are called tables? Here's a news flash: HTML has no semantics beyond how it is rendered! (That's not quite true. Links have semantics beyond their renderings. And maybe label tags. But nothing else in HTML does.) This is the reason that the "semantic web" is still a pipe dream. HTML was supposed to have semantics, but it doesn't. Giving real semantics to a markup language is really really hard. The history of computer science is lousy with failed attempts, from KRL to SGML.

Finally, a lot of people pointed to the Zen Garden as evidence of CSS's power. I remember seeing the Zen Garden for the first time and being blown away. But if you look closely you will see that it's not really CSS that makes the Garden beautiful, it's images! Don't get me wrong, the Garden is lovely, occasionally spectacular. But how much of the loveliness is due to CSS and how much is due to photoshop is far from clear. And this is to say nothing of the fact that the Garden completely sidesteps one of the most thorny issues for CSS, namely, dealing with dynamic content. If you know ahead of time what your content is going to be it's not hard to write CSS that will make it look nice. The challenge is writing CSS that looks good if you don't know ahead of time what your content is going to be. The Garden, beautiful as it is, has nothing to say about that.

I want to point out one more thing: I am not bashing CSS. I like CSS. Its goals are the right ones, and in many ways it is well executed. You can do some really cool things with it, often without having to work very hard. But layout -- at least the three-column layout that everyone seems to want -- isn't one of them.

85 comments:

Phillip said...

I love tables, and if used correctly and with a little forethought it makes things just as easy to change later on as a pure CSS layout.

I use CSS for presentation (cascading style sheets), as thats what it does best.

Tables just work, without hacks, work arounds, or HOURS of testing to ensure it works in various browsers.
Only to be thrown out by unexpected content later down the line or additional coding in the background to 'sanitise' unexpected content.

I believe in KISS, which has worked well for me over the years (less development time, more productivity).

As long as tables are simpler than other solutions I will use them.

scrambledheads said...

What CSS wars? who, apart from you thinks that CSS is the not way to do things correctly and simply?

Css for Dynamic content is trvial? and even were it not there is a straightforward, simple way to serve CSS dynamically by PHP, Perl, or any other server side language.

Jon Sidnell said...

I'm a wee bit confused by your reference to the 'CSS wars' too. I wasn't aware that I've been working in a hotly-contested battle field recently.

For me, the bottom line is that tables might 'just work' but it's incredibly short-sighted to do what will 'just work' for the developer. You might not have to worry about SEO or accessibility in your web development career - for example, you might be writing an in-house intranet or utility web app rather than a public-facing website.

But SEO and accessibility are things that we who make websites for multiple clients (e.g. New Media/Web dev agencies) have to worry about. For a start, in both the USA and the UK, there is a very real danger of being taken to court if your site isn't usable and accessible to people suffering from disabilities. And my clients tend to get a bit tetchy if people can't find their public-facing website through Google or your search engine of choice.

Semantic code would be achievable through HTML if people would stop using tables for layouts. That way, Google would see table tags and be able to assume it's showing tabular data. <p> would mean a paragraph, the multi-levl <h-n> tags would imply the logical structure of the web page, and so on. Google takes these things into account, and by adhering to them, you future-proof the site you are building to be re-used by some other system that can understand the semantics of HTML. The semantics of HTML can also be aided by giving meaningful names to your IDs e.g. <div id="menu"> instead of <div id="left">.

And quite apart from anything else, I just find div-based code easier to parse, interact with and develop, than the noisy tag-soup that tables forces upon you. Yes, there is such a thing as div-itis, but one section of a div-based layout typically consists of

<div id="main_content">
Content
<div>

Compared with

<table>
<tr>
<td id="main_content">
Content
</td>
</tr>
</table>

I know which I prefer working with! Especially when you get into dynamic websites that require either logic code interspersed or, at best, a templating language to further confuse things.

{CODE} M0nk3y said...

1. your css example defiantly is not written by a css expert

2. these css wars you are talking about do not exist

datenkind said...

Well, it’s really simple:

The world’s a flat disc. Don’t get to its border, you’ll fall over.

This crap people believed several hundrets of years ago. Things go on. So webdevelopment.

But you’re acting like someone who still believes the fat bullshit up there.

I think you’re a person that writes his letters in Excel. There’s no difference …

Phil Evans said...

> HTML has no semantics beyond how it is rendered!

No. You're very, very wrong about this. The whole field of SEO exists because you are wrong. The title element, depths of heading, everything is used. Just because you can't see it being used, it doesn't mean it isn't.

It's commonly said that Google is the biggest blind user in the world. If your content isn't blind-accessible, it's likely to be less Google-accessible. Accessibility is for everyone.

fire-faux said...

I'm going to have to agree with philip and maybe try and elaborate a bit more on his point.

The bottom line of HTML, is that it is in fact a markup language. Never mind if CSS is even remotely intuitive, because it's not.

What's less intuitive about it still is using it frequently enough to have developed a naming convention for your classes and divs so that you can easily review your css and know what to change when the client has their say.

I digress. If your using tables to display anything other then tabular data, your breaking the internet.

Tyler said...

HTML has semantics, and I'm not sure why you think it's that hard to apply them. H1-H6 are clearly headers of varying importance. P is short for Paragraph, DIV is short for Division, EM for Emphasis.

Each tag has meaning, and it has nothing to do with how it's rendered. It's rendering is based only on the default CSS for that element, and can be drastically changed by a few simple lines. You could easily write an entire page made up of only A tags if you wanted, but the semantics would be wrong.

There are two main problems with your initial argument. First, you are expecting DIV-based layout to behave like tables, which don't have the right semantics for layout. If I have a left column that has a lot of text, I generally want it to flow down, not make my main content smaller. Second, and I think this is the same problem a lot of people are seeing, your argument boils down to "it's hard, so I'm not going to try". Now, I'm all for doing as little work as is necessary, but I also care about doing it right. Instead of actively deciding how you want your layout to work, you're handing it off to each browser's interpretation of TABLE. Yeah, it takes some work to learn why your first idea of a three column layout doesn't work, but as soon as you get that you have to define the behavior you want, and learn the tools to create that definition, it becomes very easy. It's true, there are still browser bugs, but they're much better at this point than they ever have been, and it seems they're getting better.

If you really don't want to develop your own layout, use one of the many good frameworks: 5 Popular CSS Frameworks, 9 CSS Frameworks, 5 More CSS Frameworks, Top 12 CSS Frameworks

lo_fye said...

For me, CSS got a lot sweeter when "YUI Grid Builder" came out. It generates proper working N-column layouts for you. Part of the "Yahoo User Interface" library. Awesome!

Vladimir said...

Ron or Erann you are not an idiot. You are genius! Thank you for your free marketing lesson. Everyone in the blogosphere is talking about you.The title was fantastic "Why CSS should not be used for layout". Pure contradiction. Can I suggest another title: "Why Windows is better the Linux". I can guaranty min. 50.000 visitors ;)

Naum said...

Re: the CSS Zen Garden thoughts, I'd say /bingo.

They look really great for a toy site, where you're just dressing up some static HTML, with background images for your headers and article headers…

And the site only looks good if someone doesn't scale the font up or down a size or two (as which you pointed out, text will overflow (or be truncated, if one allots for this possibility) the bounds) — web is supposed to have documents appear decently on a variety of platforms…

Carl said...

I agree with you on much of what you said and thanks for not attacking those that called you an idiot, they are the people I would like to punch in the face. Anyone who so quickly jumps to call someone an idiot for simply stating a point that many others have dealt with is just an asshole that needs a good beating. The internet is full of disrespectful pricks. Those people are the epitome of what is wrong with society.

UVL said...

Can't agree more with "computers are meant to serve people and not the other way around. That means that if something inherently simple is difficult to do, it's wrong."

Adam said...

One thing that I think everyone fails to take into account when considering CSS based layouts is that more often than not, the CSS is contained in a separate document. Now in my opinion, when developing in tables, I can look at the code and see the table structure, and render what the website is supposed to look like in my head. When I'm looking at a site made in divs, this is much harder to do. Especially if all the positioning code is contained in a separate document...the CSS.

As far as I'm concerned, a hybrid is the best way to go, using tables to block out the boxes on the site and using CSS to make minor adjustments and keep standard colors and sizes for links and such throughout the site.

I think that people put way to much emphasis on being semantically correct, and having things perfect for SEO, even if its to the detriment of the developer.

If SEO and semantics are so important, a new layer should be added to HTML or CSS or XML that is purely for bots and search engines and screen readers, that allows a developer to markup the semantica flow of the document, irrespective of the actual physical layout of the code.

So I whole heartedly agree with the author....Bravo sir.

lo_fye said...

I should also have said that your article really challenged my preconceptions. I have been pushing for "tables for tabular data, css for all else" for so long that I had stopped questioning it. But you are totally right. Occam's Razor is perhaps the only true law of the universe. If it's not simple, it's wrong. Optimize the interface above all else. And I, for one, believe you're right. Tables are better at doing the overall wrapper layout. Sure, fill'em up with css-ified widgets... but save yourself some trouble and tablify the foundation. I can feel a weight being lifted from my chest as I say that. [ahhhhhhhhhhh]

R. Daneel said...

Yeah, YEAH! And you know what?! I shouldn't have to use Javascript for fancy blinking text! I just want the BLINK tag back! In fact, do away with Javascript completely, it's too complicated.

[/sarcasm]

The problem with your argument is follows: Tables are containers for tabular data. We, the multitude of the Web, are trying to make this place accessible to everyone, and that means we have to contain our data in proper structures. Someday, we might move on to pure XML, or something totally different. But as it stands, using what is essentially an HTML hack (a long lived one admittedly) is degrading the quality of information on the web. We are trying to make information available across the world - and if it's all in tables how are we going to sort it out?

Not to mention, you can make DIV tags behave exactly like tables and rows and columns and even table headers. Crack open a CSS book and explore the world of possibilities. Quit dragging us back into 1998.

Adam said...

Quick question...whats the difference between divs with id's and tables or td's with id's as far as semantics go?

gandergentry said...

...perhaps you should look at stu nicholl's work before calling somebody else an expert.
have you ever heard of "float"?
also, tables crash in a number of browsers...not a good thing.

UVL said...

"also, tables crash in a number of browsers...not a good thing"

Tables do crash? Really? Never seen an html table crashing since 1997 on Amiga browsers.
Please give an example.

Ron said...

> What CSS wars? who, apart from you thinks that CSS is the not way to do things correctly and simply?

> I'm a wee bit confused by your reference to the 'CSS wars' too.

You're both kidding, right? If there's no CSS war, why did my little essay attract nearly 80 comments on my blog and over 500 comments on Reddit?

> > HTML has no semantics beyond how it is rendered!
>
> No. You're very, very wrong about this. The whole field of SEO exists because you are wrong. The title element, depths of heading, everything is used. Just because you can't see it being used, it doesn't mean it isn't.

But those semantics derive from the rendering. If this were not the case then HTML-obfuscated spam would not be possible.

I may need to write a whole 'nuther piece on this. Damn.

Imagist said...

I don't agree with the original poster's decision to use tables for layout, but his original premise, that DIVS + CSS are fundamentally broken, has a lot of merit.

HTML is PARTLY semantic, but there is still a whole lot of layout implicit in HTML. The big problem is that the W3C doesn't have the guts to do a complete redesign from the ground up, and so has kept most of the problems from SGML. This isn't likely to change, either: they seem to think that they have fixed that problems and can now move on to complicating our lives with horrendous things like DTDs and XML schema tags.

Jon Sidnell said...

@Ron

There are 80 comments because you posted a provocative essay contradicting what has rapidly become orthodoxy regarding use of technology in web development. Seriously, I've never heard the term CSS War before your posts.

Re: "Semantics deriving from the rendering" - no, they don't. They derive from the standards that define what tags mean in (X)HTML. It is these standards that mean we can write code that Google (which doesn't 'render' the pages visually when indexing a site) can understand and attach semantic meaning to. This is what is being transgressed by those about to start following your advice.

@Adam "whats the difference between divs with id's and tables or td's with id's as far as semantics go?"

This is totally directed at Ron too, BTW. The difference between div's with IDs and tables with IDs is that a div, semantically simply means "This is a section of the web page." Table markup, semantically, means "OK, here we have a table. Oh, yeah, there's the row, and in that row is some data. Sweet!" There is a whole load of semantic meaning that Google and other search engines can bring to bear on table markup - and if tables are being used purely for layout, then that semantic meaning is being wrongly applied.

That is fundamentally the problem with your advice, Ron. It says a whole lot more to search engines than just "Oooh, make it look like this." And let's not forget that this isn't just a problem for SEO - it's a problem for screen readers. If you mark up page content using div's, screen readers typically just say "Page section: Navigation.... Content...." If you mark up using tables, it will say "Table. Table row. Table cell... content"

It is just the wrong way to mark up content if you care about building accessible and usable sites for all. And as I've said before, this is fast becoming a legal requirement for people who make websites...

shy said...

I'd be interested to see a study on "before" and "after" for a simple, hand built, table structured web site that was transformed into a fully css compliant website, and as a result was ranked higher in google, had more hits, etc. Can anyone show quantifiable evidence in support of CSS? All I hear is "It's the right way". Well, where I am from, the right way is the way that gets you launched.

I have done CSS sites, I have done tabled sites, and either way, my clients and my end users really haven't cared.

Using 100% CSS in the real world is more a matter of geek cred than anything else, IMO. I fully admit that 12 levels of nested tables is horse crap. I rip stuff out like that when I see it. But I'm unsure why a single table for the overall site structure is such a big deal to so many people. Yes, I understand accessibility concerns.

At the end of the day, clients want sites that look the same across all browsers and they want it now. You're not getting paid 50% more to spend 50% more time trying to get IE 6 rendering correctly with all the little hacks.

Why should web developers burn literally millions of man-hours just because the brower people and the W3C can't all huddle together and figure out how stuff should render? Think of how many hours have been burned between all the millions of people tasked with creating web sites, just because something was 8 pixels off in IE 6.

Just think about it.

It doesn't happen with tables.

Honestly, I don't even know why I'm posting this, because this isn't the type of argument that people get swayed on. You either think web development is some holy thing to only be done by the professionals, or you think that the web is an open platform that has revolutionized the world and you shouldn't need a degree in markup and design to be able to make a web page. The greatest power of the web is that it allows anyone to put an idea out there. It's not an art gallery. It's the wall of a coffee shop, covered in flyers for local bands and apartments for rent.

IMO, CSS purists are more worried about their profession than they are about people easily getting results on their web projects. I'm more interested in results.

If you're lucky enough to get a few thousand users and people are complaining about accessiblity and whatever else, you can always CSS the site up after the fact.

Bottom line? Don't delay launching your ideas and projects because you're not a CSS master. Just use tables and if it's a big deal later you can refactor to get CSS in place.

Final note: I am not trying to disrespect CSS masters. In fact, one day I'd like to join you. But today? I've got ideas to launch and bills to pay. Table based layout may be less 'correct' but it also 'gets things done quickly'.

TheCatWhisperer said...

"you can make DIV tags behave exactly like tables and rows and columns and even table headers"

This is false.

Using javascript you might be able to pull this off, but not with divs, not with content that may be dynamically updated, or have a fluid width.

prove me wrong.

simeona said...

@theCatWhisperer:

div { display: table; }

read a book.

Aside from that, you people are making uneducated biased statements on a topic you have NO experience about. Just like with any craft, doing something PROPERLY requires skill and time. Any idiot can slap together a house, but will it function the way it should? hardly.

The key issue you're missing here, and wholeheartedly the first reason that you have no ground to stand on is the fact that you're comparing "tables to css layout". It has nothing ot do with CSS - it has to do with SEMANTICALLY CORRECT markup. Which yes, admittedly, may be a little hard and time consuming to master the styling of, but once you do is significantly faster and easier to work with. Not to mention the endless usability possibilities and maintenance.

It is sad and dangerous that someone with your lack of knowledge gets this much exposure on a topic you apparently know nothing about. and have no place commenting on.

bluemountain said...

You know, Douglas Bowman didn't seem to hate div's and css so much when he wrote this very theme you're using for blogger in under 15 minutes.

Just a thought.

introspectif said...

I second shy's comment, and the author.

TheCatWhisperer said...

@siomona:

Books are great, reality is better.

build a table using ONLY css & divs in the following browsers:

IE6, IE7, FF2, FF3, WebKit, Opera.

- Show that it works the same in each.
- Show that the columns and cells align properly when teh page is resized
- must support resizing and percentage widths
- must support colpan & rowspan.


I'm waiting ;)

simeona said...

@TheCatWhisperer

You're missing the point entirely. I have no need to build a layout that acts like a table because that is the improper way to make it display. I can easily assign widths in percentages, make them scale for browsers with bigger fonts and make the layout fluid.

I have no need for col or row spans because they do not fit into a layout structure. If I want a table for tabular data, I will use a table.

As someone who knows what they're doing I've coded hundreds of layouts without tables, some of them probably significantly more flexible than any table-based layout you can put together. It's a matter of knowing what you're doing and not taking the easy way out.

For all of you (and I'm starting to think there are more of you than I'd imagined) who have been living in a box for the last 5 years: http://www.hotdesign.com/seybold/everything.html

TheCatWhisperer said...

PS: I would NEVER use Divs to display tabular data, its ridiculous. That's what tables are for.

I wouldn't use tables to build a layout unless i felt it necessary, for a mock up or because the layout does not need to be fancy, etc. Or if time was a restraint and it was faster to use a table and viewing on a mobile, etc, or accessibility did not matter.

There is a time and a place for CSS, Tables and toolkits (as was discussed in the posters last post, if you bothered to read the comments).

Just because you can drive with your feet, doesn't mean you should.

PS: If you actually take my challenge in my previous comment, you have too much time on your hands, as i said it is a ridiculous request when you can use a table to do the same thing, and where using a table makes sense (ie: building a table of data).

TheCatWhisperer said...

@simona.. ahh i think we may more or less be on the same page :|

Oh, and I've also been doing this for over a decade, but we build enterprise web apps and code using toolkits like Dojo and GWT, it would be silly to use anything else or do it by hand in our case.

TheCatWhisperer said...

PS:
my challenge comment was in reply to your: "div { display: table; }" bit.

Oh, and you know nothing about me, you read one bloody comment and think you know my experience, what I do and don't know about web and application design and usability?

You assume a lot, I'd watch out for that. I, personally like to do a little research before I make such a blanket statement;) But as I don't have a resume from you or a list of references, I'll give you the benefit of the doubt ;)

Cheers!

PS: I think actually we probably see eye to eye on most of this, we just haven't really discussed it in a constructive manner :| I'm guilty as you are here.

Harold Fowler said...

Wow dude, now that is pretty random!

RT
www.real-privacy.us.tc

Zeldar said...

I have to agree with Simeona. Yes markup does affect SEO, table based layout will get ranked lower, be less usable and have many other issues around accessibility. The idea behind CSS is not just separating markup from design but also has to do with keeping your markup readable. Now readable isn't just for human readable but also for non standard browsers like Lynx and other ones for blind people. And as far as this "CSS War" I've never been made privy to this. I think its more the people who know how to do it right trying to educate others on what they are doing wrong and how to do it right. Its not 1995 tables should not be used for any type of layout unless its tabular data you are laying out.

Jameson Quave said...

The CSS side doesn't have a leg to stand on. They're basically saying that CSS is preferred over tables, but they're not equivalent things. What they're really talking about are Divs vs Tables. You can assign a class to a table the same way you can a Div. Or to put it another way, a 3-column table layout generally is using CSS.

Anthony said...

http://www.csszengarden.com/?cssfile=158/158.css

Here's a very un-zen garden example to prove your point.

WokTiny said...

I've seen the "CSS Wars" fought in development fora, mostly between "professionals" and "newbies" or "indoctrinated" and "unindoctrinated". I fall in the Cowardly-Uses-CSS camp, but I have never seen a strong case for why tables are wrong for top level layout, just "semantics" and "accessibility" thrown around as though the world already knows the answer and just needed to be reminded.

and I'm tired of recreational CSS hacks for emulating tables. That's what we're doing, by the way, *emulating* tables.

and I still don't know why.

I like the idea of semantic documents, and look forward to the day there is a good solution for this. I just don't think we're there yet.

Ben said...

I agree with everything the original author said except for the part where he muses that some people love complex computer issues because of job security. I think it's instead because they like feeling smart, and mastering something complex is certainly something that can make you feel smart. Inventing complexity where there is none, however, is not smart and the amount of wasted effort therein could probably fuel an economic recovery.

Max said...

I'm glad there are more people like you denouncing CSS fanboyism. I agree CSS or some technology is the future of web design, but I don't think tables are evil. Tables are pretty intuitive and dramatically speed up development.

Everyone who says that "you are the only one who feels this way about CSS" to the author should realize that's not at all true. CSS for layouts is pretty shitty. For everything else, though, it's amazing.

simeona said...

@ben / @ron

I would argue that quite the opposite is true in terms of job security. Using tables for a layout will most definitely ensure that you have to be there to do the next redesign, as it will most certainly involve re-doing table-based markup. However, when someone who is proficient at doing table-less layouts and semantically correct documents does his job properly - a trained monkey can do any alterations to the css to make any design changes / adjustments in the long run.

So we do what we do because we love it and because we like doing this properly, and lessening long-term headaches, and not for the job security.

On more than one occasion, I've been 'let go' as the primary interface developer because there was no need to maintain a high-paying job position for the mundane daily tasks involved in updates etc. ... Which is just fine by me because I like to move onto bigger and better things anyway.

simeona said...

If anyone wishes to continue this conversation in a more real-time environment and in a constructive (non-flaming way) - drop in #css on freenode - I go by the nick jedimind; we can discuss pros/cons in there. But I warn you that most people in there are biased to non-tabular layouts

Stef said...

I've been eating off tables all my life, except when I was a newbie being breastfed and high-chaired.
Using the right cutlery, one can slice up anything and have a square meal. CSS layout is for vegans!

JD said...

Has anyone considered PRINTING?? Try making a css-based layout print nicely without some effort and you'll find a miserable physical representation of your work. Try printing with a table based layout...Wow - it prints just like it looks on the screen. Hmmmm.

clone said...

First of all, layout and typesetting are hard and require a trained eye.

So yes, it's an indictment of your coding ability. Just because you and your friends suck at coding, doesn't mean everyone does.


Second, the reasoning is,
"everyone" wants a 3-col layout, last year. It's already beginning to show signs of becoming a dated layout methodology.

None of us want to learn a new spec every time the winds of design ass-holery change, that's why most languages are open ended and require work on the part of the coder.

simeona said...

@JD

Print and web are two different mediums and should be treated as such. a 1024px wide layout with tables will hardly translate to paper properly. Using a semantically correct document and styling it appropriately for print ensures that the printed document will be useful.

On that topic - have you considered other devices? PDAs, smartphones etc?

YOu should be able to present different devices and mediums with a different layout to match the specific usage rather than being chained by the structure the table confines you to.

Dustin said...

Hey bro, don't feel bad about what you said the first time around. It's completely viable. I would have said the same thing about things of which I am not an expert... it seemed more of a fluke that the "CSS Experts" arrived and trashed your article to death which is more or less unfair.

Albeit the fact that I claim to be a CSS expert myself, I also teach courses on it and have seen several hundreds of people over the years tear out there hair because of CSS.

For the record it's not CSS, it's the browsers that don't correctly support. By now I'm sure you've read somewhere in your comments telling of "selector { display: table-cell; }" — which would make normal elements flow just like table cells.

Again, don't feel bad for your original argument. Your examples were spot on and are mainly telling of how bad browser support is and the amazing amount of hacks we've had to endure over the years.

Pay no attention to the extremist who feel that you've threatened their entire livelihood and existence and in return called you an idiot. They don't ever go away and don't help the world.

Olaf said...

Sex sells. CSS is sexy! But guess who cares what a bunch of nerds think is sexy? Not the sexy people, that's for sure.

At the end of the day, most of us are trying to develop web sites for paying customers. Your paying customers think a competitive-looking site that works and came in under budget/time is sexy. If you spend an extra 10 hours on an 80-hour project because you wanted to stick to the spirit of standards and a web developer's honor, do you think the customer cares about that? Probably not. They probably are a little irritated that you let your own opinions get in the way of satisfying the customer's need to stay within budget.

I'm not a professional web developer, strictly speaking. However, I occasionally build sites that I make good attempts at building on standards-based coding. I have that luxury. But when a customer wants something from me cheap and quick, I'm inclined to use a WYSIWYG solution to produce something more distantly related to what I might have written by hand. For the price and the time I spend however, the customer could care less and will actually praise me for a job well done.

Gods save me should I ever need to edit that machine-generated drivel. It's 3:00pm and all's well.

dusoft said...

arguing that HTML is not semantic, because some lements are not named in a semantic way is kinda weird, but that's your way. you could try to help HTML to be more semantic by keeping up with the standards or just ignore it and use tables for layout. in your ignorance, you have chosen the latter, which is very unfortunate. this is why there is still a place for webstandardists even in 2008 (and accessibility is the thing).

Thomas Jacob said...

No, Ron, you aren't an idiot. You are brilliant, pragmatic, and realistic. You try to remove academic approaches from your thoughts.

And you want a solution, not fight for an ancient way you love. You have good arguments, and I am with you.

Alonso Garcia said...

My 2 cents:

Using tables for layout is as bad as using horrible CSS hacks to make a site do anything other than what websites are supposed to do, that is, display content in an easy to read coherent way.

The same goes for using very complex javascript for tricks and effects that don't really help the user, but just look pretty or cool.

All my sites use basic CSS for layout (XHTML transitional), tables for tabular data, javascript for basic user interactivity. Nothing fancy, nothing super-flashy. But guess what? They work on all browsers, get good SEO rankings and serve their purpose exactly as intended.

There is a great article by Jeffrey Zelman called "Style versus Design", look it up, it's an interesting read.

Cheers

Mike said...

Hey Ron,

I think your original article was very well stated. A lot of the CSS-oriented developers out there gloss over the fact that even with CSS there is less-than-perfect separation between content and presentation. The structure of the underlying HTML is extremely important since you need to have something that you can attach appropriate CSS rules to, and divitis is a serious problem.

That said, I prefer working through the hassles and using CSS anyway just because I feel like my markup is much cleaner that way. It's sort of like the argument about how democracy is the worst form of government except for all the other ones that have been tried.

Interestingly, I have built a templating engine for PHP that lets you define your own tags, and I end up using this a lot. For instance, I have a "tabs" tag I use instead of "ul" when I want to make tabs appear on the screen. The templating engine converts that into appropriate HTML at runtime. This makes a lot of sense to me personally as I prefer explicit markup rather than that with meaning granted by random CSS rules. The templating system is on GitHub if you are interested in checking it out.

Keep up the good work!
Mike

MM said...

I think that CSS & the "Web Standards Movement" has become the development equivalent of intelligent design. It's become the rallying cry for for bullying developers into coding a certain way, one that is not always effective or efficient, or that works consistently across browsers.

And why "standards" were developed that made it extremely difficult to create columns of equal length, align type of varying sizes and fonts across columns, align elements of equal to the bottom of column columns, etc., etc., etc., etc. shows an ignorance, whether intentional or not, of the basic principles of usability and good design.

William said...

Show me a table-based page that can automatically display a different layout for alternate devices.

Separation of content and style makes sense.

Semantic documents make sense.

Blah said...

Thanks for your post. I personally almost always use pure CSS for layout. However, I don't believe in all the hype that the 20-something, uninformed web-developers regarding the CSS is better than tables issue. Their biggest reason for using styles, outside of simply keeping styling in a different file from the HTML, seems to be accessibility for vision impaired users and for SEO (By the way, Google and Yahoo both use tables for some of their layout). Some will go for alternative devices, like, uhh, I dunno, small screened phones, I guess. Well, I personally don't know why any of these are reasons to use CSS over tables. All can read and render the tables just as well as CSS. How many of these people have ever used a screen reader developed for blind people? I have. There's no difference. Ever see any peer reviewed study on SEO when layout is based on tables vs CSS? I haven't either. All I've seen is a blog written by someone who thinks he's god's gift to web development. Until I see actual proof that CSS is better than tables, I won't give a rat's behind which method is used - and nor will anyone outside the uber-geek community that reads this and similar blogs.

moloch said...

No matter what you say, someone will say you're wrong. I appreciate the act of standing up to say something. The fact that it's been met with evangelical ferocity says to me CSS isn't as perfect as everyone would like it to be. Whether or not I agree with your conclusions is irrelevant, pointing out the fact that CSS is awkward and clumsy is valid.

Adi said...

Until XHTML has a tag for vertical DIVisions, tables will be the only way to do columns simply and reliably.

DIV (division) tag is for horizontal divisions only. You can try to hack them with CSS floats but that is a world of pain and all you CSS purists know it.

guigouz said...

cool. this site uses CSS (not tables) for the layout.

dcle said...

Who says that tables are not accessible to the blind? That's BS. As someone who works with assistive technology and electronic accessibility for the blind issues, format tables are absolutely accessible -- and more reliable with certain screenreaders than sloppy CSS will ever be.

Jeff L said...

Well, a little bit of redemption to your previous article at least.

"You can do some really cool things with it, often without having to work very hard. But layout -- at least the three-column layout that everyone seems to want -- isn't one of them."


Yes, you do need to work hard to do certain things in CSS. You need to work hard to do things in any other coding/programming language as well. Anyone can do a "hello world."

A big problem with your argument is this:

"One person wants their web site to be accessible to blind people, another doesn't."

While that's true, it's not a good argument. Ask Target - everyone should care about accessibility.

Ilia said...

I wholeheartedly agree. When I first read the "Holy Grail of CSS" article on "A List Apart" my first reaction was - that is pretty awesome that they managed to do this with CSS. My second reaction was - this seems way too complicated for something that takes 10 lines with tables.

To me CSS was always, first and foremost about elegance and simplicity, for both front-end (i.e. how the page looks) and back-end (i.e. the code). It is fine to have complicated CSS for a layout look that cannot be achieved (or would possibly be "heavy" and not user-friendly due to, for example, heavy use of images) with HTML alone.
However, when doing something with CSS is more complicated, less intuitive and 'causes innumerable bugs and headaches, while in comparison, the same thing can be achieved simply and easily with HTML - well how can anyone, at that point, argue that CSS is the better way to go??

I never understood that.

You are also right on the money with dynamic content. I deal with several sites where I don't know exactly how much content is going to present at any one time, and while I can get things working 99.9% in IE7 and FF, IE6 (which unfortunately I still can't ignore) on the other hand, still gives me problems whenever I try to redesign things to use CSS-based 3 column layout. And I pretty much tried every trick in the book - shit still breaks.

And one last thing to all the nay-sayers - what is your problem with one table? No, really? I mean, we all know nested tables are bad - they're confusing to code and they slow down rendering. However, I don't see why there's such a strong resistance to putting the one tables for the 3-columns on the page. It's not going to affect performance, the code is cleaner, and the CSS with 2KB or 3KB lighter.

subsomatic said...

One thing that I'm suprised hasn't come up explicitly is that using tables for layout was originally and has always been a hack. It's not what tables were designed to do.

Another note, and this is purely a personal note - I made the switch from tables to css about 2 years ago. I find my development time has been cut in half since having become familiar with css techniques and have only looked back on very rare occasions. I use css whenever I can because it's faster and simpler for me.

I'm amazed that people get so worked up over this. Use what makes sense for you. Who cares what other people use?

Melzz said...

@subsomatic

It's not just about what makes sense to you, unless its a personal website in which case nobody cares (not entirely true some standardista's may laugh at you).

When it's not a personal website there are a vast number of reasons as to why adhering to standards a good thing. It's the same reason why we have standard in all industries. If someone else ends up with the task of having to work on what you built sometime down the track and you are not around for them to ask why/what/how you have just made their job that much harder.

HTML does have semantic meaning, the markup actually has absolutely nothing to do with how the it's rendered on screen as you can change the visual display with css. H1 for example does not mean large text it means this is the MOST IMPORTANT heading on this page.

I could go on all day as to why we should be using standards but unfortunately it seem's like i'd be wasting my breath.

Personally I think this guy knew he'd get such a reaction out of his article, he's really only done it and the follow up posts purely for shock value, I think he likes a fight and it's definitely worked at bring traffic to his blog.

UVL said...

Ron don't be discouraged by most of the comments here, you're one of the few bloggers with the ball to go against the CSS lobby.

And you are right too! :)

Ron said...

Don't worry, I'm not discouraged :-)

Webdev said...

Is hard to make a CSS layout to look the same in all major browsers (IE6, 7 and FF). On the other hand, all browsers render tables similar.

CSS has the advantage of keeping the code small and clean but sometimes you loose too much time with debugging and fixing layout when a table layout can do similar results in less time.

I agree with most things Ron mention here.

One problem with table layout was that browser should wait for entire content to be loaded before render the page. How about the latest browsers, do they still have this performance problem?

thinsoldier said...

2 things.
1) you don't know enough about css
2) you make some very valide points
especaially when it comes to using css for layouts with more than 2 columns and you SEO expert is insisting that the content order be Content, leftnav, rightnav, topnav, footer.

But other than that (and yes, countless other situations I've luckily never had to experience) a simple 3 column layout isn't that bad. I agree with a lot of what you say and totally understand your frustration (I just started using css 4 years ago) but it's not that bad.

Using the 2nd example on http://www.flownet.com/ron/css-rant.html where the content is ordered as top, leftnav, content, rightnav, footer you can use the following css. Of course it's only this easy if your layout is a fixed width :( If you want a full window width liquid layout then yes it gets far too hard for me to work with css.

#container {
background-color:#FFFFFF;
border:1px solid gray;
color:#333333;
line-height:130%;
margin:10px auto;
text-align:center;
width:480px;
}

#leftnav {demo.css (line 23)
float:left;
margin:0;
padding:1em;
width:80px;
overflow:hidden;
}

#content {demo.css (line 48)
border-left:1px solid gray;
border-right:1px solid gray;
float:left;
padding:1em;
width:222px;
}

#rightnav {
width: bla bla bla.....
float: left;
overflow:hidden;
}

Back to where you're right.
Yes, to get the blue background and black border between columsn you will need to use a faux-column background image to simulate full page height side columns :(
This really complicates things if you want some decorative element that starts at the bottom of the side columns and comes up (probably is impossible)

"Supercalifragilisticexpialidocious"
Even in a table cell something this long without white space causes problems!
Make sure your side columns have a width and set overflow:hidden.



Other alternatives would be to look into display:table (works in IE6 and other browsers but not Firefox 2 and earlier)
Display table makes a containing div behave as if it's both TABLE TR and any child divs behave as if they're TD. I've never used it on a live site (due to firefox 2) but I think it could be ready for prime-time in a few years :(
Unfortunately, depending on the specifics of your layout you may find yourself adding enough useless divs to equal TABLE, TR, and TD to get things to work whereas in other layout you can get away with just setting display:table-cell on the 3 purposeful divs.

Or order your content as top, left, content, right, bottom and set left, content and right to be display:inline-block (this might also be problematic in firefox 2 but should work find in IE6... I think)


"When the leftnav content grows you want the center div to grow to compensate,"
I rarely, probably never want that.

"tables have the correct semantics for doing layout"
I don't agree but I won't disagree with the point you're trying to make here against css.
No one in their right mind will be able to just "pick up" on the idea of using odd sounding things like floats, hidden overflows, auto margins and negative margins for layout when they're accustomed to tables (excel, word, TR TD, etc). So maybe I should take back that "you don't know enough about css" comment. Why should they expect anyone to read the vast amounts of boring crap I had to read to know what I know (and I still avoid 3 column layouts like a cat avoids swimming pools)

...ok what else...(continues reading follow up post)

"For example, accessibility to the blind had not even entered my mind. "
Divs with display:table/table row/cell etc someday should behave just like regular table tags but without interfering with/confusing screen-readers. I still think screen reader developers should have figured out long ago a way to detect of a table was tabular data or used for layout and adjust their user interactions accordingly.

"having content spill out beyond the boundaries of its containing DIV is Bad"
More seemingly idiotic float related decisions made by the CSS working group without any explanation in the spec about why the decision was made or what the benefit of it is. (actually I think I did find an in-depth explaination once but in practice this "feature" is useless and I think the IE team was right to ignore this part of the spec and always have parent elements properly expand to enclose their floating children.) Google "clearing floats". I prefer to use Height + overflow:hidden but even that has its drawbacks at times.

Daniel said...

Thank you for such a well-written article(s). I have done so many website analysis reports for federal agencies. One of the biggest problems is browser compatibility.


Their site render completely horribly from browser to browser. Why? The reliance of styled DIVs as the layout method. In every case I have recommended the same thing: Abandon CSS DIV layouts and rely instead on tested and true tables.

Users want the site to work. They don't want content to overlap and spill into other content, they don't want tabs to remain hidden behind each other, they don't always want tons of content to be contrained to a fixed-width layout (like cnn.com which uses CSS Divs) and would prefer the content expanded with their browser (like google news which uses tables)

The ideal of DIVs for layout is a good one, but 10 years after W3C WCAG 1.0 was released we STILL do not have two browsers rendering CSS identically. Tables WORK. Tables are Stable.

Michael said...

we should just do everything in Flash! Yeeehaa

tim said...

It's a beautiful dream. A page is marked up into blocks, where every block has a tag that says what it is, not where it goes or how it looks. All the information about where things go and how they look resides in a different space, the CSS, a powerful language that can put these blocks wherever you want them to be and make them look however you want them to look, no matter what program is displaying them.

If this actually worked it would be wonderful. ( And there would be no divs with id's like "left-column".)

Let's get a grip: Real world layouts have div structure and CSS that has built in assumptions about the positions of things. And having ONE TABLE of three rows expressing header/left/center/right/footer is not oppressing the blind, confounding the geniuses at Google, or violating a pristine, philosophically pure perfect solution for web layout.

halicon said...

Sorry. CSS should not be used for layout. I am not a professional with regard to Tables nor CSS and would prefer things to be done in flash, however we have to support those in the dark ages. ;)

I see CSS/HTML/Javascript all in the same light. Clunky, fallible and pathetic systems that require a lot of time, effort and frustration to get right.

If you want purity, pixel perfection and true representation of design without the hindrance of technology than use flash.

If you have to use HTML then stick with tables. A lot more predictable and quicker. CSS is awesome for formatting and I believe that is where it ends.

Arnold Ude said...

Dear Ron, keep the way you are working as is ! To put a long comment short: Your article made me return to good ol' tables whenever I have to "layout" some web page again. I spent ages of wasted time to find "bugs" in CSS layouts. When I look over "solutions" to your problem browser hacks get longer than the intended CSS code for the layout itself. Long live the table layout!

Ben said...

Ron I see you giving credit to CSS-P that you should not. SEO, I always use tables, and a regular client of mine is in fact a SEO company, he tells me that scanning pages are done only if certain criterias are absent. Looks like xml is getting into the SEO business. if you make a XML sitemap apparently google will pick it up and use it. Also myself I use the description meta tag, and I spent time coming out with a good description, when I type Ben Bigras in google I'm first in the results, thats not my point yet, my point is everybody get no more that 2 lines, and my 2 lines say exacly what I want it to say.... thats my point... so giving credit to CSS-P related to CSS-P is absolute B.S.

anybody wanting to restore common sence in the web world can google me and you'll see my approach on this css-p nonsence.
CSS... is awsome....

CSS-P... well I guess the world is coming to an end.

Ben said...

I made a boo boo in my previous post, vey sorry about this...

where it says: "so giving credit to CSS-P related to CSS-P is absolute B.S." should read "so giving credit to CSS-P related to SEO is absolute B.S."

Icon Serpentine said...

it's not a war, it's a bazaar of chickens with their heads cut off.

the concept is simple: know your canvas.

it's not a matter of preference whether to use tables or CSS for layout; the HTML spec is very clear about the use of tables. the CSS spec is very clear on its capabilities. the smarter among us are all intensely aware of how each browser will behave. therefore if you use tables for layout, you are very plainly doing it wrong. there's nothing to debate there.

"Facts do not cease to exist simply because they are ignored" -- Aldous Huxley.

know the technical underpinnings of your medium and design with the tools you have available.

an analogy:

anyone can hack their way through an oil painting and get a half-way decent result in the end.

the only difference between a hack and a painter is that a painter understands the tools before they use them.

the real problem in the web design cottage industry is that there are hacks who act like painters and sales guys selling snake oil. the client just wants a web page and doesn't care how its made, the sales guy just wants to sell them a web page and doesn't care how its made; and then goes about it all wrong. the sales guy hires a graphic designer to design a page and hands it to a web developer who gets told to, "just code it."

where was the only person with any technical knowledge of the medium involved in the design process? how does the graphic designer know that their design is pushing the limits too hard or even flawed from the outset? they don't.

since nobody cares, as long as it looks good enough it'll get shipped out.

that's the real problem. that's why i don't do web pages anymore and have gone back to programming. it may not be quite as pure of an engineering profession as an industrial engineer or architect; but at least I don't meet as many people who think they can walk into Toyota with a sketch of a car and tell them to, "just build it."

Mike said...

I couldn't agree more with the author, Check out this link. even Apple agree that the best way to set a layout is using tables.

Kevin said...

As a newcomer to the whole CSS world but a developer with 20 yrs experience, I think the pro-CSS types are applying arguments suited to mainly worldwide e-commerce sites – i.e. a very, very small percentage of the Web sites being built. Most web work involves intranet sites, local web sites, targeted community sites, etc.

To whit, SEO is irrelevant to a great many sites and vision-impaired accessibility is RARELY a compelling req't. It's a gross exaggeration to say there is a litigation risk in developing web pages that are inaccessible to the blind.

Furthermore, let's not forget that somebody is actually paying for these sites to come online and waiting for the work to get done. Most businesses and users won't cry if the office admin can bring up a WYSIWYG editor (yes, I said it, WYSIWYG editor) once in a while and make a tweak to a page.

That said, let the Amazons and Wal-Marts of the world develop, implement and enforce beautiful standards. Let high-flying Web contractors swim in the fees that their specialization commands. Let the academics pontificate about a world of divs and semantics. Blah, blah, blah.

The rest of us have some work that actually NEEDS TO GET DONE.

{CODE} M0nk3y said...

You guys bagging css have no understanding of what it does or how to use it properly. It is easier and quicker to define layouts with css and it is also much much much easier to maintain. Css helps you avoid TAG soup and keeps you html DRY.

This article makes me angry along with the comments of people agreeing. I have tried to unsubscribe many many times yet i am still receiving email updates.

Ron said...

> You guys bagging css have no understanding of what it does or how to use it properly.

First, no one is "bagging" CSS. And second...

> I have tried to unsubscribe many many times yet i am still receiving email updates.

...do you have any idea how hard it is to take your technical opinions seriously if you can't even figure out how to unsubscribe from a Blogger comment feed? Disparaging people for things they haven't done is bad enough, but trumpeting your own ignorance in virtually the same breath is just pathetic.

krib said...

I agree about your CSS vs Tables thoughts and I think tables are better too. But also I think that your example of C++ is totally wrong. People do not use C++ because they like suffering, they use it because it is best for particular problem to solve. Also, many people, including me, are programming faster and easier in C++ than they do in Java or .NET. Actually proposing tables against CSS is closer to proposing C++ (pure and simple) over .NET or Java (which have millions of classes which show many problems when combined) then other way around.

Shamrock said...

My general rule of thumb is: tables for tabular data. However, CSS in its current incarnation is SERIOUSLY flawed. (It reminds of the college football BCS.) And the CSS apologists who will not admit to such are living in a box. Their over-reaction is telling.



While I do not agree entirely with every technical point you made, I say touche! to the wisdom of balancing societal effort and results. It's a gestalt; thus apparently some of your responders do not get it.



HTML tables democratized development in the Wild West days of the web. Every kid on the block was a "developer" ;) However the bumbling efforts of the CSS Standards Lords have all but killed that, essentially making young Joe Shmoe once again dependent on corporate America.



Blaming inadaquate browser support is a cop out. Yes, Browsers are inadaquate. However development (and especially the attempted implementation of global standards) must deal with the reality of the marketplace. "Shoulds" are irrelevant. Life is messy.



And by the way, unlike purists (or are they just "yes men"?) who revel in waxing poetic about theory, FOR PROFIT BUSINESSES (like Google, Freedom Scientific, etc) respond to the REAL marketplace. I guarantee if people are using TWO BY FOURS AND RUSTY NAILS to render their data, businesses will adapt.



I use CSS because I LIKE IT, not because of moral posing and fear mongering on the part of the CSS Lobby.



Thank you for kicking up some welcome dust. Dust is good.

bboyneko said...

As for accessibility for the blind, tables in no way shape or form interfere with blind people using the internet as long as they are used correctly (TH only for data table headers, SUMMARY tags etc). I have been developing for Section 508 compliance for many years, and know this for a fact. The whole 'CSS makes pages more accessible' is pure bunk.

Steve Teare said...

I am a like minded creature. But what will blow you away is I not only use Tables on a regular basis but I use HTML Frames, too. That is really counterculture. It's like NOT having a tattoo or body piercing. It's so uncool --it's not even geek. There is no club for people like us.

Visit my site: http://www.SteveTeare.com/

Or for even more odd philosophy go to:

http://ultraspeed2.blogspot.com/

Anonymous said...

First off, regarding SEO, I've been running web pages running ancient HTML for the last 12 years, and getting top of google responses to my searches (maybe it has something to do with running their ads, and in TABLES no less) and the domain seems to make more of a difference than whether or not my sites are pure CSS, so that presumption seems to be blatantly false.

The websites I have laid out in CSS have been chores to say the least. I'm glad to be done with flash, a powerful but somewhat illogical program, and there are great uses with CSS for mouseovers, and styling across multiple pages, and I like transparent pngs, but 48 hours ago I resolved to update a multi-page links portal site to CSS, and I am done trying to center 3 and five column layouts with links and/or images and/or ads enclosed, and get them positioned correctly.

Call me unskilled, idiotic, etc etc. Fact is, most of you engineering geniusses who created this layout atrocity couldn't illustrate to save your life. You have created guaranteed employment for yourselves however, I will grant you that.

When something as asinine as centering becomes such a chore and so thoroughly inconsistent and I have to clear:left and then float:left to place a footer after a columnar content main, and it still wont move, sorry, I'm done.

I'm no jscript writer, but I can retool it. I've delved into PHP, and SQL, and AJAX, and Jquery, but CSS layout has me stumped, and the only solution I usually see is people sneaking tables in here and there or shoving my work into someone else's convoluted template, and I think I'm gonna stick to the former.

The tables are in there for a grid, since CSS just doesnt seem to care that I get a centered, multi-column grid with ads on the sides and top and a footer I dont have to re-center. Try placing a column of 7 mouseover buttons on both sides of two centered animated gifs or video loops and then throwing headers and footers above and below that centerpiece, and keep it all centered. CSS sucks for layout, period.

Unknown said...

Not one of you, whom I've had the patience to read, is tackling the specific topic.
The functionality of CSS styled tables vs CSS as layout.

Regardless of SEO, an entirely different topic even if relevant, he is giving sound and tested advice on page layout and the gotchas involved.
Those 'breaks' when overflowing an element are real. The work involved to fix them are real. This phenomenon proving the unwanted connection between markup and styling is inherently true (hence the aforementioned word 'proving').

This rant against the author reeks of blaming the innocent because of a deeper injustice. Like pointing a gun at a store for offering for voluntary trade an oversized cup of soda - why? Because Peter is forced to pay for Paul's health.

What does the legal injustice of forced accessibility have to do with the truth written here? No wonder he got so much hate mail. This is politics and he is RIGHT.

Our destiny should be in our hands said...

Why would a blind person care how a site is laid out?