1. CSS has no concept of what a real layout specification is. Geometric offsets are often unnecessarily hardcoded.
When people hype CSS over the html Table, I think they do not understand the functionality that the Table brings to the table. I think they do not understand the history of hard-coded coordinates versus automatic layouts. It is called ‘dynamic resizability’. You can set the minimum and maximum distance in a table and have the table resize based on the size of its container.
Not so CSS, which hearkens back to the bad old days under MSFT Windows.
So often, when the viewer of a page of CSS resizes their font, so that they can read the text, it overlaps itself and nearby text and images. How quaint.
2. CSS mixes layout and appearance, and soon in CSS 3, behavior.
You can see where this is leading… we will need an object-oriented CSS, that supports packages so that the CSS ‘programmer’ will be able to manage the complexities.
So what we will have at the end of the road, after we get through this adolescent infatuation with toys that mimic the good old days of Windows 95 et. al, is:
3. It is more difficult for search engines to determine what is being done to the content which they must know in order to see what is of importance on the page.
No, the emphasis tags really do not take the place of this analysis, because ‘really’ is really not what this post is all about.
4. CSS is overly powerful
For example: font-size is multiplicative (if another element and its child both have font size 8em, then the child will be 64em).
The law of against designing a language that has numerous unintended consequences has yet again been violated, very much in the spirit of C++. You cannot just look at a piece of code and know what it does without CLOSELY examining the N^N-1 possible consequences of all other assignments in this and any included files.
Similarly for the overly broad assignment such as:
which assigns ‘a’ some style which has every chance of having been assigned at least one other style somewhere else in the CSS hierarchy. Maybe. Which came first? in which file? And how did that precedence of CSS assignments go again?
So in conclusion,
CSS has the mishappen non-structure of assembly language [although I like the limited instruction set of asm languages, so this is an insult to them], the syntactically over-powering ‘why use a hammer when an atom bomb will do’ approach of C++, with the spaghetti-inducing compression of responsibilities and nostalgic lack of runtime layout tools of pre-Java MSFT Windows.
…aka CSS sucks.
[Oh, and it would be nice to see a syntax/completeness checker tool. But I bet that would just add another layer of incompatible implementation to deal with on top of all the others] [Update: FireBug does help some, tracing all the inheritance trees for you. Does no one else see how wacko this is? Yet another specification that tries to be too many things].