Ten reasons why CSS sucks

CSS is certainly an improvement on plain old HTML but it’s limitations are staggering and the lack of industry support will continue to hold back designers for many years to come unless we begin to build and design something better.

  1. For all that CSS has been able to do it’s a technological failure. CSS just doesn’t work as expected. How can I say it’s a failure when millions of sites use it? CSS can be used to style basic text attributes but browsers aren’t consistent in how they use this technology. Even though there is a “standard” and some browsers partially adhere to the standard to truly be a useful standard you need two things: Predictability and Consistency. CSS has neither. Any designer who has tried to create a large and complex site using CSS will tell you that all popular browsers interpret the standard differently.
  2. CSS is ‘markup centric’ not ‘design centric.’ I have this idea that designers should spend more time designing great looking sites and less time fiddling around with markup tags and browser compatibility. When I say ‘markup centric’ I mean that every CSS design tool forces users to go into source code mode to create an attractive modern site. Many designers take pride in hand coding CSS. Tools for designers should be design centric. PDF/postscript is a good example of a design centric markup , (unfortunately not very suitable for the web.) Designers don’t argue about how to create semantically correct postscript tags they just create great designs using great design tools. CSS sucks because it forces designers to think about how to make it work technically rather than how to make it work from a design perspective.
  3. Why on earth do we think that cascading is a useful feature? The way that styles cascade from one level of layout to a deeper layout makes it difficult to figure out why a particular item is styled in a certain way. By contrast non-cascading style sheets would be equally powerful and more predictable. The cascading makes it harder to interpret the page for both the designer as well as the web-browser. In fact the complexities in cascading is one of the reasons why so many browsers screw up the standard. In theory cascading could save bandwidth but in practice it creates bloated documents to get around the cascading issues.
  4. The box-model is too simplistic. The high level idea of CSS is that you can create attractive pages using margin, border, padding and content attributes. While this is a nice theory it’s primitive in it’s understanding of both layout problems and design. Highly developed design tools have layout engines that offer multiple layouts, non-rectangular margins, proportional layouts, dock-able layouts, table layouts, column layouts, etc. etc. It’ll be years before these features make it to CSS and many more before browsers implement them with any consistency. If browsers keep spending so much time on CSS they’ll have a well polished turd. Tools like Aldus Page Maker had better design tools, font tools and layout capabilities 10 years ago. This is because good design tools start with the design, not the markup.
  5. When writing software you learn what works and what doesn’t. You get new and better ideas and you throw away the old ones. This process of starting fresh is absent from the current CSS way of thinking. Each version of CSS builds on the previous one without acknowledging any fundamental flaws. CSS and its HTML sibling are the ultimate designs by committee. Any enhancements to CSS/HTML are piled on top of the old standards. This makes it progressively harder to create powerful, compatible and consistent browsers. This also makes it harder for designers to create sites that target the new platform because they are constantly trying to satisfy the compatibility with older browsers. Version compatibility has to be all or nothing. If you support V3 it has to be 100% supported and tested. Supporting some of the features actually makes things worse.
  6. There shouldn’t be multiple right answers for a visual design. The way CSS works there can be many ways to do the same thing. In fact there seem to be endless debates about the proper way to hack together trivial things like rounded corners. Rounded Corners? I mean really! Again I refer you to Aldus and even MS Word circa 1997. These features are not that hard to develop but getting them to work in a “standard way” seems to be all but impossible.
  7. CSS captures styles not semantics or design intention. A design intention would be something like: “I want to balance these two columns” or perhaps “This text should line up with the logo image in the first column.” When designers do things like this:
      #content{position:relative;top:32px;left:20%;width:40%;}

    They are capturing the style specifics not the design intention. Why 32 pixels? Why 40%? Perhaps the logo is 32px tall? Perhaps the other column is 60% wide? When the logo changes size or placement how will you know what styles to touch? There is a basic concept called parametric design that can be used to specify the parameters of the design. This concept helps embody the design intention as a set of rules that can then be preserved as the design changes. Even a very simple parametric design allows you to preserve design intention rather then hard coding sizes and dimensions.

  8. Design should be declarative not interpreted. Again CSS has to process a large number of rules before it can figure out where things are supposed to go. After these rules are interpreted this data is thrown out and each and every browser that opens up the web-page has to re-interpret the data. This is incredibly inefficient. First of it makes web-pages load very slowly. Even when you’re on a fast connection the browser can’t figure out where to place objects until the entire web-page has finished loading. Secondly this interpretation is very prone to errors. A declarative design isn’t open to as much interpretation allowing it both render quickly and consistently.
  9. CSS is a pain to work with. Take a look at some of the designs over at CSSZenGarden. The designs are both attractive and sophisticated. A good designer could take these designs and mock up similar designs in PhotoShop or Illustrator in a matter of hours but take the same designs and ask for it in CSS and it may take a couple days. Each time you make an edit to your CSS you have to refresh your browser to see what it’s actually going to look like. Then after you get one browser working you need to double back and get the other browsers working.
  10. If you can’t get consistency across browsers then you can’t rely on CSS to accurately and properly design your site. If you can’t get the site to look exactly the way you want on every single browser then how can you claim that CSS is a good design tool or even a success? The fact that there is no alternative to create attractive websites doesn’t make CSS a good tool. There are two ways to solve the problem. The first is to continue to hammer on standards and CSS asking for a better solution. This has been happening for the last 10 years and it just doesn’t work. The alternative is to realize that CSS is flawed in it’s intrinsic design and begin to ask the questions of how could you do it better?

——–

Archived comments from the original posting

39 Archived Comments:


Chris Moritz said…
Well put. Someone had to say it.Not that I’d recommend heading back to table-land…

*sigh

September 25, 2006


Jordi S. said…
Greg, I think the problem is not exactly CSS but the lack of good CSS tools; advanced CSS editors should manage cascading, consistency, etc.Yes, editing CSS “by hand” is really painful, but no more than editing an image pixel-by-pixel; that is what tools are created for.

And about this:

“If you can’t get the site to look exactly the way you want on every single browser then how can you claim that CSS is a good design tool or even a success?”

Ups, “to look exactly the way you want”? That is not what a web site is for. What about usability and accesibility? Users should be able to change font size; and they may have big or little screens; or … If you want control what users exactly see, give them a paper-sheet.

September 26, 2006


Greg Raiz said…
Jordi S. – The lack of a tool is certainly a problem but Adobe/Macromedia is quite capable of creating high-end design tools. The reason that HTML/CSS is a disaster isn’t because Dreamweaver isn’t a good tool, it’s because it’s trying to design a tool around a technology rather then creating a great design tool then figuring out how to express that freedom using technology. The formula is backwards, it’s markup centric and that’s the flaw.The web is for creating designs that look exactly as designers want. Don’t believe me? Just take a look at any high-end site like espn, msn, yahoo, abc, nbc, microsoft, apple, dell, amazon, etc, etc. All these sites are all designed down to the pixel and they all care about usability and accessibility. It’s not a trade-off you can have good design, accessibility and usability.
The problem is that it’s a an enormous pain with css.

I didn’t touch on accessibility but let’s call it a potential #11. People abuse css by turning lists into hover menus, fixing font-sizes so they don’t scale when the font increases and all sorts of other tricks that are totally not-accessible.

September 26, 2006


Jordi S. said…
Greg;
well, I use Dreamweaver and let me tell that it’s not ‘great’ editing CSS. It’s probably better than any other editor, but there’s a lot of things that could be improved (although it’s a hard hard work).Sorry, I don’t exactly know what you mean by ‘high-end site’ (poor English, you see), but let’s take the model-for-ecommerce one: Amazon.

In Amazon users can change font size, the design ‘flows’ depending on screen-size, … Well, if you mean that designers want exactly “an usable design”, then I agree with you :) But Amazon is not controlling design to the pixel (and they are doing right!).

Yes, you’re right: CSS may be wrong used against usability. But… it’s powerful, so it’s dangerous (as nuclear power is).

So I won’t say CSS sucks… No more than some tools suck, or some designers suck. CSS simply is not perfect :)

September 26, 2006


Ross Johnson said…
“The web is for creating designs that look exactly as designers want. Don’t believe me? Just take a look at any high-end site like espn, msn, yahoo, abc, nbc, microsoft, apple, dell, amazon, etc, etc. All these sites are all designed down to the pixel and they all care about usability and accessibility.”Most of those sites are fluid and/or scalable sites. When you start designing sites that look differently dependant on browser/text size you are far far from pixel perfect design.

Every time I read posts such as this there always seems to be more of a “frusteration” than a good understanding and criticizm.

Your proposal to design a tool around the technology is a bit unrealistic. Shall we just convince all browser makers (including the ones that can’t even get CSS right) to just adopt a new technology?

Oh but wait, there is flash – and flash has it’s share of problems as well.

Once you get the hang of CSS it all makes sense and it is not frusterating anymore.

September 26, 2006


Mike G said…
This is a very, very good article. CSS is a disaster.
September 26, 2006


Montoya said…
Sorry Greg, but your post only shows how little you understand about the technology and the implementation of it, as well as the nature of the web and information exchange. Your “design centric” view of web design is limiting you and preventing you from adapting to a technology that offers improvements, not setbacks.It’s easy to argue about problems in any language, be it programming, markup, or a description language like CSS. Your post sounds very similar to an inexperienced programmer having trouble with the intricacies of the C language or someone who has never dealt with OOP before and encounter Java for the first time. If you had the experience, you wouldn’t blame the tool, but rather you would recognize that all of your complaints are the fault of both the implementation and simply the young age of the technology.

As a junior educator contributing to a college course with over 100 students learning CSS based design (as well as PHP programming), I can assure you that CSS is neither hard nor painful; if 100 students can learn it every year, and produce highly flexible, lightweight, and attractive designs with it, then maybe you just need to go back to school (and I say that without intending to offend you).

September 26, 2006


Greg Raiz said…
Montoya – Sorry but I do understand CSS, Java, OOP, C++, PHP and other languages. I don’t consider myself a CSS guru far from it but I do know the technology well enough to know it’s flaws and limitations. I’m also pretty familiar with it’s implementation having worked at Microsoft and having worked on a project for Firefox.I know that it is possible to create great looking designs in CSS. That’s not the point. The point is that creating these great looking CSS sites take significantly longer in CSS then in most other design tools even if you are a Guru.

I can design something for print production in roughly 1/10th the time it takes to design something for the web using CSS.

The fact that you are blaming me for not understanding is just funny. Your own portfolio proves my point:

html { font-size:100.01%; }

As a designer you shouldn’t have to fight the CSS and the browser to get what you want.

September 26, 2006


Montoya said…
greg: If someone came to you with a rant about C and all the intricacies of it, and posed those as problems in C and complained that something new and better is needed, you probably wouldn’t waste much time with them, but simply explain that if they understood the language better they would understand the how and why for everything.I never said you were not an expert in everything *other* than CSS, but my point still stands: you don’t know much about CSS. For people who learn it (and I can tell you, it’s not hard to learn when you have a good teacher), the development time is significantly less than what could ever be achieved with tools like Dreamweaver or Frontpage. Time spent fixing bugs, on the other hand, is not the fault of the technology but the fault of a certain browser which is 8 years old. Anyone in the software world knows that 8 year old software is very difficult to deal with, and blaming a new technology for problems with outdated software is putting the blame in the wrong place. An example like:

html { font-size:100.01%; }

wouldn’t be necessary if it wasn’t for IE 6 being so common, but who do you blame that on? The W3C CSS group, or Microsoft? Mind you, it’s a bug in Microsoft’s software. Maybe that will help you shift the blame in the right direction.

You said: “I can design something for print production in roughly 1/10th the time it takes to design something for the web using CSS.” Will your print design scale to the user’s window size? Will it allow the information to be used by multiple user agents (machines as well as humans, including humans who access the web in alternative ways rather than just visually)? Will it offer multiple styles? Will it be easy to modify in the future?

Or are we comparing apples and oranges?

The truth here is you don’t understand the web. You understand print design, and client side software, and even browsers, but that doesn’t give you any knowledge of how the web works. I still challenge you to really learn the medium, the technology, the research and the philosophy behind modern web design practices and why things work the way they do. If you did, you would understand why “problems” like cascading are actually features, and why this new way of looking at websites is a step ahead, not behind. Until then, you are entitled to your opinions, but you have no credibility to back them up.

September 26, 2006


Anonymous said…
I 100% do not agree with you.
September 26, 2006


Greg Raiz said…
To those that don’t agree…I don’t mind that you don’t agree. The fact that there seems to be a range of opinions means I touched on something that is perhaps partly true. I doubt that I’m 100% wrong but I’m fairly sure I’m at least partially right ;)

Counter all 10 of my points if you want. Explain how a markup centric
language is better for design. Explain why consistency is not a problem. Explain why cascading is a good thing. Explain how things like CSS hover menus are a good for accessibility.

Go ahead and convince me. I’ll try to keep an open mind.

September 26, 2006


Scott said…
Nice job stirring the pot Greg. Hope it gets you some business. I’ve taken the time to
rebut your ten points on my own blog (not trying to spam; I felt it would get a bit long in the tooth to do it in your comments section).Mr. Montoya is corrent. You have a limited understanding of the medium. (Oh, and his website kicks ass.)

September 27, 2006


Greg Raiz said…
Scott, good comeback.I didn’t write it to be provocative. I think CSS limits what designers can do. I see these limitations everyday. There are many designs that are difficult to do in CSS but there are others that I have found impossible.

I believe CSS limits the creativity of designers by imposing technological constraints on visual designs. This may be because I come from a print background but that doesn’t change the fact that I still feel limited.

While CSS can be incrementally improved I personally think it’s important to think about how to make large improvements rather then incremental ones.

September 27, 2006


Michelle said…
These are very valid points. I’ve actually seen people praise a website redesign that was nothing more than a small menu, background gradient and an input box on the page. I think there is an “elitist” attitude when it comes to table-less CSS sites that is getting in the way of advancing this technology. If you speak up about the problems with CSS and how you have to learn all these hacks and tricks to get a somewhat usable site, you get the typical answer that it will get easier in time. How long do we have to keep waiting? The reality is that most people don’t have time or patience for complex workarounds. Designers and developers should demand better.
September 28, 2006


Anonymous said…
CSS is merely a means to an end, and the best one for the way the WWW is supposed to be at that.CSS has nothing to do with design whatsoever IMO, and thus shouldn’t be judged by design.

Also, it is very easy to make your website look the same in all browsers.

September 28, 2006


Brett Mitchell said…
And your alternative? You’d prefer to use tables?CSS is a standard, which all browsers (with the exception of IE) try to adhere to. As they get closer to meeting that standard (like Opera9, the new Firefox 3 (Gran Paradiso), the ability for code to be handled identically across platforms and browsers is getting better.

Of course, IE is and always will be the exception. While it is consistantly behind the other major browsers, support is slowly improving.

The point of the internet has evolved to be a source of information and entertainment that is widely available to everyone, everywhere – be it on a cell phone, by a visually impaired person with a braille keyboard, or your average citizen.

The internet isn’t a newspaper. You don’t have absolute control over what your viewers see. You seem to miss the point that the fact your viewers ultimately have control is the benefit of the internet – it’s customizable by individuals to meet their needs. If they need the font size larger, if they need to lower or raise the contrast, or they can’t see and they can have a browser speak to them.

CSS isn’t the be-all and end-all of design – you’re correct. If you want a design that aligns down to the pixel and has the perfect colours on every monitor/browser/platform, HTML is not your best bet to start with, and NO interactive language with the flexability of HTML could do that anyway.

HTML and CSS are easy to learn, cheap on bandwidth, viewable in every browser made in the last what, 6 years, including PDAs/cellphones…

What is your alternative?

September 29, 2006


Phillip Ryals said…
Greg, as I read your thoughtful list, I came to the same conclusion that Montoya has voiced… that you are essentially a print designer who might not fully understand the web world.I absolutely agree that web design using CSS is horribly lacking from a design perspective, but just because it doesn’t give a designer a WYSIWYG interface doesn’t mean it sucks.

You push the idea that ‘something better’ should be created, either by fixing CSS or replacing it outright. I challenge you… how would YOU create this fictional superior method of describing a complicated design using RAW TEXT?

You see, from a designer /and/ programmer’s perpective, CSS is a very good tradeoff. No, I can’t draw a few boxes, apply some drop-shadows, scale some fonts, and see the results in a web browser. That’s life. Vector graphics for the web has been tried before in many many ways (anyone remember the Xcalibur BBS?) but it’s never taken off because it still requires more processing power than just rendering raw text.

The point is, you’re not going to get an easy-to-use method of creating complex designs. They’re complex, and so the method for creating them is complex. While CSS rendering isn’t predictable across all browsers (NOT the fault of CSS), it does indeed make many things possible that would otherwise never work.

September 29, 2006


Dean Hall said…
Clearly CSS is not perfect. Greg touched on some good points like cross-browser compatibility. I certainly agree that CSS does not offer me and my clients a complete solution. Frankly, I don’t give a damn if it helps anyone else or not – I’m about getting my projects completed.I still use CSS, but I note the fact that it doesn’t work the way I need it too. Ie. When I design a site using CSS, I have no assurance it will look and perform the same across browsers and technologies. I t goes some way to this though, and I still use it. But I still use tables for some projects too.

My rule of thumb is “Consistency, Consistency, Consistency” when it comes to a GUI. Neither CSS or anything else gives me an assurance of that. So I do what all developers do and I do whatever works. If CSS works for a project, then I use it. If it doesn’t look like it will, I use tables.

I thought this was a good article, with some valid points.

October 04, 2006


Anonymous said…
CSS’s strongest argument is only its swarm of fanboys. At least with tables, when I resized my browser window, it didn’t break a site’s design or make it completely unreadable. It kept the content locked in an accessible place. It says a lot about CSS when Photoshop’s table slice-generater, though it creates nightmarish html – it can autogenerate readable code and looks the same on every browser. If CSS can’t even claim what the joke “Adobe Photoshop’s HTML” could accomplish, it’s simply pathetic.
October 17, 2006


Anonymous said…
Totally agree with what Montoya is saying, nothing to add.Greg I just want to ask you what if I told you that Quark will no longer be supporting style sheets? Would you be ok with that? Even if you were working on a 120 page document? I’d be pissed, just like I would be pissed if they took away CSS.

October 20, 2006


Anonymous said…
All these people repeating that Greg’s a “print designer who doesn’t understand CSS” just don’t get it.They have adopted themselves to the css mentality, instead of adapting the technology to design needs.

Most miss the point altogether, like:

Greg I just want to ask you what if I told you that Quark will no longer be supporting style sheets? Would you be ok with that? Even if you were working on a 120 page document? I’d be pissed, just like I would be pissed if they took away CSS.

This is irrelevant. Greg has not talked against the general idea of stylesheets, he talked against the CSS concept and implementation in particular. His points are specific and razor sharp, and could be used in designing a BETTER stylesheet language for the web. Like this point:

CSS captures styles not semantics or design intention. A design intention would be something like: “I want to balance these two columns” or perhaps “This text should line up with the logo image in the first column.” When designers do things like this:
#content{position:relative;top:32px;left:20%;width:40%;}They are capturing the style specifics not the design intention. Why 32 pixels? Why 40%? Perhaps the logo is 32px tall? Perhaps the other column is 60% wide? When the logo changes size or placement how will you know what styles to touch? There is a basic concept called parametric design that can be used to specify the parameters of the design.

Right on!

And since a lot of web pages nowadays are “web apps”, are you “css people” familiar with actual programming for GUIs? If you know GTK, QT, Java or what have you, they all have MULTIPLE layout models. CSS only has one, and a cripled one at that, the box model. A single model cannot solve all needs. (btw, almost all languages offer a table or grid layout manager, without sacrificing “fluidity”).

Some points:

a) The concept of styles is correct. It’s CSS that has it all wrong.

b) Design should be intention based and parametric. Hell, CSS does not even have parameters! If I want 20 design elements in my stylesheet to be 200px (or 20% or anything), I have to repeat myself 20 times over. When I want to change it to 200px it’s 20x times the work actually needed).

c) A lot of stuff should have been built in, in CSS and HTML and easier. Rounded corners? Blow me, just have something like:

#box {curve-top-right: 20px }

or have a way to define such effects in code blocks and share them.

etc…

October 21, 2006


Anonymous said…
I partially agree. But at the same time, a number of the problems I have personally faced with CSS is browser compatibility. But I really can’t blame CSS for this; it is the browser’s fault. If an alternative to CSS came out, the browsers are still capable of fudging it up and making it difficult for the designer.I would say CSS could be better, but I would not say it sucks entirely. For every language, there are flaws and limitations and drawbacks. I can’t really appreciate the suckiness of CSS, or the lack thereof, until there are more alternatives to choose from.

October 21, 2006


Nick Presta said…
c) A lot of stuff should have been built in, in CSS and HTML and easier. Rounded corners? Blow me, just have something like:#box {curve-top-right: 20px }

Oh, you mean like CSS3′s border radius property?

http://www.w3.org/TR/2002/WD-css3-border-20021107/#the-border-radius

October 30, 2006


Anders said…
“b) Design should be intention based and parametric. Hell, CSS does not even have parameters! If I want 20 design elements in my stylesheet to be 200px (or 20% or anything), I have to repeat myself 20 times over. When I want to change it to 200px it’s 20x times the work actually needed).”Or you can learn what cascading in CCS means and how to implement it.

October 30, 2006


Rich C said…
It says a lot about CSS when Photoshop’s table slice-generater, though it creates nightmarish html – it can autogenerate readable code and looks the same on every browser. If CSS can’t even claim what the joke “Adobe Photoshop’s HTML” could accomplish, it’s simply pathetic.Photoshop’s supported CSS slice-generation for a while now.

Web sites I build using CSS positioning for images are a lot more readable and maintainable than those I used to make using table-based layouts.

October 30, 2006


Greg Raiz said…
To the previous comment. even if you know CSS this still doesn’t address the lack of parameters. You can work around some of this with cascading classes but it’s not a great solution.a declarative approach would have:
$logoh:120px;
$smallMargin:3px;
$largeMargin;10px;
.logo {height:logoh;}
.titletext {top:logoh+smallmargin;}

I’m using the $ show how you could declare a parameter/variable. This is still declarative so it’s not an ideal solution but at least it demonstrates how parameters could allow you to do things that are difficult or impossible to do via traditional cascading.

October 30, 2006


Anonymous said…
@Anders said…“b) Design should be intention based and parametric. Hell, CSS does not even have parameters! If I want 20 design elements in my stylesheet to be 200px (or 20% or anything), I have to repeat myself 20 times over. When I want to change it to 200px it’s 20x times the work actually needed).”

Or you can learn what cascading in CCS means and how to implement it.

Erm, cascading != parametric.

In the case I describe, for example, who told you that the 200px always refers to the same attribute (like width?). It could 200px of width for this element, 200px padding for the other, et al, used for implementing a consistent grid.

Or I could want a yellow background-color in one item, and a yellow foreground in some text or a yellow border in another. Cascading does not offer a way to define all these cases depending on a single color definition.


foljs

October 30, 2006


Daron said…
Well, Greg, in truth, it’s the entire technology of the web that sucks.Your comparison to Postscript and the evolution of Page layout programs is spot on.

HTML, CSS, Javascript and all their evil offshoots are a result of:

* an inadequate and limited initial definition of the “web page” problem domain

* a crude, fatally flawed but simple to use initial technology (HTML)

* which lead to designers and programmers crufting up a mind boggling array of workarounds to fill the gaps (Tables and Spacer gifs)

* which spurred a belated attempt to redefine the underlying technologies by rigid academic edict mainly by non-designers (Cascading Style Sheets, XHTML, Widespread Deprecation)

* which was anyway largely undermined by the piecemeal and incompetent implementation of the new technologies in browsers and development tools (all of them)

* which is now all welded into place by the network effect, endless inert committees and monopolistic self interest. (Welcome to the Great Leap Backwards)

We are stuck with a kludge built on a kludge until we have a disruptive technology.

And Flash wasn’t it.

October 30, 2006


bjk2007 said…
HAHA!!! Disable CSS and take a look at this page! If this site doesn’t show how great CSS is, then what does? All you see is a perfectly fallen apart page, just like you should see with a CSS site. Just take a look at the source.
December 06, 2006


Greg Raiz said…
bjk2007 – Just because you ‘can’ make a site work with CSS doesn’t make it a good tool. The CSS for this blog came straight from Google’s blogger tool (2006). It’s full of all sorts of silly things that show just how hacked it is,Yuck! Yes there are certain things that CSS can do well, and it’s certainly better then plain old HTML of 1996. But as a generalization, it still sucks.

December 06, 2006


bjk2007 said…
First off, I’m sorry if my last comment was a little offensive. Tables vs. CSS is a controversial web design topic. I came across this blog entry following the post of a member of a web design forum. Let’s just say he can act really stupid sometimes and I came here pretty upset after being personally insulted by him.
I did take the time to read it again after I had calmed down. I would have to say that while I disagree with you on several points, I do agree that CSS hasn’t done as well as it should have. Why? Simply browser support (IE). If we can’t get them to support CSS, how can we ever assume that they’ll support the newer and better theoretical CSS replacement language?
I guess the rest of my disagreements with you lie in a coder/designer mentality. You seem to be more of a designer while I’m actually a person whose strengths lie in coding, so we’re bound to disagree on how things should work.
December 07, 2006


Anonymous said…
You all must be joking. CSS is without a doubt the future of web design. WHY because css is exactly what xhtml needs to work and xhtml is going to be the future. WHY because it is (finally) a consistent DOM markup that will be able to be used by many varying systems.
IN PLAIN ENGLISH:
Not Microsoft, Netscape, Mac whatever can stop a standard being created, fact is those “browser companies” don’t make websites or web application (well they do make some) and developers NEED a standard so they aren’t writting 12 different lines to support 12 different venues. With these 2 standards (CSS2 and XHTML) we will have easier to maitain websites, portable applications, accessibility features for the blind/hearing impaired and about a million other applications.
SO TO ANY NEWBIE DO NOT LISTEN AND MAKE SURE TO USE CSS2 AND XHTML IN ALL FUTURE PROJECTS
December 12, 2006


Anonymous said…
The CSS Design When it comes to a fulfledged dynamic site it has more cross browser conflicts which are not easy to fix.

December 18, 2006


josh said…
AMEN BROTHER.
CSS is terrible. I’ve spent countless hours learning it and no matter what, the results are different from browser-to-browser.I can’t stand learning it, but at the same time I love the way some of these Css-driven sites are put together. I think to myself “I want that!” But it never happens. CSS is driving me insane. It always will drive me insane. Has potential, but it sucks.

December 22, 2006


John Nagle said…
You’re absolutely right.With Dreamweaver 3 and tables, it wasn’t necessary to look at HTML to lay out a page. With Dreamweaver 8 and CSS, the page designer must understand CSS, HTML, and probably Javascript. That’s was a big step backwards.The CSS system is just too programmer-oriented. And I’m a programmer. (Programmer as in MSCS from Stanford, the Nagle algorithm in TCP, inventor of ragdoll technology, real-time robot vehicle control, not programmer as in “writes some Perl”. And my first web site went up in 1995.) It’s not that CSS is hard; it’s that CSS is bad.

CSS is, simply, a badly designed layout system. Even the rather simple system in Tk which lays out dialog boxes and windows is better. Tk is a nested-box system, but both “pack” (like CSS “float”) and “grid” (like tables) layouts are available in the same system. This is enough to handle most cases. Which “float” and “clear” are not. Page layout is forced to fall back on absolute positioning far too often.

The clever way to do layout would have been with a constraint system. Each box has four edges and four corners, and it would be possible to bind corners and edges to create any desired relationship between boxes. This is something one could express easily in a click and drag graphical tool. Want three columns the same height? Tie their adjacent bottom corners together.
Want to fill the page? Tie the outside corners to a page edge. Ten minutes to explain to an artist. Advanced use would involve priorities on constraints, so if something had to give in “fluid design” as the page size or type size changed, you could pick what gave first. (This could be extended to allow curved boundaries, even splines, but that might be overdoing it.)

The browser would have to have a constraint engine to resolve all the constraints, but there are known solutions to that problem.

Too many people drank the Kool-Aid on CSS. It’s just not that good a technology.

January 07, 2007


frostbyte said…
You missed the biggest problem of all. CSS dogma. We’re now at the point where questioning CSS is no longer politically correct. Just look at the anger in the replies. (Especially Scott’s. Check out his blog, you’d think you just insulted his mother. Warning: Horizontal scrolling)If you question CSS at all, you’re immediately laughed off as just another unskilled newbie who doesn’t understand, or some old timer who can’t get past tables. Even half the people who agree with you felt the need to clarify that they only agree with some points, “please don’t think I’m in the same camp as the anti-CSS crazies”.We’ll never get past CSS because it somehow became dogma and you can’t question the dogma.

January 09, 2007


John Nagle said…
The worst problem with DIV-based layout is that the layout system is too weak. There’s no form of “grid” layout. There’s no way to relate a DIV to anything but its predecessor, its parent, or an absolute position. The system is just too dumb. That’s why people have to stand on their head just to get three columns to work.Tables actually are a better designed layout system. Table layouts allow table cells which span multiple rows and columns. If all tables could do were simple grids of cells, the CSS approach might make sense, but tables are more general than that. And they’re well supported in Dreamweaver.The fundamental limitations of DIV-based layour are obscured by an excessive number of attributes and the occasional use of Javascript when the attributes aren’t enough. But underneath, the fundamental approach is just too weak.

If CSS had a grid capability, it wouldn’t be so bad. But it doesn’t.

January 10, 2007


Anonymous said…
Greg – thanks for this spot-on article. After working the Web for 10 years, and still struggling to get decent CSS layouts that work with php includes, I was beginning to feel that I was getting stupid in my ‘old’ age. In fact, CSS is far less intuitive than our previous nemesis (Tables) and especially difficult when you introduce any “includes’ into CSS design layout. And on this note, Dreamweavers Layer layouts only work when using plain vanilla .html files. Try making absolute layers stick in place if you use includes with Dreamweaver layer layout – a hair pulling exercise that forces one back to Tables very quickly!
January 27, 2007


Anonymous said…
Whether you like it or not BROWSERS and specially IE mandate what we use in the market. Check the logs of your web servers and then disagree with that.Read this http://www.mcsr.olemiss.edu/~mudws/font.htmlI was part of the workgroup for CSS and what we tried to do back then has nothing to do with what people fight about today.

It was about separating format from markup to create data semantics.

Greg you are right on the nail. I wonder how many of these so called “CSS Designers” have the BIG profitable accounts.

Can you make the money with CSS on these sites using CSS, I dare you?
Look at these:

http://www.cosmopolitan.com/

http://www.elle.com/

http://www.nike.com

http://www.adidas.com

http://www.faithhill.com/

http://www.motley.com

http://www.imandd.com/index.html

Go on, make one of these (CNN for example) using CSS no hacks, js, pure w3c css. Publish the markup as a test and let us see that you know your css stuff.

Montoya you are the teacher, or is css only for the graphics blind? Prove Greg wrong, go ahead and make my day.

CSS can not do what the tables and flash can here. Forget semantics, forget standards, come and visit me for a little while in reality land. Bottom line people, hard cold cash it’s what matters.

Montoya get off you high horse and do something about it. Rewrite the standards so is more workable.

Use what works, and if you can separate format from markup with css and if tables have to be used so be it and format them in your css.

216 thoughts on “Ten reasons why CSS sucks”

  1. I agree wholeheartedly with Greg and can’t understand why so many people rush to CSS’s defense. I thought one of the main points of the web was to make publishing accessible to everyone. In CSS we have a difficult, frustrating language that creates a barrier to new users who wish to publish content that looks good by today’s standards.

    You can’t learn how to do CSS well in a few hours the way you could for HTML. It takes tons of trial-and-error learning, because the layout process is about as far from intuitive as it can get.

    Sure, it’s easy for some of you CSS experts to tell everyone else they’re just too stupid to get it, but think back to when you first learned CSS. Did you have that satisfying feeling of seeing a new programming language in action? Or did you spend the first week with CSS frustrated, scratching your head, wondering why neither inline or absolute positioning seemed to work the way the standards said they would?

    I hate having to start with a layout that’s tested in all browsers and then carefully check each time I make a change to make sure all of those browsers still look right. It’s a major pain. Even if I’m programming a functional site with PHP and javascript, I still end up having to spend the majority of my time fighting with CSS. Shouldn’t getting the site to display right be easier than programming it to work?

    • I’m really struggling with whether to learn and use CSS for layout. I’ve been a designer for over 20 years and been using tables for layout for 13 years. Most of the sites I create are for small businesses averaging around 10 – 60 pages. (10-20 is most common.) I really like using CSS for formatting text, lists, positioning, etc. In my opinion, combining table layout with CSS works great. I’ve read the debates. I’m not questioning the benefits of CSS in general. I use it and love it. What I’m trying to figure out is the benefits in using CSS for LAYOUT. Here are my questions…

      CSS Layout Advantages:

      1) Easier Site-Wide Changes – CSS proponents claim site-wide changes are easier with CSS because you change one file and boom, it changes on all pages. I use Dreamweaver Template files. I make a change to the template file and boom, it changes on all pages. What’s the difference?

      2) Faster Load Times Because of Lighter Code – I remember load times being a major issue when I first got started but it doesn’t seem to be the case anymore with so few people on dialup. I can’t tell any discernable speed difference between a table layout and a CSS layout’s load time. (Yes, I like clean code too.) Heavy image use and Flash still seem to be the biggest factors in speed. If the human eye can’t tell any difference, then what’s the point? And server space/bandwidth doesn’t seem to be an issue anymore either. Space on the server for all of my client’s sites is generally 1/16 of capacity.

      3) SEO – From what I can tell, search engines aren’t indexing or ranking CSS layouts higher than table layouts. The algorithms used for ranking most often are content and inbound links. The spiders are highly efficient at discerning code from content. So what difference does it make?

      4) Separation of Style and Content – I guess this one is related #1, ease of updating? This is what Dreamweaver template files do. It separates style from content (editable/un-editable). I don’t know about you, but generally speaking what my clients want most often is to update the content. I don’t understand why it would be easier to update content using CSS more so than tables. (Remember, I DO use CSS for formatting.) If they want to tweak something in the design, again, piece of cake to do. Just change the template file. It’s not hard.

      5) Greater Consistency – If you use template files and CSS, where is there inconsistency?

      Disadvantages to using CSS for layout

      1) Inconsistent Browser Support – Different browsers will render CSS layout differently as a result of browser bugs or lack of support for various CSS features. This is no small drawback!! It’s huge. I fought this very same battle using tables back in the 90s. Different browsers rendered the design differently. I really resented (and it sounds like many of you do too) all the time I had to spend to get a site to look as it was intended for ALL users. I REALLY don’t have any desire to fight that battle again. I know there are workarounds. But again, if I don’t see the overwhelming benefits, I won’t don my armor or sharpen my weapons.

      My questions and concerns are genuine and not an effort to get CSS lovers to defend themselves. If you are designing using CSS for layout, cool! You are a part of an ever growing majority. Personally, if I could instantly convert a design into HTML, I’d do it. I have no great love for code. Right or wrong, I LOVE spending most of my time designing. The rest is a necessary evil to get the design into the medium. So if you feel strong emotions regarding CSS layout, don’t respond. :) If you get where I’m coming from, please help understand using logic.

      Jennifer

      •  I don’t think the idea of cascade is all that bad.  But I hate the inconsistency, which you mention.  Even within a single browser, rendering is very unpredictable.  I can’t accomplish the simple feat of causing content to fill a page without overflowing the margins.  In one instance, simply changing height to min-height can actually decrease the height of an element, and for no good reason.  Styles at various levels of cascade get ignored for mysterious reasons.

        • I agree completely. I’m a very experienced C++ developer, with many years of experience in countless technologies. I know my way around software better than most, and CSS is unquestionably the most perverse and frustrating technology I’ve ever used. I’ve spent countless hours trying to get the most basic things working and it’s unbelievable how many problems exist. The most trivial things frequently don’t work as advertised, or work differently depending on the environment (browser, etc.), and you then beat yourself silly trying to figure out what’s wrong. What’s wrong is the technology itself, and all the “expert’s who brought this plague to the Internet. So much for good intentions.

  2. I agree with the majority of your arguments.

    I hopped on the CSS/Tableless design bandwagon about 8 months ago, and I think it’s safe to say that I have mastered it. All my sites now use Tableless design. What was I missing when I was using Tables? Not a whole lot. Compliance with the future standards and staying up-to-date with the newest programming methods are the two main reasons why I started programming using Tableless design.

    The CSS file can also be cached, which saves load time DRAMATICALLY once the page has been visited. The arguments for CSS will have even more backing when the browers agree to treat CSS the same…grrr..

    Check out this demo site I did: http://www.siredesigns.com/designerfiles/realmedia . It uses Tableless design and is Strict XHTML. It is completely cross-browser compatibal from Opera to Safari, from Mozilla to IE5-IE7. It is possible to make a website cross-browser functional without the sacrifice of time while still using Tableless design, I will use it.

    The reason’s why I use CSS is because I don’t want to keep having to type in when I have that same format multiple times on the page.

    There is a whole lot less code to deal with. It takes me about 15 extra minutes to make my website cross-browser compatible, and the result is a faster loading site.

    Just a side note: even this site is using 166 lines of CSS.

    •  All switching to CSS and away from tables really amounts to is chasing fashion.  If you can resist the trend, by all means do so.

  3. Wanna hear something funny? In February, I bought a new CSS how-to book that was so current it sported a 2007 copyright date. The book encouraged readers to visit the author’s site for examples.

    I had just downloaded the current version of Firefox when I decided to visit the CSS site. Guess what? The author’s CSS site was a mess, because the newest Firefox build didn’t support her stylesheets.

    Right now, this comment field I’m typing in is bleeding off the right edge of the page. If this entire blog was written in tables, that wouldn’t happen… even with the blockquote.

    I thought pure CSS design was a waste of time six years ago. CSS is very useful for graphic formatting, and I’ve used it in every design since 2000. My opinion has not changed, but I since 2005, I’ve felt a lot of pressure to learn strict CSS design.

    I design beautiful, robust, low-bandwidth, fully-functional sites with tables that look virtually the same in every single browser. I’ve been able to do this for many years now.

    Not so with CSS. It’s like 1997 all over again… you gotta load a page a hundred times in a dozen browsers to make it rock-solid. And even then, you gotta re-test your work every time a new browser build sees release.

    The language is clunky, and there too many required work-arounds to get the result you want.

    I love the idea of a website programming language that works well on computers and portable devices (the only potential benefit I see with CSS). CSS is not that language.

    Oh, and if you ever do any e-marketing, you better know how to design a rock-solid page in tables, because Hotmail butchers CSS, and the newest Outlook barely recognizes a CSS layout.

  4. I agree with the idea that CSS is not perfect – either as a standard or in its implementation. But I must challenge the idea that it sucks!

    1. Predictability and Consistency. You say that CSS has neither. I say that tables have neither. There are lots of table-based pages I use that display differently in IE and Opera. But by using a Strict doctype and by remembering just a few tips and tricks, you can reliably and regularly create fully cross-browser sites with CSS. Yes, it takes a little bit of learning, but no more than table-based layouts did, and it is so much more powerful.

    2. Yes, CSS is markup-centric. The purpose of web sites is to enable people to access information or services. If people want to look at art, they’ll go to an art gallery (real or online!). HTML is about function, not form, and has been right from the start. Nobody cares about your beautiful graphic design, they just want to get the information, make the purchases, and move on.

    3. Cascading. It’s a very small learning curve, and a very powerful tool. It means you can style an entire website consistently with very little coding. And really, it isn’t difficult!

    4. Sure, the box-model is simplistic, but it’s just an abstraction of the table model. Using tables, you can’t have anything other than a rectangular box. CSS makes it much easier to style that box so that it doesn’t look like a rectangular box, and it’s much easier to create a design where things don’t line up with each other, if that’s the way your inclination runs.

    5. This doesn’t seem to single out CSS as any worse than HTML. The problem we have is that we have to support older software, because not everyone upgrades to the newest kit at the earliest opportunity. That means we have to support legacy code. I’ve not come across any CSS ‘mistakes’ that have been compounded by newer developments, perhaps you could give an example of what you mean.

    6. Multiple ways – why not? There are plenty fo table-based design features that can be done in different ways. Spacer gifs as opposed to adding blank columns/rows, for one. Use the model that works best – who cares if you can achieve the same effect in a different way? What this does is to show you the true power of CSS to create an astonishing array of designs.

    7. Design intention – this is one area where I agree that CSS has not lived up to its potential. Being unable to reliably specify the height of objects or to vertically align them easily is not what we had hoped for. Nevertheless, there are ways round it – and designers are coming up with new ideas all the time.

    8. I find that CSSP pages render much faster than table-based layouts, particularly those with nested tables. But one of the great strengths of CSS is that it will work on small screens, different resolutions, etc – so this computational aspect of the layout is essential. Generally, if you try to view a table-based layout on a small screen, it will often be an unreadable mess.

    9. Yes, you can creat visually attractive designs in minutes, using graphic design tools. But will these make a good website? No. They won’t allow for people using different screen or text sizes, so rendering the site difficult to use for a sizeable proportion of the audience. Your job as a designer is to make a website that works for the users, not one that works for you. And trust me, it is far easier to make changes to the content of a file that has been laid out with CSS than one that uses nested tables. Often, it has been quicker for me to re-write the entire page with CSS than to figure out someone else’s nested table layout!

    10. Why does it matter? Is anyone going to notice if there is an extra pixel in one browser over another? Of course not. What matters to people is that the page is functional and aesthetically tolerable in the browser they are using – they don’t care what it looks like on anyone else’s computer. What does matter is that CSS allows you to specify different styles for different situations – such as for printing. Printing your website? Half the text disappears off the edge of the page. Print a site designed in CSS with a print stylesheet? Fits perfectly on the page, with all the irrelevant bits removed.

    CSS ROCKS!

  5. CSS Rocks? Stevie you list out 10 reasons but the majority of your argument are an excuse for the shortcomings of CSS.

    “It’s not too hard… It’s better then tables… Why does it even matter?!!!????”

    Any tool or technology that is considered a “Design tool” should honor the intent of the designer. It has to be consistent and it has to be precise down to the pixel on every browser on every platform. Always. If you don’t think every pixel matters then you don’t really understand design.

    Flash has it’s own shortcomings but has managed to do this aspect of design and layout fairly well. Flash is not the answer but we can look to flash as an example of an alternative layout technology that sucks a lot less then CSS.

    The idea that CSS gives you better flow and layout for fonts and accessibility just isn’t true. Accessibility for CSS is the exception not the norm. Most designers make accessibility and readability worse because they lock the size of fonts to pixels instead of em’s.

    CSS is awful. It’s clumsy, awkward and unpredictable. To design any large site requires you to “hack” the css just to get basic things to work.

    •  CSS = “Careening Slime Sheets”

  6. 1. So what you’re saying is it’s the browsers at fault, not CSS. And that would be correct, it’s the browsers that need sorting.

    2. To code proper CSS you have to understand the medium, it’s not hard, CSS and HTML are pretty damn easy to learn. In this case CSS is doing exactly what it should be doing, it’s your opinion of what it should be doing that sucks.

    3. Ha what a load of nonsense, you obviously find it difficult, millions of others don’t. In fact the cascading method is absolutely brilliant for cutting down and streamlining the amount of CSS required.

    4. Hence the advancements in CSS3.

    5. Again the problem here is with the browsers not CSS. Keeping old standards has not caused problems because 99.9% of them work perfectly well, it’s wrong implimentation of these standards by browsers that cause problems.

    6. Again see CSS3 – not everything can be done at once, seriously mate you’re showing an extreme lack of undestand of the technology. Maybe you should learn more about it before mouthing off.

    7. Go ahead then and create this as a new standard, nobody is stopping you. I’ll stick with being able to accuratly position things as I want them though.

    8. Oh dear, “makes pages load slow”…yeh, right. Lack of understanding again.

    9. Sorry but I’d hate to have to design sites like that, we have WYSIWYG editors and for many reason they suck. CSS is powerful and gives you a shitload of control that your method would not. All it takes is a little understanding of the technology you’re playing with. CSS is not a pain to work with, it’s simple as fuck.

    10. And again, you mistake crappy browser support for crappy CSS. If you can’t deal with the nature of this technology then go do something else, if you can’t even understand the basics then I seriously think you should stop wasting your time.

  7. Greg,

    Those were not my 10 reasons in favour of CSS, they were counterpoints to your ten points above.

    I do understand design. But “design” is not the same as “web design”. As I said before, the only person that cares about the design of a web page is the person who designed it. That may be overly simplistic, but the fact remains, unless it is an arty site, its visitors *don’t* care about that 1 pixel difference. What people on the web want is a site that is easy to read, and easy to use.

    Your arguments about locking font sizes with CSS are totally fallacious. Most designers use CSS to format text even if they use the worst possible tag-soup-and-tables for layout, and they are at least as likely to use pixels for font size. Any competent web designer with half an eye on standards and accessibility will use relative measurements for font sizes, regardless of how he has laid out the page.

    You want some arguments in favour of CSS-based layouts?

    1. Consistency across the website
    With CSS, you know that all your pages are going to look the same, because the formatting runs off a central resource, rather than being hard-wired into the page.

    2. Ease of restyling
    Because the formatting is centralised, you only need to change one file, and then all your pages will apply the new style. Yes, a CMS may be able to do this with a table-based layout, but not as reliably.

    3. Focus on content
    Because the presentational details are taken out of the source code of the page, you can focus on the content and structure of the page – which is what really matters to users. This makes it much easier to edit the pages; you know that all the layout is taken care of elsewhere, so you don’t need to worry about whether the changes that you make are going to break the table.

    4. More powerful, more options
    CSS can achieve far more varied and useful effects than tables, especially if you include CSS2 and 3 properties, which will become increasingly well supported over the next couple of years. Conversely, table development reached a plateau some years ago and is not going to evolve any further.

    5. Different media
    If you use CSS for your layout, you can very easily reformat and reflow the page into a layout suitable for printing – no need to maintain separate versions of the page on your site, no need for users to hunt around for a “printable” icon or jump through hoops – just press ‘Print’ and it works. You can also give a different layout for mobiles/PDAs – and for other media if you’re feeling really generous, although I don’t really think that’s worth worrying about for most sites.

    6. More logical
    The *only* reasons that people say tables are easier are (i) it’s what they’re used to, and (ii) they have fallen for the myth of WYSIWYG editors. CSS is entirely logical (although, just like tables, it occasionally needs the odd hack before it will look exactly right in the less well-behaved browsers), and follows well-defined rules. It does exactly what it says.
    If you want a boxout to float to the right, you put ‘float:right;’ in the declaration. If you want to try to achieve the same effect with tables, you have to mess about with adding rows and columns, some cells spanning them, and then find that when you edit the text the boxes don’t line up any more … how can you say that that is easier?

    7. Better accessibility
    Because CSS allows you to have the source code in a more logical order, which makes it easier to use for people with assistive technology and those navigating with the keyboard – without the need to create a lot of work and make things even more confusing with tabindexes. It makes your page more adaptable to a wide range of browsing contexts and users’ needs, and allows them to use custom stylesheets to reflow the page.

    8. Lighter and leaner HTML
    By using descendent selectors, you can dramatically reduce the amount of ‘fluff’ in the source code, making pages easier to edit accurately, but more importantly, giving them a better chance of a high search engine ranking. Most top search engines only index to a certain depth on a page, and consider text that appears near the top to be more important. Clearly, the more tags you have fluffing up the page, the more likely you are to push important parts of the copy further down, whether they will be considered less important.

    If CSS was not the right way to go, you wouldn’t be seeing the development of CSS3, with its far more advanced and powerful layout possibilities. If CSS was doomed, nobody would bother with it. The fact that leading internet software developers are pushing CSS on should be enough to tell you that it *is* the future.

    •  I could rebut all.

      1. Consistency across the website is difficult to maintain when you have to add nonsemantic divs to every page, and they have to vary in height from one page to the other, and it has to be calculated exactly.  You know that the bottom part of the page is not going to have the uniform appearance you want, because CSS was intended to cascade physically as well as logically.

      2. Restyling is not easy for the same reasons as #1.

      3. It is impossible to stay focused on content when you have to add meaningless divs all over the page.

      4. CSS is not more powerful than the alternatives, such as Flash and tables.  More powerful means making difficult things less difficult as well as making simple things trivial.  CSS has all the power of spaghetti code, and even less, because you can’t predict it.

      5. Different media cannot be easily accommodated when you have to use fixed sizes to get the CSS to work at all without resorting to crazy hacks.  That window-sized layout will not scale down to an iPod.

      6. The exceptions and bugs are not logical at all.

      7. Code is not accessible when it is buried in excessive markup required to hack the CSS.

      8. Code is not light and lean when it is filled with meaningless divs.

      In short, you provided a good argument against CSS, not for.

  8. CSS may fail in grid based layouts and have its faults but isn’t that based off of the browsers not being able to integrate the technology to read them correctly. I admit there are some faults but I still like it better than tables, and CSS is Seo friendly.

    •  Grid based layout is design, at the design stage, before it is put to code.  You should be able to implement any design with a technology, but with CSS you can’t.

  9. Thank you for saying it, Greg. Despite the strengths and occasional elegance of CSS, it does suck in many ways.

    Through a combination of hard work and a rather anal approach to markup, I’ve developed some clever work-arounds and general methodologies which serve me well for the majority of projects. But for all my ingenuity and effort, I still find myself occasionally astonished by the sheer volume and variety of bugs, exceptions and curve-balls which browsers can throw at me. And, when I reflect upon my investment, the time I’ve wasted, and the obscurity or complexity of many solutions for seemingly elementary problems, I find myself feeling dismayed and somewhat empty inside. This sort of toil for such minimal results is generally the characteristic of a solution in search of a problem.

    And when we’re designing with CSS, there’s no end of “problems” which myriad developers believe should take over your life and sanity! Often their “solutions” are not enjoyed or appreciated by actual users. To illustrate this point, let’s take a simple (and common) example from recent memory: indicating required fields on a form. It has been standard for many years to use a red asterisk to mark required fields. But according to many authorities, this is simply not enough; you should explicitly provide the text “required” in your markup, and maybe style it a little to look cute. And if your test group are other anal web-standardistas, it does look cute—right up until the point when you ask real users. “That looks ugly,” they tell me. “Why not just use a red asterisk?” they suggest helpfully. “Everyone knows what that means!”

    But the markup police know better; not everyone knows what that means! Furthermore, because screen-readers (and screen-reader users*) are functionally retarded, this explicit indication that a given field is required must be provided in the associated label tag (as should indications relating to that field and any script-generated errors; all of this falls within the purview of your belaboured label tag).

    Finally, if your sighted users are crass enough to demand the ubiquitous red asterisks, this must be a purely visual effect, and should be provided on the right side of the field itself. That way they can scan down to see all required fields at a glance, instead of committing to the onerous job of reading each label individually.

    Now it’s my job to integrate these visual and structural requirements into an attractive design, in fitting with the theme of the rest of the site, using the crude tool that is CSS. Oh, and it should work in every browser, of course. A few hours and a headache the size of King Kong later, I have a special, individual method for IE (which breaks in IE 5, and in IE 7 if you use its comically-broken “zoom” function), and a further three methods to choose between for Firefox, Opera and Safari—the “standards-compliant” browsers—each of which breaks in a unique way in one browser, but works perfectly in the other two.

    The final solution: pristine, lean markup, a stylesheet which only a mother (well, father) could love, and a special “browser detect” script for Opera. Don’t forget several hours of development time gone which I wouldn’t have spent if I just ignored all that speculation about supposedly essential accessibility constraints. And the unshakeable feeling that for such a common task, there should already be a solution which at least verges on being humane without compromising on good design, code or accessibility.

    The list is endless. Header/content image replacement? You’ll want it for 90% of the websites you’re ever likely to design, but if you want to do it “the right way” you need to choose from among ten or more techniques, each of which comes with its own complexities, caveats and browser-support issues. Multi-level navigation? The same, and often you will be forced to resort to script solutions to accommodate even simple interactions.

    Many posters correctly point out that the main problem with web design is that 60% or so of lead time goes into “legacy support”. This is true, and if we could only rely upon supporting only those browsers with the best implementations, overhead would be greatly reduced. But as illustrated by the above issues, a good deal of the problem is that CSS and HTML are replete with legacies of their own, instead of being built from the ground up to support a web which operates on fundamentally different principles than it did ten years ago.

    Some of this will hopefully be solved when (if ever) we start using the new breed of markup languages (HTML 5, XHTML 2) and CSS 3. But it will be many years until browsers support these brave new technologies properly, and CSS will still suffer from the encumbrance of supporting outdated methods and properties instead of prescribing a fresh new approach. After making a significant investment to become an expert in the existing technologies and still being frustrated by their shoddiness, I will fully support any well-conceived initiative to replace them with something which actually works, and is actually easy to learn.

    The fact is, if I want my site to have rounded corners, a header replaced by an image, or required fields indicated unambiguously and attractively I shouldn’t need to stuff my site with extraneous markup, style rules or scripts to produce a solid and reliable solution which works for 99.9% of users. The current situation is, IMHO, evidence of failure on many levels: of vendors to implement the standards correctly, of documentation to unambiguously and succinctly describe how things should work, and of working groups to produce recommendations which directly address real-world needs.

    * In case there is any doubt, this remark is firmly tongue-in-cheek. I know a couple of screen-reader users, and they’re both quite as bright as I am; one in particular has been very helpful with my web design work.

  10. I’m glad Scott wrote his rebuttal, now I don’t have to.

    Anyone who thinks making column layouts using valid XHTML and CSS is hard clearly doesn’t have a solid grasp of the languages. Any good Front-End Developer can cut a basic CSSZenGarden page in less than 30 minutes.

    Since when is CSS a design tool anyway? It’s more like the printing press, the tool that gets the design to the medium. Any good Designer knows they have to keep the medium in mind while designing.

    Stop using tables for layout and I’ll stop convincing your boss/clients to get rid of you and hire someone who knows what they’re doing.

    •  CSS was only designed with top-down cascading pages in mind.  Anything you want at the bottom?  Forget it.  It ain’t gonna happen.

  11. A lot of good points were made, however the fact remains that designers/developers will always have to factor in browser compatibility issues. I don’t think that the programmers of IE and Firefox and Safari will ever sit down at the table and a gree on one standard. Instead of complaining about why CSS sucks, why not spend a little time every day to learn the technology inside and keeping your skill set current out instead of getting frustrated. Things get easier with practice and if your not willing to put 100% into learning and mastering your trade, then maybe it’s not for you. CSS is wonderful, and if you take the time to learn it well(and this means learning how to get around browser issues) maybe you’ll find its more useful than you thought.

    •  CSS is not wonderful. The only reason to want to learn it is to get a job done and because the boss demands it be done that way.  Otherwise, do it any other way but CSS.  Avoid it whenever you can, because it’s not worth it.  Time is too expensive.

  12. This is the shocking truth. Some people will be in the denial stage longer than others, and based upon all of of the comments, some are still in the shock and hysteria stage.

    Tehnology evolves, but the best editor for css is still notepad.

  13. Alan wrote on 28 Sep:

    “Since when is CSS a design tool anyway? It’s more like the printing press, the tool that gets the design to the medium. Any good Designer knows they have to keep the medium in mind while designing.”

    It became a design tool when it was used to manage and arrange visual elements on a page. Your ignorant and threatening bluster aside, the point of Greg’s position is still completely valid: CSS is a suboptimal solution to a problem that was better solved in previous technologies.

    Tables are clunky and dull, but they do work, and while they can also be seen as “suboptimal” in terms of web-page layout, they are often times LESS suboptimal than CSS solutions, especially in terms of Time and Effort in both production and testing.

    The other point that Alan and his ilk don’t get is the simple point of “coding v. designing”. Designing is hard enough, and coding simply adds a layer of complexity that is, essentially, unnecessary. The example of PostScript is excellent. Technically, one could read a page in PostScript, if one had an extra lifetime or two to waste. However, “We Don’t Have To Do That Anymore” because earlier programs (Fontographer and Freehand) and apps from the source (Illustrator) are sufficiently developed that one need never read a line of PS code again.

    This is EXACTLY where web design should be going, and inevitably WILL go, as labour costs for web development continue to escalate, and are finding third world countries more than happy to take up the slack. Eventually, even an Indian or Chinese CSS programmer will be too expensive, when web technology is sufficiently clarified as to permit the development of a true non-code webdev tool.

    Snotty and arrogant web developers like Alan will do their best to drag their heels against the tide, bu they will fail and be replaced by technology. Oddly, the CSS groupies see the antiCSS arguments as atavistic reminders of the dark days of table abuse, but in fact, the CSS groupies are the atavists, who insist that code must come before design. History has proven them wrong, time after time. If it didn’t we’d all be doing web dev in Assembly.

    I’ve been around the web since the beginning, and I know or have worked for the people and companies that have made this happen. I’ve been doing CSS since it was invented, and I can assure you all that CSS is a dull idea done poorly and hamstrung by people and corporations who really don’t care, and the results are really awful. It’s basically a “hack”. A way to make somethings happen, but not really thought out properly, especially in terms of the long range needs of the market and what the web can do.

    Sure: if you make web dev easy enough that any idiot can do it, you get a lot of crappy websites. At first, you will – that was proven out in the mid 90s when people were putting their
    lists of record collections on the web and pictures of their pets with their names glittering in BLINK tags. (brrrr- bad old days) but at the same time, the need for better and more attractive design systems became apparent and hence CSS. The problem was, CSS wasn’t a solution. It was a fix. Big difference. And now we’re stuck with it.

    Where to from here? I’m not exactly certain, but I do think there is a need for a vastly superior technology/standard to be developed to completely replace CSS and makes HTML, CSS, and AJAX as transparent as PostScript. However (sadly and most likely) there will be a few more iterations and improvements on CSS to make it less crappy, opaque, and clumsy. It will limp along until it meets some final demise at the hands of a vastly superior technology that makes HTML, CSS, and AJAX as transparent as PostScript.

  14. Thank you for pointing out these great truths Greg! The truth is we can call CSS a standard all day, but if common browsers don’t follow the artificial standard, then it’s all hearsay… there is no standard!!! Something standard is what most people use and in the web world, people use all different browsers that interpret things all differently. I don’t care who’s fault it is, my point is that in many cases, when you figure in the cost involved in making a site cross-browser compatible the ROI from using tables for layout is still better! haha I said it! eat that! hahahahahahaha.
    Sorry, I just had to get some emotion in there since this has, for some weird reason, turned into quite an emotional debate.

    • For two and half decades, the speed limit on U.S. interstates was 55.  That was a standard.  Compliance was low.  CSS is no different.  The standards are unreasonable, so nobody complies.  Make the standards reasonable, and see of the compliance rate doesn’t improve.

  15. CSS is great… for making tables look good.

  16. CSS Sucks

  17. “Anyone who thinks making column layouts using valid XHTML and CSS is hard clearly doesn’t have a solid grasp of the languages. Any good Front-End Developer can cut a basic CSSZenGarden page in less than 30 minutes.”

    Oh, come now. How often have you used a totally unsemantic “container” to make a particular layout play nice? (Yes, I did check out your source. And your portfolio.) Surely you have asked yourself at least once, “If CSS is really about separating content from presentation, why do I need to add markup to my content for presentational reasons?” It is an extremely minor intrusion, and totally practical, but it is also an early warning of things to come. As Bruce Lawson eloquently expresses, CSS solutions to common design objectives are uncommonly complex:

    The so-called “Holy Grail,” which you argue is very basic, requires playing around with negative margins and floats to achieve. And, as Matthew Levine indicates in his article, “Many articles have been written about the grail… However, all the existing solutions involve sacrifices[.]” Either the authors of these other articles are deficient designers, or you are trivialising the issue somewhat.
    One early solution to equal-height columns (“faux” columns) required a background image to work, and left designers losing sleep over the prospect of doing the same for fluid columns. (The new method, which Matthew adapted for his article, requires astronomical values for padding, and is riddled with problems.
    Rounded corners in a fluid box either require uncommon cunning, luck and economy, unsupported CSS properties or a good helping of extraneous markup. The “Nifty Corners” solution is clever, but requires JavaScript — and in the end, it’s just a way to keep the extra markup out of your source.
    Accessibly replacing text with an image requires some curious and inventive code (negative-indention off the edge of the screen, anyone?), as well as a superfluous empty span if you want to cater for the CSS-on, images-off eventuality (e.g. many mobile browsers).
    Getting a footer to stay at the bottom of the window when the content is not long enough is often an exercise in futility, even for modestly complex layouts; the mere thought of it makes me shiver, never mind the fear that a client might mention it. The best technique I have seen so far requires you to know the exact height of the footer (so you can forget about font-resizing if you have too much stuff there).

    Wherever possible, common objectives should have humane solutions, yet all of these basic, frequent goals require relatively obscure techniques. In this context, what qualifies as a “common objective” changes over time, yet the W3C is agonisingly slow and unresponsive. For example, more than eight years after the first working draft, we are still waiting on a CSS recommendation for producing balanced, multi-column text! And for all we know, it will continue to drag on like this for several more years.

    That, in a nutshell, is why CSS and XHTML suck: they don’t provide for common design goals in an intuitive, simple way, and the organisation appointed to maintain them is lagging hopelessly behind designers’ expectations.

  18. PS: my unordered list didn’t come out terribly well in the above comment! Perhaps, if it would not take too much time, Greg could add a few bullet points? :)

  19. I used to work with a web development team that cranked out hundreds of websites each month. I was about to design another site for myself and wondered if I should just format it all in CSS. I decided to ask these developers the fastest way to build sites and the easiest way to manage them. They all said the fastest way to format web pages was with tables. They also said that it was way easier to manage table formats.

    Now I’m not saying CSS isn’t great for a ton of things, but using CSS for formatting a page doesn’t seem to be the most effective use.

  20. The initial concept of CSS is great.

    But what do you think of this:

    http://www.thestar.com/App_Themes/TheStar/style.css

    It seems worse then the old table/image layout. Additionally, when it’s spread over multiple files & imports, it’s becomes sooo easy to maintain :)

    Bloated CSS files are becoming more and more common – that’s a real maintenance problem. Where’s the elegance gone?

  21. I put together a “Challenge” for CSS guys for this kind of stuff.

    http://www.djlosch.com/article_Tables_vs_CSS_Challenge_-_Round_1

    We talked about it on some forums, and not a single tableless CSS guy could come up with a solution. What it really comes down to is that there is NOTHING that CSS can do which CSS+tables cannot do, but there are MANY things which CSS+tables can do that CSS alone cannot. Arguing otherwise is like saying that a hammer has more functions than a hammer and a saw. No one here is advocating table-only designs.

    “Anyone who thinks making column layouts using valid XHTML and CSS is hard clearly doesn’t have a solid grasp of the languages. Any good Front-End Developer can cut a basic CSSZenGarden page in less than 30 minutes.”

    1) you can do it with tables (or should be able to) in less time.
    2) have you looked at some of their code? A ridiculous percentage of the code on every single page is gross abuse of the span tag. They also use absolute positioning and completely non-fluid designs (even static width columns and bg images). That is not semantic.

    And, container tags make sense if you’re applying 1 style to all contained objects. However, adding containers that have no style whatsoever is logically silly. Unstyled containers have all the drawbacks of tables, and then some, because everyone knows (or should know) what a table looks like, but a container class with whatever name may have virtually any behaviour.

  22. CSS: The art of trying to make it look the way it is.

    THE ALTERNATIVE (Daron, Flash IS it)

    My troubled little darlings. The solution to ALL this crap with browsers displaying what they want, and the need to know 4 languages to make a poxy web app was born 10 years ago. It’s called Flash.

    I’ve been dyslexically Flashing (design and development) for 6 years now. Recently I’ve had to learn CSS for only one reason, and that is the sheer uselessness of search engines being able to index Flash sites (special client request).

    At first CSS looked like a piece of piss. I soon realised it was a piece of shit (yes, I was a print designer too). Novel idea CSS, but Greg’s 10 reasons are spot on (Genius Paint kicked ass!!).

    Also comments about the web being an adobe turd hut of near obsolete technology undoubtedly apply.

    The only tool which can satisfy a designer, a developer, or a hybrid like most of us, IS Flash. Even though those useless fucks (Adobe) really gang raped version 9, it’s still in a league of its own.

    The bottom line is, I want to work human hours, get paid for the hours I work, go home and fuck the wife without thinking how to suicide-bomb Microsoft’s head office because IE is fucking with my layout.

    I’ve made CD-ROMS (dynamic and static), sites, web apps, video projections and TV commercials with Flash.

    If you trade CSS, HTML & Javascript for Actionscript, I guarrantee your clients (and your wife) will be a lot happier.

    The SEO problem remains with Flash. I say it’s a problem because you need workarounds (a bit of Javascript) = time wasted = wife not happy.

    What designers and developers SHOULD do is rebel against this elitist bullshit (if I had made the W3C site I’d want the ground to crack under my feet and swallow me whole) and start making ONLY Flash content. I’m sure the other useless fucks (Google and the rest of them) could then spend some time into properly indexing Flash content.

    I see a vector based internet. Definitely not in my time, but when JS CSS and HTMLoids are BANNED, the internet deleted, and OWL (One Web Language) is created, I will stop turning in my grave.

  23. Heh… Well said, Chris.

    CSS was a great idea. In 1996. For static HTML pages.

    Today, CSS, javascript, ajax… it’s crap. Full-motion video, audio, real layout tools, typography… the list is endless what a binary format can provide( I only wish FLash wasn’t proprietary ) over the shite we are stuck with. And for search engines, you can serve plain text for it.

    We are over 15 years into the web and the current standards are so primitive its laughable. And the bozos who get all Cowboy about it can keep their stone axes while the rest of the world moves on to the 21st century.

  24. who said css is suck?
    i love css, i use it all the time, but only when css cannt get my job done the way i want by the limited time i have, i turn to a more reliable method call “table+css”!!!!

    well.. css is not that suck, but it also not that great. it is just a tool to get my job done. if it can’t, i won’t waste my time. i go straight for table. i don’t stick with css. i stick with something work for the project.
    and i don’t care w3c either. i care only people who pay me, and people who give me a job.

  25. The stupid CSS zealots show that it’s better to have a competent dictatorship (Adobe PDF, any design tool from 1995) than incompetent anarchy (W3 commitees)

  26. List hear to all you CSS haters …why don’t you get and try laying out a sight with hundreds of pages then when the cliat says he/she wants all of the text red except for H2 tags what are you going to do. Tjis happened to me but I know CSS not like you old Table Noobs I was able to change the sight in like 3 seconds…and the client was totaly happy to me. I know more table/css back history then you

    •  If the color is all she cares about, I’m ok with it.  But if she wants it scaled to fit the window whether it’s a wall-sized screen or an iPhone, with no overflow, no scrollbar, a sticky footer, a centerpiece, and perfect to the very pixel, then forget it.  I’ll tell her to consider someone else.

  27. Too right! The nature of CSS is that it is incredibly complex with far too many inconsistencies and naunces.

    I am a C++ programmer and I find C++ much easier to use. Of course, you can’t compare a mature programming language with CSS which is most certainly not in the domain of what you can even remotely call programming.

    CSS is overcomplex and breaks so many software engineering rules that it’s just not funny. In software engineering we would call CSS a Gas Factory, meaning something that is far too complex for what it does.

    •  I agree: C++ is much easier to use than CSS layouts.  So is Haskell.  So is C#.  I’d rather be a .NET developer than a CSS hacker any day.

  28. Note in my previous post I said CSS sucks as it is.

    However I DO recongize that CSS is the best we have at the moment. I am not arguing against that at all. CSS is THE proper way to develop designs and separate presentation from markup.

    But it doesn’t take much software engineering discipline to see that CSS is flawed, and blaming browser inconsistencies has little to do with this.

    It’s just insanely, uncessarily complex. I would advocate that CSS be encapsulated in a lower level of functionality, and to create an interface that works with CSS. This is common sense in engineering.

    •  CSS, as it is, is not the way to separate layout, which is part of style, from content, because all the hacks require violating that very principle.  Currently, there is no other alternative besides programming for only a few browsers and using nonstandard properties.

  29. Having spent the hour pouring over the comments for some hope of fixing my ailing site, I contribute out of sheer ennui…

    * CSS, renting form from content = awesome concept.

    * CSS is a child still growing, give it time.

    * i think we all know why dictatorships don’t work. Which leads me to…

    * Internet Explorer, I believe, is PURPOSEFULLY standing in the way of progress. Many of the required hacks are actually around their own proprietary technologies and implementations. Simple proof of this is the ‘html shell’ uber-object. As always, they hope to get the upper hand. We are all bleeding for their envisioned marketshare. It’s utterly satanic.

    * the majority of that wasted 60% lead time is to make the ‘most popular’ browser work like the other ones. But I believe this is intentional on Microsoft’s part – the company isn’t some fledgling little garage outfit.

    * Though I have seen CSS compatibility comparison sites to the contrary, IE is the ONLY browser that balks at my simpleton CSS. Fix it for IE, it breaks in the rest.

    * Dreamweaver — is HORRIBLE. Let’s talk crappy design tools. Honestly, I only use it for CSS or PHP code because it highlights the code in fancy readable colours. While shaking trees, shake whoever it is that is responsible for the dreariness of the ‘most popular’ web-development app. The FTP section makes me feel like I bones are going to wobble apart.

    * “thestar.com” CSS above seems clearly to me to be auto-generated from code (repetitions, etc). CSS can be parametric if you get a little ‘meta’ with it. Clearly think out your design plan, then chop up the CSS sheet or style tags into the ‘fixed’ bits and the ‘programmatic’ bits, then have PHP spool it out for you. This is where CSS can be powerful, to have a whole other system dealing with clever formatting – hell, why not write a database of browser hacks while you’re at it.

    I was devout Flash until i got into MySQL. Doing the Flash>Actionscript>XML>PHP>MySQL (and back again) handshake is possible but not fun. (haven’t looked into this since Flash6 so don’t rock my boat)… SEO, database-interaction, accessibility, plug-in reliance… still a few reasons why Flash shouldn’t crush everyone.

    * the future is XML and all will be assimilated into name:value pairs. If only I could get ProTools to output XML… The XML nature of CSS is the good part… totally tight.

    * I don’t really want to have 10 computers lined up, humming in a test bank… i think that’s horrid. CSS is nice for making text pretty, but so far in my fledgling newbie way, CSS seems to mess up even my table presentation in IE.

    * //

    this would make an apt suicide note, where’s my gun?!

  30. Hey all you CSS lovers, wanna see something funny?

    To prove that CSS sucks for layout I took a csszengarden layout (the gold-standard for CSS lovers) and broke it. How? By changing the content. I changed the contents of all the P tags to be a single line of text each. They rely on the size of the content to force the background layout elements into place. This is hardly a separation of content from layout. They are tied together. See for yourself:

    http://www.insofar.com/css/z.html

    CSS = Bad technology for your underlying layout framework. Good for styles, bad for layout.

    •  My thoughts exactly.

      The fanboys are hypocrites, violating their own standards.

      This is no cross-browser issue; it’s about poor design and the lack of needed features.

  31. Hey everybody…I guess I sound like a loser, and maybe I am one…but I think does suck coz I can’t learn it. There is something intrinsically confusing about it that leaves me all wired up and bedazzled after every time I make an attempt to learn how to do it. I can’t afford professional training so I like,or I guess HAVE, to learn things on my own. For this, I have found flash to be the most suitable and friendly. I can make simple websites now that can sport any kind of look, and I am quite contended…but this doesn’t mean I am don’t turn green all over with envy when I see great people creating lovely looking sites with nothing more than a text-editor and image-editor…hats-off to you guys…

  32. Hey guys, (I take or should I say ‘swallow’) my words back about css. It isn’t really THAT hard to learn, especially if you practise and concentrate. Recently I used a lot of css (210 lines) code, well that’s lots for me, and I am quite pleased with what I was able to do…I mean there isn’t really much to worry about cross browser compatibility if you are only looking to please customers with IE6,IE7,IE8 and Firefox. I was able to convince all browsers to display my pages correctly, lol.

    Anyways, Flash is good, but css too is good. For now, I must say that they stand at an equal amount of ease for me, only that it takes a tad bit more work to create an entire site in flash. Do check out my latest website by clicking on my name, and tell me in which areas of CSS I should improve… Thanks and bye!

    •  There isn’t much to worry about cross-browser compatibility, provided that you avoid CSS layouts like the plague.

  33. this is bull with your fanciful designs and so on. CSS is originally an organizer of visualness to context/content.

    Sure, it is worthless with small html files, but given an load of elements/tags (that meaning text or sections), CSS is bound to help with the categorizing.

    And if you’re think that each html file requires its own CSS file, you are wrong. As long the html files are under the same visual umbrella, you can just link all those files to that CSS file.

    Hell, if you wanted to put html files with different header properties, go ahead, you just gotta make use of the name/class attributes. Of course, you’ll then get an long list of visual like properties in that CSS file. More CSS files can be made just as for convenience.

    *
    As for you website designers, I’m saying that you are not website developers. Don’t go saying that you are masters of the web codes. As far as I can see, website designers are just visual. Here’s an idea, why not use Flash? I hope that your Flash products make use of the webpage space provided.

    *
    And for advanced technical stuff, I hope you guys are acknowledgable enough in the web codes as to point out a problem. Otherwise, you are just claiming to know something that you do not know. OH yeah, if you are going to say that flash tools is the next step to replace and dominate web development, I would have to say that all web browsers and internet service providers are against this trend. I don’t see an flash page with an search engine, and could not use tab browsing in flash.

  34. Hi Greg,

    I agree with all of your points. Thank you for this very well written commentary on something we all kinda-sorta have to use in the web world right now. It sucks and I’m with you that something that embraces a better abstraction style is needed to replace CSS entirely.

    One thing I’d like to add is a restatement of your #3 about CSS cascading:

    Flaw #3 (restated): CSS cascading acts like in inheritance in a modern object oriented programming language. In this case child tags inherit the properties of their globally defined parent tags. This is why cascading is so hard to debug, because one change at the “div” level could easily break every other CSS selector that uses div such as “body .header ul div”. It is very hard to write “encapsulated code” when small changes can have an endless number of unexpected results.

    Secondly I was wondering if you had any thoughts on why HTML sucks as well (and possibly XML)? It seems to me that there are many reasons, but I haven’t had the chance to formalize them as well as you have here in CSS.

    Short list:

    * Bad separation of layout and content oriented markup.
    * Human readable makes it big — too bad we don’t have an .htmlz format which is zipped.
    * Human readable is a bit of a misnomer as big websites have a lot of HTML. Luckily firebug debugging makes this still ok.
    * Hierarchical does a poor job representing graph and tag style data.

    Any thoughts?

    •  Bad comparison.  Object inherit from their prototypes, not their containers.

  35. Evan,
    Thanks for the comments. While I loathe CSS and I think HTML has it’s faults it’s only partly broken.
    I did write up some thoughts on an alternative to HTML that you may be interested in: http://www.raizlabs.com/blog/?p=209

  36. CSS is a disaster and makes complete fragile layouts. Everytime time I go back to edit my templates I cringe. Wait – did that just break because: 1) I made a mistake, 2) a new browser version rolled, 3) a known bug that I don’t know, 4) something cascaded that I didn’t expect, 5) naming collision, 6) a butterfly flapped it’s wings in China.

    •  You forgot 7) a bug got fixed, and I relied on it.  Now my site sucks.

  37. Here’s the upshot with CSS:

    I have spent many hours making my website look reasonably presentable in IE, Firefox/Mozilla and Opera. I used JavaScript to Identify the browser, and multiple Style Sheets to display the elements appropriately in each browser.

    There might be better ways around this, but the bottom line is I can make my website look reasonably consistent in any browser using straight HTML and minimal CSS. For that reason I ripped out most of my CSS code and replaced it with tables. Laugh if you want, but my site looks consistent across browsers.

    CSS is useful for some things, like maintaining the same font styles across a website, but is absolutely useless in maintaining consistent font sizes and element placement across browsers.

    IE is definitely the worst offender when it comes to web standards, but the fact is that around 75% of browser usage is IE. The other 25% belongs to the others.

    The upshot is that CSS can’t be all that it is cracked up to be until those who blindly sing its praises start talking about its shortcomings.

  38. I will, however, admit the problem isn’t CSS itself, it’s the fact that the browser makers refuse to use the same standards when it comes to CSS.

    As I said before, however, nothing will be done if nobody complains about it.

    •  W3C refuses to make standards conformable by browser makers.  Even Microsoft isn’t to blame.

  39. F*** CSS and HTML. Seriously. What f***ing moron in their right god damned mind would put something so horrible together. Why is it so hard to come up with a system that doesn’t suck balls??????????

    •  The only technology that failed is CSS and only in one aspect: layouts.  Everything else is easy enough once you get the hang of it: not CSS layouts.

      : easy
      document.write(‘hello world’) : easy
      $(“p”).html(“jQuery kicks arse”) : saves typing
      xhr = new XMLHttpRequest() : tedious but not complicated
      p { font-weight: bold; } : not difficult at all.

      But:

      html { height: 100%; overflow: auto; } body { height: 100%; min-height: 100%; height: auto; } et sescentae quisquiliae sequuntur: excruciating

  40. Just another vote against CSS.

    I think it’s harder to make a site accessible in CSS, since you have to put so many extra divs and spans in to achieve anything. How is that clearer than a table-based layout that could have a lot less markup?

  41. Well, I suppose from a graphic designer’s point of view CSS is an awesome thing. But for disciplined software engineers CSS just makes them throw up.

  42. “At least with tables, when I resized my browser window, it didn’t break a site’s design or make it completely unreadable.”

    That’s not because of CSS, that’s because you suck at web design. I’ve always used valid XHTML/CSS and it always works at all resolutions, and most browsers. Even the ones that don’t display properly only require a few tiny hacks.

    I’d rather have that than a load of tables which increase the time the user has to wait while the page loads. (Browsers read through twice, once for working out positioning, then again for determining the content).

    Also, tables have to be downloaded on every page, whereas CSS is downloaded once.

    lrn2code.

  43. How can you complain about browsers not adhering to standards? This page doesn’t even come close to validating. 215 errors according to W3C!

  44. CSS is obnoxiouss but I think the blame lies mostly in the browsers…. specifically the fact that IE doesnt think it needs to conform to CSS standards. Makes everything so much harder than it needs to be.

  45. We are facing an veritable explosion of wireless web appliances- a potential multitude of platforms and resolutions coming at us- and we are going to use CSS and XHTML for interface design??? We complain now of endless hacks and conditional statements for a mere handful of browser variations. LMFAO… If design and development is to keep up- we had better realize that vector interfaces are the future.

  46. The main problem of all this, is the lack of CSS features and the half-standard and browsers, like IE!

    •  The only problem is the lack of features.  Fix that, and the browser issues will wither away like they did with JavaScript and every other technology that wasn’t so poorly designed.

  47. The main problem of all this, is the lack of CSS features and the half-standard browsers, like IE!

    • I totally agree with you, i also have the same problem

  48. I came over to the web from print design, so you can imagine what I’ll say about CSS. It’s a mess. Powerful, but a mess. And it would continue to be a mess even if all the current browsers were compliant with the CSS standard.

    CSS simply does not give us the tools necessary for creating complex designs quickly. Quickly is the key point. Tables are quick and easy. I can make complicated, stable and compatible designs in them very quickly. There are good reasons not to use tables, though.

    I don’t think it’s too much to as that CSS, designed in large part to replace the table mess of the past, to at least provide the same capabilities of tables. But it doesn’t. A complete replacement is probably needed, as I don’t see CSS moving in the right direction.

  49. Excellent article! After I saw everyone worshipping CSS, I too, decided to convert my simple tabulated HTML website to CSS. However, it was impossible or extremely difficult to replicate my original website with CSS. Trust me, tables have a secure and solid feel to them that CSS can’t give you. Plus, tables are rendered similarly in all major browsers and are very simple to use and format. RG http://www.rahulgladwin.com

  50. I enjoyed this article. I completely agree . As a front-end developer / & designer making the difficult transition from simple flexible tables to the box model layout is not as simple as its sounds. I understand WHY I need to do it, and I’m trying to contribue to web by adhering to standards… but css positioning can be ff’ing frustrating. As a designer, a simple thing like a 3 column layout, 100% height, a header & footer is something I feel entitled to. There are a stack ways to do this, It just takes mountains of advanced css, many browser hacks and a lot of time in order to achive this.

  51. Hello everyone, I’m the same person who posted on September 19, 2008. Anyways, I reluctantly changed my personal homepage to a tableless design. However, the change was not in vain; the size of my tabulated index.php file was 88.1 KB, and the size of my present CSS index.php is only 47.7 KB!!

  52. Greg, you are spot on! Polished turd indeed!

    Whatever happened to usability for developers and designers?

    I guess there is one upside to all this. Without this piece of crap they call CSS, many of us would be out of a job…

    …keep up the good work W3C! And MS, don’t worry about what they say. MSIE rocks!

  53. lol this guy is a newb when it comes to web design AND CODING.

    I can make a css tableless cross browser webpage work in under 6 hours.with NO CSS HACKS. and it works perfectly in FF IE6 And IE7.

    photoshop, notepad++, autohotkey, brains. all you need to create a beutiful website.

    can code 4x faster than dreamweaver.because of something called macros.

    All your points are relative to you and how unwilling you are to learn something better and why it doesn’t work for YOU.

    I can easily port the design into wordpress, joomla or make it a template for smarty.

    cross browser compatibility is only an issue if you don’t know what you are doing.

    while I admit that css isn’t perfect it’s a step up what we previously had.

  54. “Once you get the hang of CSS it all makes sense and it is not frusterating anymore.”

    “I can make a css tableless cross browser webpage work in under 6 hours.with NO CSS HACKS. and it works perfectly in FF IE6 And IE7.”

    Bulls**t

    Css will NEVER be cross-browser friendly until Microsoft goes away. IE sucks so bad and always will because it’s made by microsoft. Has anyone been testing their sites in IE8beta2? Funny how 4 mainstream browsers can display a site correctly but the f**k ups at microsoft can’t even conform to a set of standards. My hell they are stupid over there.

    •  CSS layouts will never work on any browser period, as long as W3C doesn’t standardize essential features.  It doesn’t matter if you use IE or not.  And of the many problems that are Microsoft’s fault this is not one of them.

  55. Hi Greg, I find it hilarious when people get so offended when YOU don’t like a programming language that they start attacking your abilities and knowledge. I feel for you.

    Anyway, I have never designed a site completely in CSS because I can’t get it to work on all browsers. The big selling point of CSS is that it’s supposed to be more efficient, but when I have to spend several hours on hacks to make it work in Internet Explorer, it defeats the purpose. I have a friend trying to convince me to go tableless, but until Microsoft starts getting on the same page as everyone else, that isn’t ever going to happen.

    CSS does suck, but it’s not entirely useless. It does add to HTML and let’s you do quite a bit more. I use it to enhance, but my sites certainly don’t center on it because I just don’t have the TIME to force compliance in all browsers. That’s the big word – force.

    That’s my biggest complaint though. Cross-browser compatibility. Give me that and I’ll be a happy camper.

  56. I appreciate the comments on CSS and certainly well founded but to insult HTML alongside at any point in a conversation about making things pretty is missing or misinterpreting the intention of HTML itself altogether. HTML was created to share information, not to make things pretty, and at its true task it excels as it always has done. It seems the difficulty arises when people become less and less concerned with the information and more concerned with how cute the visual is. The beast of HTML formatted e-mail messages (and the hideous tide of leaks and security holes that have poured over humanity because of or in connection with them) is a wonderful example of what can happen when a tool created by the minds of the world to share their information begins to seep into the control of organizations more interested in the money of humanity than the ideas of humanity.
    But that is just from the perspective of someone who misses the early days of the Net and still values the communities online that keep their focus on science and information over the blogsphere and photobuckets.

  57. Hilariously uniformed article and comments here. I’d recommend looking at the w3schools site if you need to learn.

    “Each time you make an edit to your CSS you have to refresh your browser to see what it’s actually going to look like”

    oh dear, lol.

    •  W3Schools won’t teach you how to make elements stick to the bottom without violating their own principle of separation of style from content, an impossible feat.

  58. Milly, I use Dreamweaver CS3 and Expression Web (recently). If I didn’t preview my CSS layouts in a variety of browsers, I’d never know whether my sites work. CSS layouts don’t display across all browsers as they display inside programs. But then again, I’m a real designer who works on real sites. I’m not a hobbyist or someone who likes CSS for the sake of it being CSS.

    CSS still sucks, btw.

    •  I have enough frustration with doing CSS by hand.  I don’t want to even touch Dreamweaver.  It’s only cracked up to deal with the same issues by the same kludges, anyway, which means even Dreamweaver’s code can be broken when someone decides to fix a bug in a browser.  I wouldn’t touch it with a ten foot pole.

  59. It seems to me that tables were good, not great, but a really good start. So instead of ‘fixing’ the tables and adding NEW features to tables, Tables 2.0 perhaps? :) We took 10 steps backwards. Sure it’s the browsers fault but it doesn’t change the fact that designer/coder/whatever has to spend a lot of hours to display their artwork on a website… CSS isn’t bad, it has some great features, the idea of separating content from design is a fantastic idea and external style sheets..wow.. but look as its flaws! now the fact is that CSS exists and it will not be replaced. So it seems that some system to use the best of both worlds would be a step in the right direction. Designers don’t mind doing some work, but good Lord you shouldn’t have to become a programmer to display your artwork on the web.

  60. I’m totally with you guys on CSS sucking. I’ve just rebuilt my company’s website from scratch, and I’ve got a little challenge for any CSS advocates out there:

    http://www.accidentalscientist.com/2008/11/css-is-crap-sequel-trequel-trefoil.html

    Replicate my new company site using ONLY CSS. The requirements are in my blog post. (I ended up needing to use CSS, Tables and javascript to get close)

  61. I agree with you, Greg. The CSS fails to separate representation from content. Even if we forget about differences in browser behaviors. The notion of normal flow and out of flow elements make HTML author to think about *representation* first. Having column1, column2, column3 declared in HTML – how easy it would be swap column1 and column3 using CSS only? If we consider bunch of browser bugs then a HTML creator *has always* think about how CSS rules get applied and how differently they work in browsers. I have been writing GUI in C++ before switching to Web, and I’ve found that using constraint models for layouting is much more simple than flowing elements.

    •  CSS fails at its own aim: to separate style from content.

  62. Well, that would be why there are developers and there are designers. CSS isn’t meant to be representative of what we want to happen, its supposed to be a guide to the computer as how to display HTML elements.

    Many designers struggle with it because it’s not their job to keep track of browser inconstancies or new methods for getting element X to display in a certain way. The idea is that a designer communicates what they want to happen to the developer and the developer translates that into a way that a browser can understand.

    Oh, and it cascades so we don’t have to specify rule X 100 times over, which makes for smaller file downloads and more readable code. If you structure your CSS right then you should be able to read it and imagine the layout.

  63. Thank god you spoke up! I’ve been in the web business for over a decade and I clearly know what I am talking about.

    CSS is great but I find it to be grossly overrated and it often fails to deliver what it should deliver due to different implementations on different platforms. I am tired of “hacks” to make it work… barely!

    On the other hand, using tables have ALWAYS proven to produce CONSISTENT AND PREDICTABLE layouts. And it’s a lot more intuitive as well. We don’t need hacks. It just works.

    Also, when people talk about accessibility, do NOT believe it at all. Tables are extremely accessible even if you design it as layouts AND if you resize it, they are CONSISTENT with it. It’s like having a PDF – it scales so well. Try that with CSS, some elements don’t resize correctly and it looks incosistent. It just doesn’t look right. I know WHY they are built that way but it’s just visually disturbing.

    All that talk about accessibility is hocus pocus – funny that they preach about accessibility yet they’re silent about AJAX which literally makes parts of the webpage inaccessible! I had tested blind users and found ZERO evidence that they were prevented from accessing table-based webpages. In fact, they reported that table-based sites are more readable (because CSS elements often overlap or scale poorly).

    A well designed website can have a couple of tables for the whole page (like three columns layout) and use CSS for formatting. It is ALSO much easier to update CSS elements if tables are used as a layout. Try that with CSS – just a little mistake or just a little more text can cause CSS elements to overlap or move to the other side!

    And I am tired of divitis and classistis. The goal is to simply, not complicate yet those CSS purists don’t get it. You can have too much of ANYTHING.

    There is NO webpage with pure CSS that is rendered perfectly as expected on ALL browsers and scales so well compared to table-based layout webpage.

    CSS just failed to deliver its promise. It just doesn’t work. People who say that people who argue against CSS doesn’t understand the Web. Well, that’s the problem – they DON’T understand the whole concept of predictability, consistency, and intuition. They don’t even understand how CSS can seriously make webpages inaccessible to those who have incompatible browsers. What if it cannot read the element and it “overlays” other elements? It would not happen with table-based layouts.

  64. So, now it is almost 2009 and everybody got over that “table” thing. All the people that have been “a decade in the web business” probably forgot how much crap they had to learn to make table layouts work, now they learn CSS to do almost the same and got over it. The younger generation does it as natural as the old farts used to do tables.

    The “Dreamweaver crowd” is of course still on the wrong track and produces styles without using the cascading features … Dreamweaver is a bad tool that leads web designers the wrong way since it came along.

    However, CSS has its shortcomings, it could make things more easy. Many things that Greg stated are not valid, CSS just uses different techniques to achieve what is done differently in other systems. (For example, if you want some elements have the same width, you use their container to specify the width for child elements or you define a class that contains the width and combine classes in the elements.) Yeah, the box model is stupid, etc etc, but all this is much better than the CRAP that was before. It is almost a relevation like UTF8! Of course it is the least common dominator.

    Plus: Just like with HTML, helper and meta languages appeared to fill the gaps: SASS http://haml.hamptoncatlin.com/docs/rdoc/classes/Sass.html and HSS http://ncannasse.fr/projects/hss
    I guess this is just the start.

  65. Thank you so much for writing this. I thought it was just me losing my mind. I am a pretty smart person but I’m thinking of getting out of web design entirely because CSS just sucks so bad but Google expects it.

  66. Thanks for clarifying my exact frustrations with CSS & web design right now. Applications that support visual thinking & intuitive/creative layout would be lovely.

    I would like to also hear your thoughts on multimedia integration & codecs in websites – strikes me that this is also an area that has been de-evolving & becoming unnecessarily complex, embedding tool code acknowledged.

    Generally, I still use a mixture of CSS & tables if it works as … well, who enjoys working 19 hours a day measuring water with a thimble?

  67. Well, coming from a guy who’s new to web design, it’s a steep learning curve for me. I hate having to deal with coding on any level but I at least understand HTML code enough to interpret it. What I found with CSS, on a less technical level, is it really slows down the creative process. Seems like it complicates what should be less complicated. Now, I do understnd the logic of controlling layouts and styling throughout an entire site. But I’m way more focused on aesthetics. Maybe developers care about what code looks like behind the layout. But I doubt individuals coming to your site care. Hey, if the site looks good and I can find what I’m looking for, that’s all that matters to me. I do see how CSS can be useful in combination with tables though. Mastering CSS isn’t on my list of accomplishments in life. Creating something inspirational like an awesome site ranks pretty high though. I don’t need a huge barrier like CSS impeding me.

  68. I’m going to jump on the CSS-sucks-wagon here.

    1. I for one is does not enjoy writing duplicated code. It’s bad programming and the issue is forced upon us in CSS. Imagine writing a hack or hacks for various browsers (+ versions) which made the design compatible in some browsers (the ones you chose to support). Now what if you wanted to change the code? You had to change the code AND the hacks. Now imagine opening your project 6 months after developing it, would all the hacks and code look readable? Would it make sense? I doubt it.

    Moving on.

    2. Minus values for elements to display as you want them too? I mean, not only is it unlogical, unrecommended and WRONG (appearently wrong and right is accompanied by Mr. WHAT WORKS in CSS-based designs).

    3. Writing alot of code for something simple. Vertically centering text for a block. You could put the block in an outer block and change the position values of both blocks, THEN set the “top” value to 50% in the inner block. Imagine doing that for a series of boxes, inevitably leaving you in a mess of outer and inner blocks which does NOTHING but center your text vertically. You feel like a complete moron doing this, but you have too. Unless you use tables of course (which I use myself, I can’t be arsed with the bullcrap in a tableless design).

    My 2 cents for now, let the flaming commence.

  69. Thankyou for telling the truth about CSS.

    It is hyped up to be great but it is actually a real pain to design with.

    It is the equivalent of teaching a Artist the chemical process in making his own paint and brush.

    Designers and Artists want to Design and Create, CSS does not make the process easier, it complicates it with totally unnecessary code.

    In Dreamweaver for example you can design a entire functional web page with barely touching HTML code, if you try doing that with CSS you will just get a long list of objects.

    • Bad comparison.  Chemistry runs on one platform: the universe.  And God is perfect.  People can and do make mistakes, and CSS is one of them.

  70. I’m not a CSS hater, but it’s hysterical to read some of these posts about pure, unhacked CSS layout that is cross browser/version perfect. Bullshit! It’s not long before you reach a level of complexity in pure CSS layout that the hackery MUST begin, conditionals, IE spoofing, div soup, etc… One CSS nut even uses the term “tiny hacks” as if that’s ok, LMAO. Consistent, cross browser layouts are easy with a solid table foundation. Sprinkle in CSS styling and salt to taste and you can get on with life and do something constructive without having to check/tweak/check/tweak/….for every browser/version.

  71. The problem seems to be that almost everything we use the web for these days is a hack, in the sense that it goes beyond the original scope of the system.

    The web began as a large, interconnected hypertext system. Sites like Wikipedia are the perfect model of what the web was designed for, anything beyond that has always felt a bit broken to me.

    Trying to wrestle complex aesthetics and interactions out of html, using css, javascript etc. is awkward because it’s just adding more to what we’ve already got, rather than starting from scratch and re-evaluating what we want the web to do.

    The web is dead, long live the web.

  72. Hi,
    Thanks Greg for what to me is confirmation that CSS is not all it’s cracked up to be. I found your blog article by using Google with the search terms “CSS is shit” A technique that I use regularly to find disgruntled users of some product or service.

    I moved from Frontpage 2002 to Expression Web 2 and decided to take one of my client’s Frontpage webs with me. I was seduced by the glittering goodies. Unfortunately, I should have started from scratch!

    The website works but only in IE.

    One CSS forum I went to for help had some members who dogmatically insisted that I remove my code for a menu for which I had used DL (without the DD’s)rather than UL, rather than find the reason why the website didn’t work properly in Firefox- for example. So I have realised that it is not so simple to use CSS rather than tables. My Frontpage table based webs all work in Firefox.

  73. Yes, css has problems, tables have problems, but the main problem here is that there is no alternative technology. How can there be? If tomorrow an advanced alien civilization descends from the heavens and imparts upon mankind the gift of a perfect web standard with none of the flaws of html, tables, css, flash and pdf, but with all the advantages… how long would it take for IE or even Firefox to support it?
    Probably years. And who is going to make sites using an unsupported technology? And why then would the browser developers even bother including the support in the first place?

    Seems to me we are locked into HTML/CSS until there’s a middle link which cleanly separates content AND design from the representation while providing the mechanism to render these back into html css flash or pdf for display on our current browsers or to the new standard when it is finally available. (Also it would be nice if it required no notepad.)

    Actually, I do know how to do that – it involves servers, semantic object databases, and quite a bit of string.

  74. p.s. if you haven’t caught on, string stands for money.

  75. excellent article. HTML was easy to learn and that is why it became so popular. but CSS is a pain and is in wide use now because no other alternative exists and it’s better than using or tables.

    For example, why on earth doesn’t css have a way to specify CONSTANTS. If I want to use a font color many places in my design, i have to hard code it many times or put it in one place with a zillion selectors before it.

    I pray for either better tools or improved standards.

  76. There’s a solution out there… it’s not ready for primetime just yet, but it’s FAR superior to the tangled messes of divs and floats that CSS geeks are churning out right now, all while trying to pretend that the messes they’re creating are

    CSS tables.

    IE 8 supports them, but not old versions of IE, so that means you’d be preventing huge chunks of users from accessing your sites if you adopted CSS tables today. But after some very preliminary experimentation, I’m totally sold. It’s a far more logical, reliable way to approach page structure than any other CSS layout strategy I’ve seen yet. Hopefully, CSS tables will save us all.

  77. There are so many things to say, that i dont know where i should start from.
    From the beginning : CSS is “supposed” to separate style from content.
    What??? You mean, HTML is “content”?? Now, tell me what is a DIV,a SPAN or a BODY in the domain my information.Sorry, XML is content.Semantical web based on class names??That’s another dirty hack.
    The semantical web is a relatively new needing that looks like we’ve to deal with with tools NOT designed for that purpose.
    So, if what you’re looking for is for a truly semantical approach, go for XML/XSL.When you’re there, using tables or CSS is irrelevant.

    HTML started as a formatting language, and now, at some point, they wanted to transform it to a “semantic” language,by pulling every thing from it, and adding it to CSS.In fact, HTML will end up having just one tag:DIV.
    Then, they’ll call “semantic” one thing that comes with menus,ads,”last users who signed up”..
    (not to talk about “wrapper divs”)

    One of the most used arguments against tables is “they were not supposed to be used for layout”..A few points:
    * The whole web wasnt supposed to be used to support AJAX-based websites.
    * In the remote case floating was supposed to be used for laying out entire webpages, omg, those properties are all they come with?right,left and clear???
    * Maybe that’s why they’re “tablizing” divs, adding table based displays.The fact this comes in revision 2.1 of the CSS standard it’s the proof how much it sucks.And how much the float model has sucked all the time.
    * Because, if CSS was ready to ban tables since soo many years ago..Why this useless update?
    * No, i guess the W3C didnt add any kind of support for table-based design for a simple reason:the table tag existed.

    - Other reasons, like “bandwith” seems laughable to me.Yeah, that’s great in the “i-watch-tv-on-my-phone” era.

    About “standards”:
    - Half of those things called “standards” were “not-standard” at their moment.
    - Should technologies like ajax sit there, be ignored until the guys at the W3C come up with a standard?Is that what users want?Or your clients?
    - Now, if something isnt standard, is the nature of the http://WWW.The web nowadays has nothing to do with the WWW we had 5 years ago, not to talk 10 years ago.
    - And if the WWW is not standard, what could be said about developing for the http://WWW...
    - Please, ask the future to adhere to standards..

    For me, the core of the problem is:HTML was designed for *formatting documents* (not for “describing content semantically”).The whole web was supposed to be that.Nowadays, they want to make it replace the desktop applications.And be semantic.And accesible.And multi-device.And pretty.And…all that, by twisting the technologies involved.

    I could go on..and on..But i do like what Flash does:do you want a great looking site?Here is this tool, with its own language, development tools…What about languages other than HTML/CSS ?What is flash, if not just another parser?

    •  Why did HTML get so quickly to version 4 and then stop there for 15 years?  Version 5 is finally materializing, and it’s long overdue, don’t you think?

  78. Good analysis! I come from print design and I learned html, then javascripting and css. I have to say that I spend the most time getting css to work, first to make it implement properly for Firefox, then to beat it into shape for IE. I know I’ll get better at it, but I have to admit – I like to draw boxes (and circles too!). Usually my pictures and text are laid out in some form of grid, even if I text-wrap. I want to create a CSS drop-down menu with graphical icons, have it fixed in place, scroll the text below the menu. What would take two hours in javascript takes me four to five hours in css. Bummer!
    You can bet that Microsoft is failing to implement because they want a new standard that is easier to use. Unfortunately Adobe has the answer, but not the browser base to implement.

  79. I like some parts of CSS when combined with tables.
    The complaints about tables are unfounded though – too many designers forget that tables are containers and try to put elements in tags without putting them in tags – this is why tables mess up (forgetting the container rule) – which will display differently in different browsers. I wrote websites in the 90′s with tables (CSS never used for positioning) that always display correctly in browsers from NS 3+, IE 3+, FF, Safari, Mosaic, Opera, MAC IE. I’ve seen too many “high end” websites break using pure CSS when changing font size, browsing via an iPhone, etc. My ancient sites STILL work to this day using tables and look exactly the same in all browsers to date.
    Once you realize the CONTAINER nature of TABLES, they will always display properly. Mind you, there are tricks involved to get both X and Y to stretch, but at least the tricks work in all browsers, unlike CSS where a “trick” requires javascript and sensing of the browser type or lots of redundancy.

  80. The CSS spec was obviously created by people with no clue about computer science. Yes, I’am a computer scientist and I hereby confirm that CSS sucks. Badly.

  81. Yeah, CSS has shortcomings, I get it. It can be frustrating and confusing to work with. OK.

    A good half (if not three-quarters) of the complaints I see here are not complaints about CSS but about the problem that CSS tries to solve. If you’re asking, “why can’t it be as easy as designing for print?” then you’ve failed to understand the difference between a browser and a piece of paper.

    In the print world, if I have to have two versions of a piece, one on US Letter and the other on A4, there is no way around the fact that I have to have two totally different designs. They may look the same at first glance, but all the measurements have to be rethought, proportions have to be refigured. It might not be twice the work of creating the design for one paper size, but it’s darn close to twice the work. And every subsequent paper size requires that amount of work all over again.

    This is the Web. You don’t have any set paper size, and won’t until you find a way to force everyone to have the same size monitor and never use their iPhones or whatever. Good luck with that.

    That’s why there is markup. The challenge is not to invent the one true design that cannot change even one pixel; the challenge is to create a flexible design that retains the information you are trying to convey in a flexible manner. You can call that “accessibility” if you want, but I think that marginalizes an issue that is central to what the Web is.

    If you really want creating layout for the web to be as easy as creating for print, just make GIFs. Everyone will be able to read them. You can even make a simple HTML page with an image map for link clickability and call it a day.

    Of course, it will suck because it only contains a visual representation of your information, not the information itself. If you want the information, you might consider a markup language.

    And um… fer crissakes people, CSS is dead simple and predictable compared to issues print designers face like compensating for dot gain. If you think print design is simple, it’s because you’re diddling around with pixels on a screen while hiring teams of prepress/output specialists to fix everything you did wrong. If that’s the case, you might just as well diddle around with pixels on a screen and let a production team handle the messy details of making it work on the Web.

    Would I like a language more like PDF or display Postscript for building websites? Well, sure, but it would still have to have a flexible box model with semiarbitrary hooks for object placement. And if you think coding CSS is difficult, just wait ’til you code PS/PDF.

    I think that rather than scrubbing the stylesheet/markup model, we need to push for better support for independent vector objects like SVG, and better integration with the surrounding markup, like attributes for whether an object should be scaled if the browser window changes size and so on. It would be wonderful to start seeing SVG font implementations and the like.

    Maybe I’m missing something, but I don’t think the solution is to throw everything away and start over, but to start building the parts that are missing. That’s an evolutionary process, but one that won’t happen at all if visually-minded people don’t participate in the process of developing standards. We have no problem with sending email to Adobe or Quark when something doesn’t work the way we want it to, but when was the last time you wrote in to the W3C with your suggestions?

  82. Why are you using tables with css that just proves css is broken.

    If browers have so much problem with css thats css fault . And its not just MS , Firefox had terrible problems with legends.

    Interesting to compare Silverlight to CSS. I like WPF page layout and consistency ,if its a bit wrong it doesnt render thats good. The way it implements WPF does styles though is not that great.

    Maybe html + Javascript + css is just the wrong tool for the job of web applications and we need to look more at RIAs like Adobe and Silverlight. Time for revolution not evolution.

  83. As for the oh-so-popular claim “TABLEs were not supposed for layout”:
    http://www.barrypearson.co.uk/articles/layout_tables/history.htm

  84. I think that CSS is a good idea, but a terrible implementation. As it stands I would advocate using CSS for everything except layout/positioning. That is a task that it is appalling at.

    I fully respect that some people can do amazing things with CSS, however just because it’s POSSIBLE doesn’t meant it’s a good tool. The semantic web is about separating content from design, therefore CSS must be the design portion. If it’s for design, it should have been created to cover the common tasks people do on an everyday basis. Stuff like flowing columns of text, or… y’know… vertical aligning. Yes, these things are POSSIBLE in CSS, but they should be fundamental building blocks, not things you need browser hacks for.

    CSS fans lay a lot of blame on browsers. Fair enough, compatibility has always been a big issue. However I believe the REASON browser support is so bad is because it’s hard to understand how CSS is supposed to work. Think of the poor developers writing browsers. CSS is not suited to a procedural way of thinking. There are also cases where rules clash and precedence must be decided. I don’t know, maybe it’s clear in the spec to some, but developers are not machines. They are human. If an issue is complex, mistakes will be made.

    If CSS had been designed in a more logical manner it would have benefited both web developers and browser writers, and there would be no hatred. A simple design-only scripting language somewhat like a Java layout manager would be nice. Developers get that. If there’s a problem, you debug it, you fix it. Done. Or CSS could be as it is now, but with more common sense interpretations, e.g. “vertical-align” does exactly what valign does. In my mind if you put div A inside div B, it should visually be inside div B. Not so with CSS. You don’t even have to be trying to do something fancy. Just today I nested divs 3 levels deep with nice semantic naming, pixel widths, simple content and no funky options. The stylesheet was only 8 lines long. Two divs overlapped. I turn on borders and one of the divs has a NON RECTANGULAR BORDER. Think square brackets offset from each other. This was in Firefox 3. I see this kind of stuff all the time when I work with CSS layouts. When you see it all the time, either the browser is terrible, or standards are simply very low. I was under the impression that Firefox is meant to be one of the BETTER browsers for CSS support. So this is good, huh?

    Excuse the anger. ;) All I’m trying to say is that most good tools are easy to use and flexible. The great ones work the way you expect them to. You should be able to tell someone in the industry how to use it in a day, and they spend the rest of their days working productively with only the documentation for reference. No hacks, no how-tos. A culture of “what’s that called again” not “is that even possible” or “it looks like it should work” or “I don’t understand why I have to do it this way and not that way”.

    Good tools are productive, not difficult. If a dummy can use it, and I can use it just a little better, I’m cool with that. I don’t want to be the wise sage on the mountain that people come to for advice. I want them to be able to figure it out themselves.

    • It is not that hard to understand how CSS is supposed to work.  But it is extremely hard to understand how it works in practice.

      Example: to get an element to fill a page, set html {height: 100%} and do similarly for body and all containers down to the element  A lot of typing, but easy to understand.  Set body {border: 1px}, and the page overflows only by two pixels.  That’s also easy to understand once you know the theory, because the border adds twice to the actual size.  But now set body {border: 0; } and suddenly 20px of extra body padding appears at the top of the page.  Guess what: this is absolutely insane and no theory can explain it.  This is exactly what I mean by CSS is easy in theory but excruciatingly difficult in practice.  The fan boys are right that CSS is easy once you get the hang of it, but only in theory.  In practice, there is no getting the hang of it, only endless hacking and frustration.

      They say you need to come around to a new way of thinking, but since that new way of thinking involves workarounds till dawn, I’ll pass on it.  I’m a firm believer in clean design, and to me, painful hacks in order to get CSS to work is rank blasphemy.

  85. For all you CSS lover out there,try to do this with just your NOTEPAD- Create a tableless,JOOMLA template (or something similar,just make sure its a template) from scratch,trying to resemble,this site:http://demo.rockettheme.com/jan09/
    (I ain’t the owner though).You’ll find that you’ll be in the middle of nowhere by the time you reach your third column,trying to vertically align the slide show div as seen in the link above.NOw,once you feel the frustration,start making the same design using tables.You’d realize how much of flaws this stupid css has.

    And hey,Awesome article btw

  86. CSS is GOOD, wait for it, not for what it’s used for but what it was DESIGNED to do – yes i’m using your shitty tables argument against you CSS lovers.

    CSS – Cascading Style Sheet

    Keyword – Style, not layout!!

    Use CSS for style. Use tables for layout. Ignore flawed standards (W3C = bunch of random guys with nothing better to do).

    The only way to get an almost 100% compatible website would be to have one browser version and one mobile technology orientated version. Both of which would use tables.

    The main reason for high level languages in the first place was to make it easier for the human programmers to understand and develop. Taking a step back from that in favour of “efficiency” is like going back in time – use machine code to make your web pages if you want them to be the fastest ever. Easy to learn too, all you need is 1 and 0!

    So in conclusion, CSS is good in reducing redundancy in HTML and for defining easily changeable styling. However, style is not layout and layout should be achieved using the technology best suited for it – tables.

    P.S. I am also a Computer Scientist at a prestigious university so please don’t tell me i have no idea what i’m talking about (i also web develop for the company i am working for). Cheers!

    •  Machine code is predictable, and it works.  CSS is unpredictable and does not work at all when it comes to layouts.  I prefer 100 hours of assembly programming over 1 hour of CSS layout design anytime.

  87. “Greg, I think the problem is not exactly CSS but the lack of good CSS tools”

    I see many problem with CSS. I’m on the side of the: They should fix it.

    I think CSS is a great tool, but I also think that those who are making the standard doesn’t do much complex websites.

    #1
    Block VS Inline … not enought.
    —————

    - display:block skip a line, and try to use 100% of the width.
    - display: inline doesn’t skip a line, and will have the width of his content. You can’t use a fixed width.

    But what if I want to use a fixed width, without passing a line ?

    I must use float. But floating elements have many problem. Like when you want to center the floated elements.

    There are other display value, but they’re not supported well.

    “Solutions”:
    - Something like: Width: auto-content;

    #2
    Box model restrain us to non-fluid design
    —————

    The real width of an element is: Padding-left + padding-right + border-left + border-right + margin-left+ margin-right + width.

    That said, we often have unexpected behavior with width:100%;. Because of a border or a margin, we need to change the width to static values.

    “Solution”:
    - Width: 100% – 4px; /* 4px = margin-left+right) */

    #3:
    Code reusability : none.
    —————-

    Let take this –simplified– code:
    div#zoneSite{
    width:1000px;
    }
    div#zoneSite div#zoneMenu{
    width:200px;
    padding:5px;
    }
    div#zoneSite div#zoneContent{
    margin: 4px;
    width: 782px; /* Painful to calculate */
    }

    … and you know it can be alot more complicated in many design.

    So the width of the zoneContent div must be precalculated by hand. That’s painfull.

    “Solution”:
    - Variable access,
    - Object Oriented Style sheet

    Example of what the code should be:

    div#zoneSite{
    width:1000px;
    }
    div#zoneMenu{
    width:200px;
    padding:5px;
    }
    div#zoneContent{
    margin: 4px;
    width: 100% – div#zoneMenu->totalWidth() – this->marginHorizontal();
    }

    Also:
    ——-

    This:

    div#menuTitle{
    color:#ff0;
    font-size:12px;
    }
    div#contentTitle{
    color:#ff0;
    font-size:14px;
    }

    We have twice the same color declaration, that’s bad. (Yes, we could use multiple class for the same element, but if we have 10 class per tag element, it would be too messy.)

    The good solution should be: Variable !
    In my previous “solution”, I’ve asked for value access, but variable could also be usefull:

    var color1 = #ff0;
    var fontSmall = 12px;
    var fontBig = 14px;

    div#menuTitle{
    color: {color1};
    font-size: {fontSmall};
    }
    div#contentTitle{
    color: {color1};
    font-size: {fontBig};
    }

    #4:
    Vertical align
    ————–
    I should be able to center vertically any content.
    Table can. CSS can’t.
    Ho yes it can !
    Sorry: display:table-cell; vertical:align:..;

    What’s the point of using CSS to emulate table ?

    “Solution”:
    - … anything …

    #5:
    Center ANY element
    ———-
    margin:0 auto; is just a bad solution. It should be called a hack.

    text-align:center; Why text ? If I want to center a block element ?

    In my opinion, CSS should open a public debate for let say: 6 months.
    Then use all the suggestions, sort the good from the bad, and draw CSS 4, that would be drastically different and not retro-compatible. (A new start).

    A browser selector should be implemented in CSS so what only browser that support CSS 4 would try to interpret it.

    Here is how I see CSS4 style sheets:

    CSS#4
    {

    var color1 = #ff0;
    var fontSmall = 12px;
    var fontBig = 14px;

    div#zoneSite{
    width:1000px;
    }
    div#zoneMenu{
    width:200px;
    padding:5px;

    color: {color1};
    font-size: {fontSmall};

    content-align:center; /* Center all the menuTab */
    }

    div.menuTab{
    display:inline-block;
    width: content;
    content-valign:center; /* Center vertically the text in the tab */
    }

    div#zoneContent{
    margin: 4px;
    width: 100% – div#zoneMenu->totalWidth() – this->marginHorizontal();
    color: {color1};
    font-size: {fontBig};
    }

    … and for those who will say that I don’t speak in the right place, I just don’t know where I should. I’ve tried to become a member of the W3, but the subscription is not public.

    • the article is too hard for me to understand,i need to read more times and get some help from others.

  88. I just read the Imaginonic comment and he is right about something:

    We “should” not mix Layout and Style.

    But I understand a client to ask for a table-less design…

  89. And you should be able to wrap content into your , define your zone in HTML without the need of any tag needed for technical purposes.



    ^^^That’s OK



    ^^^That’s bad. the menuCenter div is needed because CSS doesn’t do something correctly.

    Ok, enough for me :)

  90. I agree with those who state that CSS should be used for styling, not layout.

    The main design and styling problems when using web editors like Dreamweaver or Expression Web 2 are caused by flaws in these applications. For instance, when you apply or modify an element on an HTML page, it embeds the markup in the source code in the form of class=”style1″, which defeats the idea of using external stylesheets.

    Makes you want to revert to the use of notepad…

  91. Uh, Rina… EW2 adjusts the style based on where you tell it to, such as an external style sheet.

  92. The person called Frostbyte; many comments above, stated it perfectly! Somehow “Pure CSS” became “dogma” and “unquestionable” and it suddenly reminded me of one of those totalitarian regimes that punish all dessent! Any practice that seems that way to me even remotely (especially when phrases like “You’re a newbie or dinosaur” or some other insult are used to validate it’s indefensible claims), will be rejected. Especially when the way I’ve been using for decades has been tried and true, in this case, tables for layout, CSS for unification and design. I’m glad humans are all free moral agents

  93. CSS is a horror. I can outbuild even the best CSS designers using a good html editor tool and in one tenth of the time. Everthing in CSS is a pain in the butt. Just try coming back to a CSS website a month later to make changes. It will take you days just to figure out where all the files are and few CSS designers use the exact same methodology, so if one quits, good luck!

    CSS designers are extrememly limited. They are a programmers answer to design because programers are not designers by nature. To them, a Rembrandt is broken down into paint by numbers and God forbid if you should work outside the grid.

    • CSS is not the programmer’s design; it is the communist’s design.  It works only on paper.  A tool that doesn’t let you have a sticky footer without ugly hacks is something not even a programmer wants.  VB.NET allows sticky footers, not CSS.

  94. CSS is a total nightmare.

    I just took over working on a site. I can’t even find my way around all this crap. The writing is shotty and way too broad. I can’t wait until I can delete the CSS file and start from scratch.

    Honestly I don’t care if someone needs to scale the page with their screen. It’s not about the “pretty” site, it’s about the information on it.

    CSS is a joke.

  95. So far, CSS is a pain to understand..
    I don’t even no where to start. I have been designing for nearly 6 years now, and notice the change in websites and how tables are becoming old school.

    It sucks, because when I took Web Design in college they taught us how to build are website using tables. So now it’s quiet an adjustment. I have watched tutorials on CSS and my brain is still having a tough time trying to understand it

    the only good thing is.. I have good flash skills so I am not that limited.

    but I guess css closes the gap between designers and coders, as of rite now I don’t like css, but it’s my passion for web design that makes me want to learn it, because I feel behind..

  96. The problem is not lack of CSS tools, its CSS and HTML itself. They ARE the reasons why there are no decent tools for CSS and HTML, beacause no software maker feels that they are up to the task of writing a software that would deal efficiently with CSS and HTML cross-browser. Even the giant adobe does not want to take a shot at this daunting task. Any working web editor will be code centric, or will result in horribly messed up code.
    CSS/HTML are the brainfarts of a stale comittee of old geeks. We know what a geek can come up with. As a remider, geeks are notoriously code-centric and end-user ignorant. Thats why they are called geeks. Two geeks competing for the smartest idea is even worst… just imagine what a commitee of old super-geeks will produce!
    Funnily enought, it works :) One area where they really amazingly succeeded, is sending everyone back to the text-coding method that was used before I was born (before word 1.0, before Adobe existed and all that, way before that!). I have to say this is an impressive feat, in 2010, millions of designers are resorting to text editing :) Text editing has good aspects to it, and it might be a good thing. Hopefully, in the future, when CSS/HTML will be swept away by something more human, people will remember to keep a text mode in the editors of the future, and not do the mistake that current word processors do.

  97. Just look at what people are going through, just to vertically align text inside a div:
    http://www.jakpsatweb.cz/css/css-vertical-center-solution.html

  98. Yes, CSS sucks. Thank you, Greg and commentators, for the texts on this page.

    CSS bases on relations between elements, which are adequate for programming languages, but inadequate for design.

    How could we get a better CSS?

    The guys working on the CSS standard just should imagine that a good layout needs reference elements. Before industrialization, elements mostly have been organized using a central vertical line as reference (monotheism). After industrialization, grids became common (as HTML tables spend them). Greg mentioned in his text, he liked to use a logo as reference. Technologically, it would be very, very simple to implement a kind of CSS, which allows for

    (1) defining elements in the way, CSS already supports,

    (2) defining (virtual and/or actually existing) reference elements, to which spacial relations of other elements can be specified.

    So, if it is so simple: Why don’t we have it? It seems to be an ideological issue, and a matter of division of labor.

  99. Tables arent that much better for layout.
    If you want to modify anything too complicated, you’ll end up calculating colspans and pixels on a calculator, and God help you if you go wrong somewhere.
    Whoever wronte CSS should have consulted with Adobe and other graphic design specialists.

  100. BTW (sorry for flooding the comments), wouldnt SVG be the answer to these complaints?

  101. comparing the div to table, table is far away behind from div…
    css is good… the problem is, you are not open for new things…

  102. Another CSS sucks vote here

    There are some cool things about CSS but the overall usefulness as a layout tool is way to problematic. Doesnt matter whose fault it is , it is what it is and it is a pain.

  103. If we make CSS and HTML like “Word” or “PDF” the websites even more will look like wedding cakes.

    Design. What is design? Why did I buy expensive wide monitor to have a narrow long vertical band of text on a red background? And scroll like crazy all the time down so that my finger hurts. Why I just cannot read the text and see photos on the normal wide page?

    Is it design?

    I could use a 10” monitor to read this page.

  104. I don’t mean to bash anyone here, but I do sincerely believe CSS to be the future over tables – but CSS is not as easy as it is claimed out there on the web, requiring weeks to months just to create a simple website for a small business that is cross-browser compatible. To put it shortly, designers should have tools that are in convention with the design community (pretty much anything by Adobe unfortunately); CSS standards were created by coders for coders. What’s next? Learn LaTex to format pages for magazine layouts instead of using Quark/ InDesign? Technically, LaTex is just as efficient/ faster/ better as CSS. There is not much effort to bring CSS approachable to designers; only more arcane standards for coders to devour and implement with their awful self-taught website design philosophies. And then there are those who think web content is everything. Maybe we should resort back to Benjamin Franklin style of newsletter or scientific white papers next time we read GQ.

    Should print publishing techniques be used online? I think they should be *adapted* for online audience, especially with all these interaction with video, blogs, twitter, etc. It would be irresponsible for the designer not to leverage new media (working together with the developer and back-end engineers – I salute your hard work), yet we shouldn’t forget the fundamental principles in design when we need new columns to be created on the go if the user decides to fully use his widescreen 1600×1200 monitor or condense it to iPhone display size without requiring him to use a magnifying tool. CSS can do all that and more, but it’s so counter-intuitive for the designer to use and there’s no headway to make CSS approachable, and by that I mean a new program or software to make web designing intuitive and fast. Even with Dreamweaver, I consider it to be an overglorified text-editor (yes I know, it’s an Adobe product which I mention in the first paragraph).

    I’m frustrated because CSS promised so much and when it’s time to implement, it delivered so little or required expert hacks which I have little time to commit (have other dayjobs in this economy), nor the resources to pay a web dev. to code a series of static pages. However, my biggest frustration is that I use spend more time wrestling with CSS than actually designing layouts for prospective clients, but it’s a necessary evil. All the while the CSS standards committee and zealots just toil away with standardizing features with arbitrary priorities, always listening to the coder and little regards to the designer. After all, wasn’t CSS – with its middle acronym standing for *style* – invented for the purpose of the designer? What happened to that?

    Will CSS make code leaner? Load faster? At ESPN.com their CSS code is bloating at 225KB, but granted it’s only loaded once while the new html holds content on diff. pages (main index page is 100kB, so for a total of 325kB, no images or JS). Point is, if we’re willing to make a website 300KB-800KB on initial load these days (Feb. 2010), I predict we can go even fatter in the future as more and more people have fast internet, leaving the dial-up geezers to bite the dust along with their IE6 (and older) browsers. Plus, with storage space and bandwidth costs falling per-GB, I’d venture a wild guess and say, it’s inversely proportional to content size for a 0 net effect on latency for the end-user. People are used to the load times of a bloated Word document, say 100KB vs. a super efficient Latex doc at 8KB – which is still less then 1 second for either documents, especially when the world is operating at minimum 800mhz CPU (again, another fact pulled out from my ass). We’re at a tipping point where we can sacrifice efficiency for better design and online features.

    But I do want to learn and I’m still learning CSS whenever I can because I admit I suck at it, and because some random jerk online said I just didn’t get it and that I should read a book. Unfortunately, the more I learn (and actually understand it), the angrier I get at web in general. If tables is throwing back developers back to the 90′s, CSS is throwing designers back 400 years requiring us to forge and install every individual letter on the press machine. So long typography, so long bezier curves and opacity layering; hack away image corners with photoshop and frankenstein it together with a div container of similar background-color and border, or good luck making z-index position the same everywhere (but this is more of a browser rant than CSS). I only wish the CSS community would meet the designers somewhere in the middle and hear us for standardization and features, instead of being dismissive with, “you just don’t get it,” or “go read a book.” Even painters go out and just buy the paints they need instead of making their own from scratch. I go out there and buy a CSS book and it turns out it’s even less than a cookbook – it’s a book telling you how to raise your own hens and ferment your own cheese to make Omelette du Fromage. I mean, seriously? It’s been 10 years since CSS came out and we’re still at that stage? I remember 10 years ago just being in awe watching CNET streaming video on realmedia at some awful less-than-webcam resolution, and these days we can watch entire movies in 480p on Hulu. Last time I played with CSS was in 2006, and it’s still the same build-a-loghouse-with-an-awl approach as today. I just can’t get my head around the fact that the Web/ HTML is here, and CSS is also somewhat here, and there’s not a single desktop publishing software to allow designers to concentrate on the aspect of *designing*, instead of writing “efficient” code or researching obscure hacks for basic layout. This, I predict, will be the holy grail of web design: when regular artists can tame CSS with simple and intuitive tools. And there are many artists out there, the ones formally trained in art at 4-year Universities, who are equally frustrated at CSS. I haven’t seen or met many developers coming from the graphic design/ art side, but an overwhelming majoring coming from coding or CS majors. Yes, they eat CSS for breakfast, but only few are talented and vice-versa. And between coders/developers/programmers vs. artists, both camps have too large of egos to admit their own shortcomings into each other’s areas.

    I’ll just leave it with this, from Seth Godin:

    Evolution of every medium

    1. Technicians who invented it, run it
    2. Technicians with taste, leverage it
    3. Artists take over from the technicians
    4. MBAs take over from the artists
    5. Bureaucrats drive the medium to banality

    (I’m afraid it’ll take another 10 years just to reach step 3, or better/worse, it’s already been skipped.)

    •  CSS is not as easy as the fan boys say it is.  To be precise, CSS layouts are not easy at all.  CSS layout design is more banal than anything Bill Gates could have come up with.

  105. Spot on article. Just took 5 minutes to move away from the css design i did and googled for “CSS sucks” ended up on this blog.

    10 years experience in the industry, i can honestly say that CSS is a piece of shit. It is fine if you are a mediocre/simple designer who is doing a crappy 1 div layout with a left aligned logo and simple elements below.
    Move into complex sites for a moment. Try and layout a complex page with content in Photoshop. Now expect to multiply time taken to do that by a factor of 100 (minimum) to lay out the same page in CSS/HTML. A page that contains multiple thumbnails, images, columns, paragraphs, lists and images wrapped around said columns.
    You are likely to spend copious amounts of time searching for resolutions on why X doesnt wrap around Y as expected and then the fun starts – browser hacks.
    Please dont tell me how I do not know enough about CSS and how everything magically becomes clear once you learn enough. No it bloody does not. You will always keep going back to the web to find resolutions on simple problems you encounter while laying stuff out. I did Assembly and a plethora of others. They are programming languages. They do what you expect them to do, bar errors which you make whilst programming. You cannot compare them to CSS. Imagine doing your C program then having 3 different machines produce 3 different outputs whilst you scratch your head as to why? (dont nitpick and suggest different architectures please)

    My latest problem is an unordered list whose bullet points wrap OVER a left floated image. U know what most of the resolutions on the web suggest? Float the image to the right instead! WTF?!?!?! This is css! Is it not? Do what you want no limits do anything its all great look at all the great sites out there. Wrap it to the right to resolve?!?!? Oh my god. Conform and break your design in order for it to work. Great sites whose designers spent copious amounts of time implementing hacks to make sure sites look the same across 3 major browsers. Its all crap and i hate it.

    Simple fact – increase the complexity things start braking down. Thats why we are where we are, and possibly with css3/4/5/6 things will get worse. Add another layer of complexity on an already broken platform I love it. Microsoft Blue screen of death here we come!

    Put all your CSS into 1 stylesheet to save bandwidth bull. Then spend next month constantly going up and down a massive list of styles to modify things in order for them to work. Thank god for firebug. Some people still do without, end up wasting even more time going through those massive seas of styles looking for things, fixing, amending for a hundredth time until it works “reasonably” well.

    When i draw a box in photoshop in the top left corner, then export as jpeg and open on a different machine i do not find my box 200px down the page because the JPG decoder decided thats where it should sit now, because the variable x of the pixel y is not truly grey in color. I know, bad comparison but hey, its how css works!

    Rant over. Those who suggest i go back to tables should take a shotgun and point it into their mouth. I hate CSS. Always did. I have a knack for figuring out what works and what doesnt. I tried. I really did. 5 years of CSS still the same bloody problems. I hate it aaaaaaaaaargh! Now i have to go back to my design and break things in order to conform. Im sure there are those out there who would say: “Why you crazy, you dont know enough ignorant grasshopper, you only need to spend next 10 years wading through books about CSS and its architecture in order to understand.” What is there to fucking understand? It should be clear from the code, we shouldnt have 1 milion gotchas and “if i fart on my mouse from the left at an angle of 10 degrees you will see IE move your DIV box to the right by 5 pixels”

    Enough, have to stop myself writing this crap. Hey ho, all the best in future designs people. Much love. Rasta.

    • All you’ve done there is prove how little you know about CSS.
      Seems to be a pretty consistent theme with all the people who agree with this post. That they suck at CSS…

      • You’re another b!+ch@$$ fanboi.. “That they suck at CSS…” Perhaps the reverse is true of the zealots – They Suck at DESIGN…

  106. SVG will be supported in IE9. With some good tools, this might be the end of CSS.

  107. The whole CSS vs tables is a crock; it really does seem to me as if the dogmatic advocacy of table-less/ divs only design was designed to make internet content creation less accessible to the general public, as well as articially differentiate “real” designers from “bad” ones. So yes, as some have pointed out, it’s a form of elitism.

    •  Both tables and divs violate the principle of separation of content from style.  The fan boys are hypocrites.

  108. I just love these discussions about CSS. Self claimed experts (like mrmontoya) who make SIMPLE websites think CSS is the Bees Knees. Those of us with many years in the business (as in using the internet to generate commerce) know that css sucks bigtime. We now employ designers AND web developers – and guess where the hold up is for every project: yep the web developers.
    CSS should be scrapped.
    Maybe we should employ Flash Designers to do all the jobs (then we’ll really be over-a-barrel).
    And how many times have you started to read a webpage, only to have it all jump around and rearrange, because of the stupid css crap, eh?
    (for those who say never/rarely – you dont qualify to add comments here).

  109. montoya makes a living teaching css, sneaky little… offcourse he wants us to belive it’s made of angel dust. go away.

    By far the best post here is by Daron.

    And the best one liner is by greg – “Just because you ‘can’ make a site work with CSS doesn’t make it a good tool”

    I dont think we should banish css to well (not that we can) but little steps such as rounded corners (not even atialiased… making the whole feature pointless) are not making things any better. we need big leaps – grid systems, design sematics i.e

    div .adiv {
    snap-top-border: .anotherdiv:bottom-border;
    }

    CSS is like the new jesus, bad mouth it and you’ve got it comin to ya! Give me a break!

  110. I totally agree with this article, and I’ve been building web sites for over 10 years now, have a B.S. in Comp. Sci, and worked in web development for 2 years. CSS is frustrating because it’s not intuitive, doesn’t work the same across browsers, and oftentimes just plain doesn’t work as intended.

  111. As a programmer of many years, I’ve just began using HTML and CSS, having avoided it.

    Greg’s initial points are spot on. He absolutely nails its problems and until more people see things his way, CSS will continue to evolve as a knot.

    I think Greg understands CSS more profoundly than the people that are commenting in its favour. He sees things more clearly. I expect Greg is far more intelligent than average and gets frustrated at the world.

    From the comments, I get the sense that many web designers have never used a proper language and don’t see the mathematical beauty in concepts such as type-theory.

    Recent I began using WPF and XAML. While its one Hell of a complicated object model, it is water-tight. It’s layout system is almost perfect and based on the most simple basic constructs. It is symptomatic of a design made with the fortune of hindsight. It’s also interesting to note that it is strongly-typed.

    If it compiles, it will work and if it doesn’t work, it IS your fault. Armed with these unwaivering facts, means there is never a “trick” to get something to work, it is completely deterministic. You never surf the web to work out why it doesn’t behave as expected, instead you draw a diagram and work it out.

    What’s more, it is design-oriented and yet the data and logic are separate.

    There are things that it cannot do compared to HTML; screen-readers are no good, and you can’t increase font sizes, but I think solving these problems in HTML are what slows its progress.

    Why should the language of the design be charged with responsibility of such fringe use-cases to its crucifying detriment?

    The problems are being solved in the wrong place. Increasing text size for readability for a small subset of users, just ZOOM THE SCREEN! We don’t print newspaper articles in three different sizes and make them weigh 2kgs and 6 feet wide, instead the user uses a magnifying glass! The problem is extrinsic.

    It seems some people can’t think outside of their niche, like the commentators wondering whether the alternative is to go back to “tables”. I guess it comes down to IQ. Cars are using up the Earth’s resources, oooh what about we use motorbikes?

    Anyway, great work Greg. CSS 3.0 comes out soon. The committee (oh lord) have basically just added a load of stuff and most of that now has been implemented in proprietary form by each impatient browser vendor so each CSS rule will need to carry 4 versions of the same thing for the next decade. Great. Amazing stuff. [applause]

    Luke

    • Totally agree. I think these guys that are happy with CSS don’t know jack shit about anything else and have no clue as to what programming is and how code is supposed to work.

      You may be able to, write complex web apps with ease, write join statements with 4-5 tables in half sleep, You know all CSS properties. but all that is kids stuff you know even justin bieber can do it.

      BUT, if you are a real web-programmer then you should know all the CSS hacks. otherwise you are stupid and its all your fault.

      Writing code is your responsibility, making sure it work in the right fashion is the job of the guys that make the browser. It can either be right or wrong. It can’t be right for one browser and not right for another.

      To every problem there are 2-3 different ugly hacks or javascripts fixing the issue. Solutions that don’t make any sense.

      Screw tables man nobody cares. What currently exists is screwed up and someone needs to do something about it.

  112. Never seen one topic have a four year thread before! Just wanted to say if one more seasoned professional turns around to me and says tables are slow to render I’ll stick a CSS Bible up his arse. Tables render a whole lot quicker CSS, especially when you see some of the rats nests that are being churned out by CMS systems like WordPress and Joomla these days.

  113. Several years later CSS still sucks. In fact it’s so bad that there are pre-compilers for CSS to try to address some of the fundamental issues I outlined. Things like this: http://sass-lang.com wouldn’t need to exist if CSS wasn’t so bad.

  114. Simple point, A good technology should work consistently. You should be learning the technology and not fucking workarounds. If you are spending more time learning workarounds than the actual technology, then i think its time someone woke up and smelt the potty. something is broken somewhere and it sure as hell is not me. We’ll learn all there is to learn, just make the damn thing consistent.

    It took me a couple of weeks to learn all the selectors and properties of CSS. Its been 5 years and I still keep learning HACKS everyday. every time something doesn’t work, you spend hours(=money) on it you find because some browser companies didn’t care enough YOU have to waste your valuable time.

    I have learnt so much and it let me do so many things with PHP, javascript and MySQL — but, css is totally different animal. The time you spend on it and the returns just don’t match. Point is, this is supposed to be simple and supposed to work everywhere. I think its a colossal waste of time getting CSS to work consistently.

    All you academics out there, if you valued your time you would want something better and more consistent.

    If internet explorer was a person living somewhere, I swear to god it would be SOooo sweet to give him a long and very painful cruel death *i wish*.

  115. Lets say for the sake of my argument that all browsers implement
    the rendering of CSS perfectly, since it might actually happen some day.

    That fact still would not stop the popularity of CSS
    pre-compiliers and of css grid systems like blueprint and 960.
    Their popularity tells you CSS is lacking something pretty
    fundamental.

    In my opinion the “cascade” is a failed experiment. It makes for
    very messy code when the complexity increases. In theory its
    clever, but in practice its a mess. Once you start cascading, the
    definition of a single css element is scattered all over the
    place. So people just skip it and the redundancy in their code
    grows and grows.

    Variables could have really helped. Would they have hurt? I
    don’t think so, but the standards committee didn’t want to
    violate the purity if their markup vision.

    But the biggest abomination is the “CSS box model”. This was
    created in a fantasy universe where web pages are only made of
    lovely streams of text flowly happily around pretty images in
    wildly resizing browsers and if you need any structure you can
    just simply float block elements up to the right and left.

    When they guilted us into abandoning the rigid layouts of tables
    they should have implemented a “grid model” along with the box
    model. Because they didn’t, for whatever misguided reason,
    thousands/millions of man hours have been senselessly wasted on
    this crap, especially when building web pages more complicated
    than your average blog. Not only that, but a grid system would
    have been easier for browsers to implement and given us more
    consistent behavior!

    Oh, and “if you don’t like CSS than you don’t understand it” is
    not really an argument. Sorry, but when I hear that, it sounds
    no different than somebody saying “if you don’t like scientology
    than you don’t really understand it.”

  116. @KMS: They are actually CSS variables. Check out newer specs. I’m not using them though.

  117. I love CSS most of the time, but when it comes to complex layout it’s a disaster. It’s partly the standards fault, and partly the specific browsers fault.

    3 column website with table:

    123

    Make each cell 33% and you’re gold. It scales well, looks great in every browser.

    Now show me the same 3 column.. or 4 or 5 column done SIMPLY in css.

    You can’t do it simply, there is no such thing. It’s always a hassle.

    Now try and create a 2 column website with a fixed width left column for navigation that is 100% of the page height, and a variable width right content column that expands to fill the rest of the page.

    Should be easy, right? It’s not. Unless you know the quirks, the bugs, the hacks and work arounds, you won’t simply write a quick bit of code and be done with it.

    Don’t get me wrong, I don’t use tables 99.9% of the time. I refuse. I do however believe that this blog post is in some respects correct, because CSS should make it useable, accessible, and should NOT add a ton of work and complexity to the design while allowing for a finished product that is perfect.

  118. I got bitten by the CSS-implementation issues with my blog. I had a CSS-only, no-images-whatsoever custom Sandbox theme for a long time. After hours of work and tweaking, I had gotten it to be more-or-less perfect, except for some annoying alignment issues between browsers. It looked absolutely perfect in Firefox 3 or higher if you didn’t zoom the page, but there were misalignments in Opera and Chrom{e|ium} that marred the appearance at best — and partially hid navigation links at worst!

    I’ve given up. I’m sticking with the Titan theme, and only using CSS to tweak it. Because that’s all I can count on CSS implementations for.

    Am I the only one who notices that most of the best open-standard stuff was developed behind closed doors and THEN released?

  119. I’ve just spent ten hours trying to make a CSS site work as it should. I got there in the end. I’m not stupid and I’m not incompetent. It was a few design issues that needed to be addressed. A mere hour’s work using a design tool like photoshop. With the complexities of CSS and the lack of decent design tools capable of working with CSS from the designer’s perspective has made this simple job take all night. CSS is so immature that it is unusable for anyone but a coder. My clients would laugh when I tell them why it takes so long to restyle a few on-screen elements.

  120. Ten hours seems to be the operative phrase here.

    Coincidentally, that’s the amount of time I’ve estimated that I’ve put in – so far – trying to get a goddam simple layout to work using CSS only.

    A layout that would’ve taken me minutes using tables.

    I was working on putting together a new little site and thought (since I’ve heard pretty consistently that CSS is better than tables, tables are horrible, blah, blah, blah) that I would update my skills (I already use CSS quite a bit of course, but haven’t attempted to go completely without tables before) and enter the 21st century and “do things right.”

    Imagine my surprise to discover that there just isn’t a remotely simple way to make a stunningly simple site work, across all the major browsers, using CSS only.

    I’ve even used what is probably the most sophisticated CSS framework out there – YAML – to try and get past the unbelievable number of bugs that are out there to screw up your layout. The author has apparently devoted the past 5 years of his life to getting this thing right. He catalogs more than a dozen bugs in IE alone, and he’s hacked around all of them. The details are in his 139-page manual on how to use his prewritten CSS code. He promises that your site will look the same in every browser known to man.

    Only it doesn’t. It still looks wrong in IE, and I’ve wasted hours of my life trying fruitlessly to figure out why.

    And that’s only the first problem of three on my simple layout page. I have no idea how many more hours it will take me to solve it if I continue on this fruitless quest, and can’t begin to imagine how many hours it will take to address the second one.

    Well, I give up. I understand that there are advantages to using CSS for a lot of things. This basic layout isn’t one of them. I’m using a table. And yes, in spite of having made it through an extremely technical university education (including advanced mathematics and advanced physics) with honors in 2-1/2 years, I will confess to being stupid. I’ve been stupid for wasting so much of my time and life on a technology that’s simply unsuitable for what I was trying to use it for: a very basic, simple page layout.

    • 10 hours is nothing. I’ve worked with this stuff for the last few years and can now create a simple cross browser compatible layout with CSS alone. But only after spending all of this time discovering every land mine in the book. And if you want anything sophisticated, just forget about it. You want to scale your page for different screen sizes or to create drop down menus or anything like that, forget about it.

  121. CSS totally sucks, not because of anything to do with the specifications. but the implementation across browsers.

    For years I thought I knew CSS because I knew all the CSS tags and knew what they meant. How wrong I was.

    You know what? Learning CSS how to use the selectors and tags is just the very basic start of CSS – you can do it in a week.

    The true learning of CSS is its implementation in the browsers.
    Especially in IE — You have to study it. Like deep passionate study.

    –Beating the beast–
    You’ll need to invest at least 2-3 times the amount of time you spend on studying CSS into studying IE and its implementation of CSS, the bugs – workarounds and hacks. If you are of the thinking that you will get it right in all the other browsers and then fix IE – or – I will learn about that bug when I need to learn about that bug — haha, you are so dead.

    I have more appreciation for font-end developers after realizing that they have to do the tango, jazz and hip-hop at the same time to get things right in all the browsers.

    The way to approach this is for 2-3 weeks probably an hour or couple of hours a day. Actively study IE bugs and the fixes for it. Not starting from IE 7 and up but IE6 and up.

    One revelation for me was Doctypes – and why you should be using the strict mode + the fact that, that should be the first in your html(else it triggers the quirks mode — which is basically IE5.5(WTF!?!!))

    There is a list of features that are only partially supported by IE in some versions and some are not supported. eg. IE takes width and height as min-width and min-height — min-width and min-height are not supported at all.

    I know you can keep having discussions and cribbing sessions about standards and what is not being followed. but, in the real world you’re a guy/girl sitting in front of a PC and MS is a HUGE corporation that has created crap that will last for the next X number of years.

    My advice is this. Don’t think font-end design is easy. Not because of the specifications or anything but because of the IE complications. Facts are facts. sit down and cry one evening and get over it. The harsh reality is if you have/want to learn front-end coding — you have to know IE inside out. The next time you encounter a problem — the difference will be, you will not be cursing at your monitor but you will know..

    “This is the z-index bug, this is happening because of the box model problem, this is because of the double-margin, this is because of x reason…”

    When you start to understand what the problem is, it is a very good start to reaching a quick solution.

    “If you know yourself and you know your enemy, you need not fear the result of a hundred battles.” – Sun Tzu

    So! quit the cribbing get learning. It may not seem/be right, but, that how it is – accept it. and make yourself stronger by learning more and more about how this p*ice of s*hit works!

    God bless and peace!

    •  There are too many other things to do with my time that are more valuable to learn than this piece of work.  I’ll pass.

      Newsflash: Google is not W3C compliant.  View their source.

  122. I’m convinced that CSS sucks because it was made by computer programmers. I’m a programmer myself so I know what I’m talking about.

    Just for the sake of illustration, the average person keeps their keys on the dresser, an electric screwdriver in a drawer, and their tux in the back of a closet. We organize things in terms of what we use most often. A good programmer, on the other hand, would keep the keys and screwdriver in a drawer marked, “Handheld tools, Metal” and the tux in a drawer next to it marked, “Clothing, Formal”. CSS works the same way. It takes just as much time to make an extremely elaborate, bizarre design as it does to make a simple one because every task is given the same priority.

    If the makers of CSS would just acknowledge the fact that people read from left to right, then top to bottom, most websites in the world could be written in a matter of seconds. Only the weird, complicated ones would be weird and complicated to make, which is exactly how it should be.

    •  It has nothing to do with computer programming.  I’m a programmer, and I hate CSS.  That’s a programmer’s perspective.  I’m on record for saying that programmers hate CSS.  CSS does not allow parameters.  All programming languages do.  CSS is not a programming language, and it was never designed to be one, and I don’t expect it to be.  But I expect any technology to be sane. CSS is not.

      Want to know what CSS is for?  It was designed for intellectuals.  Intellectuals put ideas before people.  CSS is no exception.  ”Design by committee” is right.  That’s exactly what it is.

  123. I found this article because I googled “CSS sucks”.

    It is increasingly obvious that browsers have the CPU and bandwidth available now to render user interfaces that are almost to the standard of dedicated stand alone apps – and yet the programmer is forced to go through ludicrous and byzantine steps to lay out the widgets in a manner that work reliably EVEN IF we decide in advance to throw out half the purported advantage of CSS (variable width variable size canvases) and design our web app interfaces to an assumed minimum pixel width canvas.

    Look at the CSS grid layout solutions like 960 grid. They work for layout because they hide all the ridiculous float/absolute/relative/padding/border cruft.

    A new CSS needs to be created that offers basic layouts like typesetting grid layouts right there at the surface.

    If that had been done at the start with HTML4, then the facebook/twitter type web interface would be entry level minimum for most web pages, instead of the most advanced.

  124. Another cosign for CSS sucks from a serious OOP developer. CSS is flat-out terrible for the job it’s used for. It has nothing to do with “not knowing enough”…I can lecture you for days on Computer Science and Software Engineering topics that are 1000x harder than CSS. It has nothing to do with learning, and CSS is not “hard”, it’s just a terribly designed tool for its purpose.

    Why? Because every other thing you need to do in CSS involves having to use some nonsensical hack. It’s the hackiest code you’ll ever write. And I’m not even talking about browser-compatibilty. Almost every interesting layout is becomes a hackfest. Make a div for no reason, clear this, float that. It’s unintuitive, not modular or extensible, code-repetitive, and brittle. It’s a nightmare.

  125. So CSS sucks, we all seem to agree :-) but does anyone have an alternative? A promising new direction? Any sign of a better future?

    •  The alternative:

      1. Some features need to be there, so add them {float: bottom; percentage: content; text-alignment-y: center; }
      2. Deprecate all hacks.  If a browser suddenly adds hidden padding when the border is zero, that’s a browser bug and it needs to be fixed, period.
      3. Add new doctype: .  Browsers may only run in CSS quirks mode if that doctype is not supplied.  Otherwise, they must render CSS according to specs without exceptions.  This will wean developers off of bug dependency.

  126. I’m like some of the commentators a programmer myself. I’m 35 and have had programming as a hobby since I was 13 and learned AmigaBASIC and AMOS on my old Amiga 500.
    I advanced to 68k Assembly language and loved it. Later, in early 2000 I learned C, x86 Assembly, and have recently played with own kernel code (have frozen it due to lack of time atm).
    In addition to those I also know html, javascript, php, and recently I learned python which I found unintuitive during the first few days, but quickly overcame that issue and find it a pretty nice language actually.

    Regarding CSS, well I have tried it from time to time during X amount of years, and I can’t say much except that the “designers” of it must be smoking something.
    So let me like most others cherish CSS:

    I hate CSS!

    (That’s a shame since I love open standards and am a supporter of free open source licenses)

    •  Wow, my thoughts exactly!  You and I have similar interests.  I haven’t hacked a kernel yet but I would like to.  And of all the web technologies, not is as frustrating as CSS.  When I design my own website, I’ll just give it a plain style and ignore CSS entirely.  A site doesn’t have to be stylish to be informative, and whenever I have come across an informative website, I’ll read it if it contains plain text.

  127. I’ve been designing websites for 12 years. I specialize in high-traffic newsmagazine sites, but I’ve worked on just about every other type of site except pornography.

    Although I’ve used CSS in my designs since 2000, I only started working with CSS for layout four years ago.

    This year, 95% of my output has been standards-compliant CSS. What’s more, I recently finished a site redesign for a rather large, high-traffic site for a major TV station.

    I can safely say that I’m no longer a novice. Yet with all my new experience I am more convinced now than ever that CSS TOTALLY, COMPLETELY, TOTALLY-TOTALLY SUCKS!

    Those who disagree simply don’t work on sites with significant traffic. I mean, to make a large site backward compatible AND work in new junk like IE9 you’re looking at weeks or months of testing and trying out new approaches to accomplish something half as stable as a 1997 table.

    The backbreaking gymnastics we go through to accomplish in CSS what could be done in one swift motion with tables is mind-boggling.

    And don’t tell me CSS is semantically superior… that tables are for data yadda yadda. A table is a grid, whereas H3 tags are header tags, not some crazy-assed toolbar. Just as list item tags are not navigation.

    I cannot believe that this vastly inferior approach to communication design became “standard.” I regret not digging my heels in more a few years ago and sticking to my guns about tables. CSS for layout is so broken that I can’t imagine it continuing for much longer, and thus we’ll all lament the wasted effort we invested in this lame duck programming language.

    • I have to agree with you.  I disagree with Greg about how the cascade idea is bad.  I like the concept itself.  What I hate is the inconsistency with the way it is rendered and the essential, absolutely vital features need to be there but aren’t (such as float: bottom).  The lack of these features force designers to use workarounds that actually militate against the very concept.  Using Javascript hacks and spacer gifs is not separation of content from style at all.  In fact, it is precisely what CSS tries to avoid without success.  Using div elements to implement style intentions that can’t be done more simply is, again, not separation, since divs are supposed to enclose content, not style.

      Experienced developers complain about browser inconsistencies.  I’ve already noticed a few having to do with default, unoverridable button padding.  But even if you pick a browser and stick to it, CSS is still very unpredictable.  I have a math site I am trying to develop for a web design course, and I have used the hack of cascading the height of a form all the way up to the html element itself.  The body contains a form which contains a paragraph encasing controls.  My current interim solution is to set a min-height for the p and 100% for the containers.  In all major browsers, this causes the p {min-height: 500px;} definition to be completely ignored.  But if I change html {height: 100%; } to html {min-height: 100% }, all the sudden the webpage collapses.  My goal is to get the form to fill the page without overflowing the margins I have set for the body element.  Also, I want the p to be anchored to the bottom of the page.  I have used absolute position as that hack, and in some variations, this will cause the p to be taken out of the form altogether.  The interim solution requires assuming that all users have room for at least 600px for the webpage, which may not be quite enough for some laptops.  If I could fill the page exactly as I wanted it, no such assumptions would have to be made.

      So you see, without the difficult hacks that only extremely experienced developers know, CSS forces you to make assumptions about the user’s environment, which both Greg and his detractors have to agree is poor design. It is not Greg who fails to understand how the web works.  It is the designers of the CSS standard themselves.  With CSS, it is difficult to develop an interface that has a precise look providing that some assumptions are made.  That is useful for some purposes, but it is not exactly how web is designed.  I understand, and for that I am willing to put up with some limitations.  With CSS, it is also difficult to develop an interface that is flexible, not exact the pixel, makes no assumptions and renders reasonably across all platforms.  Expanding an element to fit a container should not be difficult to do, whether the container is the body, the html, or the window itself.  Even iPhones should render that part right.  In short, with CSS it is extremely difficult to do anything beyond the baby basics, whether it is reasonable given the nature of the web or not.

  128. I agree that css sucks to a degree, and it’s getting worse. While css3 is bringing exciting new features, it really gets to me that browser makers are choosing to implement their own property syntax like -o-background-size, -webkit-border-radius, -moz-border-radius, etc. Why can’t they all just read the same damn property name?

    • Can’t blame the browser makers for implementing tags that are predictable when the standard ones are not.

  129. This blog entry, and the sheer, volume and quality of comments against css, scream out one thing very clearly.

    Hello, something’s not right!

  130. Thanks for your posting here, i am studying about web design so i think your blog is very useful for me

  131. Pingback: CSS is a solution for HTML layouts but it not a good solution | Rhyous

  132. everyone should start SEO this page for the keyword “CSS” not “CSS Sucks”. This page should be the first to appear in Google as long as there is “css” in the keyword.

  133. Like this thread, I dont know how many times I get into arguements about css. I find it useful for some things, very little things, but as far as design and sticking true to it, gotta say I love html, and always had…Dersk.

  134. Agree! css is not the easiest to learn and does not provide all the required features to create nice layouts. People are stuck because most want to use css as it can result in clean HTML. Most css layouts are “hacks”. There are zillions of such examples on the web. Most of the css layouts in the end depend on pixel based positioning to circumvent some of the pitfalls. I am not saying that layouts using html tables are the best, but more often than not tables work better and easier than css. I personally don’t like use table to create layouts because it is not meant for that purpose. Someone can argue with a lot of reasons why to use css as it is and grow slowly so that more people will accommodate the changes and all that. But at least when we go to HTML-5 and CSS3 some of these issues should have been visited as a fresh start.

  135. ROFLCOPTER. “Blessed are the CSS/HTML web designers who believe themselves to be technology gurus, for their burning corpses will light your way along the true path of C.”

  136. After manny years (old days) of using tables to get the website layout the way I wanted, I wanted to modernize. So I stated to learn div with css positioning. (w3c schools). It is a huge pain to create layouts. The absolute worst is aligning things in the center. Only aligning text is made “easy” but also then I have to repeat it all the time again. Aligning complete sections is an absolute disaster. I am gonna fall back on “depricated” commands and see how long it takes before webbrowser cant show it anymore. A big big big thumbs down for the w3c standard. Making it simply unneeded more complicated by depriocating some commands.

  137. Hi!

    I have worked in a “short schedule” digital agency for about 2 months now, and my point of view on HTML, CSS and JS has changed a lot since then. While I was more on the “CSS is great” point of view before, it happens that tonight I typed “CSS sucks”… Not much on the subject, surprisingly!

    But I agree with this blog post, even though it is 6 years old. Congrats, Greg. Even if I’m not surprised that many “experts” tell you they disagree.

    Ok, my biggest concern with CSS is that positionning is too complex. You have inline, block, inline-block elements. They can be put in the flow, they can float left or right, they can be fixed, absolutely or relatively positionned, you can decide what to do when elements overflow, you can set the z-index to decide which element is above another one, you can set negative values for a lot of properties (like margins), you can tell properties to be “auto” or “inherit”-ed, you can “clear” sides of floating elements… And I’m sure I forgot a lot…

    CSS is easy at first, complex at second, awful at third. The proof is that there are millions of CSS-related blog posts on the web now, and billions of CSS questions everywhere starting with “How can I do that with CSS?”. Is this the proof of a good technology? Good things are clear enough and they don’t rise endless questions. UNIX pipes are a good technology, because you can easily get the concept : a pipe allows you to send text data from a program directly to another program.

    But really, what is CSS about? Layout? Accessibility? Visual effects? Everybody’s is left alone with a headache as to what is the best way to achieve a result, what markup to use, how many SPAN and DIV to add to the markup (which is, in itself, a proof of the lack of layout choices with CSS…) for allowing very easy things like centering an element vertically inside another one, etc. When all we want to do can be explained with a pencil and a paper sheet, why do we have to fight between non-semantic and semantic tags, properties that cascade from parents to children when we don’t necessary want them to, lots of positionning options but never on the first try the one that suits our needs…?

    Well, the fact is that CSS is easy if you want to do easy layouts. But companies want complex layouts. They ask for fancy websites with JQuery animations, carrousel photos, lighting effects, “responsive design” (that’s how we sell the “media” attribute), good accessibility at times… And yes, despite all the people who just think they understand better than you what the web is about, they DO ask for pixel precision. Now, they even want Apple Retina’s screens sub-pixel precision (as if things were too simple with single precision images, thank you Apple…). Really, you have to work for a digital agency to understand why CSS sucks.

    The root of the problem, with CSS, is that you never know if you’re “Doing Things Right”, and it’s very difficult to keep the “zen” state-of-mind that allows you to know you actually master a technology. And don’t tell me that I’m a newbie, I’m doing web sites since 1996, having started with tag soup (we had the FONT tag, the transparent GIF hack, tables for page layout) and quickly evolved to CSS when it appeared… While CSS adressed this tag soup nightmare, it did it with a complex paradigm, the margin/border/padding box model, from which every positionning «hack» is a consequence.

    The fact is that, after more than 10 years of experience, I still have to find the way to code CSS efficiently, which means understanding what happens instantly and being able to do a site redesign in a very short time, like if I had a pencil and started from a blank paper sheet. We need to be able to make a layout without any positionning wizardry. Even Java Swing had layouts that we still fight to reproduce in CSS3 (e.g. BorderLayout).

    Back in the 90′s, CSS was a good idea to clean HTML tag-soup, which helped search engines and accessibility… But the layout possibilities didn’t extend when they should have. CSS3 is now redefining color gradients, walking on SVG feet…

    Layout possibilities and ease of redesign should be the major goals of any new layout and styling technology.

    Gregoire

  138. When there is only one language, all you have is dissenters and fanboys. It is clear a new styling language is needed.

    • That is so true.

  139. Six years later, CSS still sucks.

  140. Agree 100%, CSS is an abomination in many many ways and you have listed most of them. I cannot believe that we still are waiting for something better and that more of the developers who write software for the web have not found the end of the line with this despicable technology.

  141. I totally agree with this, CSS is flawed from it’s very foundations.I wonder why the W3C did such a good job with HTML5 and they did such a bad one with CSS, it’s pretty dissapointing

  142. Everyone who says CSS sucks and claim to be a professional clearly is not. If you write VALID CSS in strict mode you will find only a few things that may be different from major browser to major browser. Those “quirks” can easily be fixed.

    CSS has saved me tons of time creating websites. For me it’s been a great transition.

  143. My opinion is that HTML, CSS and Javascript are all stone age technologies and we keep using them only because we have no alternatives and not because they are so cool to use.
    If someone experienced for instance the layout-design-easiness of something like XAML or the advanced (modern and expected in the 21th century) features of languages like Java or C#, it surely can only curse when 50% of nerves and development time is spent on browser compatibility issues.
    So, the problem is that we people are lazy and no one wants to change any of these technologies and come up with something that actually works. It would take a lot of time and money surely, but big things always do. Revolutions are never easy.
    Instead what we do is to convince ourselves that Javascript is fun, HTML is perfect and CSS is absolutely superb. I really do sometimes think I don’t want to be part of the industry anymore.
    Standards are great but when will we actually learn to follow them? When will we try to solve differences in implementation so that they work the same? Can’t decide who’s implementation is better? – Flip a coin.

  144. Let’s deal with each of these basic points. I agree with most of them to some extent, but not entirely.

    1. CSS is a technological failure.
    Some CSS features work across browsers very well and others don’t. So, it’s a failure, but not a total failure. If you stick to the features that work well across browsers and avoid using the others, your life gets a lot easier in a big hurry. In JavaScript you have a similar situation.

    2. CSS is ‘markup centric’ not ‘design centric.’
    This point is true, but it isn’t always a bad thing. People with a programming background, like myself, can relate to something ‘markup centric’ much easier than something ‘design centric’. For other people, it’s a complete nightmare.

    3. Cascading isn’t a useful feature.
    Cascading can be a useful feature, but it usually isn’t. I have to honestly agree with you on this point. The added complication just isn’t worth the little bit of benefit.

    4. The box-model is too simplistic.
    I like simple. Simple is good. Maybe a few extra features for high powered designers would be nice, but the box model gets the job done for me.

    5. Each version of CSS builds on old versions without starting fresh.
    This is, unfortunately, a reality of computer software design and the web. Backward compatibility is important. The reasonable solution is to start fresh once in a while with limited backward compatibility. This can be turned into an advantage, however. Some of the old CSS features actually have a great deal cross browser support.

    6. There shouldn’t be multiple right answers for a visual design.
    Yes and no. There is nothing wrong with having more than one way to do things, but you don’t want to be inundated with them. A lot of unnecessary, redundant features can make things more complicated.

    7. CSS captures styles not semantics or design intention.
    Again a reality of software design. Computers don’t know anything about ‘design intention’. The best thing you can hope for is a system for giving them clear and simple instructions. Again, computer geeks, like me, love this stuff. We can make a stab at design without having an artistic bone in our bodies. Even if you could come up with something that reflected ‘design intention’, it would appeal to a few artists, but most computer geeks would hate it.

    8. Design should be declarative not interpreted.
    Amen brother! A computer has the intellect of a toaster. You really don’t want it making decisions if at all possible. Tell it what to do and be done with it.

    9. CSS is a pain to work with.
    True, but it’s pretty much the only game in town. After a while though, it does get easier. After you find all of the land mines and learn how to avoid them, that is.

    10. No consistancy across browsers.
    Similar to arguments in item #1. So I’ll just refer back to that answer.

    • It’s not that the box model is “too simple”. It just assumes that everything is a rectangle, which is false – it may only work to some extent in the world of novels and technical publications. It is restrictive.
      Putting constraints on the graphic artist is bad, yet that is exactly what the box model does. It somehow does the job most of the time, though.

  145. I agree with you Greg, css is a disaster!!!, and I think those that don’t agree are just fanatic that try to defend something undefendable. For example Montoya (one of first comments) says you have no experience, but I would like to tell him/her that if you run C on any platform like win32, linux or unix will do exactly the same, I think css will have work the same way an IT DOESN’T !!!, for css fanatics: try to be objective and realistic, css it is nothing but a technology accident that works like a patch for the most important invent in the 20th century.

  146. Pingback: The Pixate Project: Bringing CSS to Native Apps | Ben Galbraith's Blog

  147. HTML and CSS is a complete disaster. The only reason I put up with it is because it’s challenging. Alternatives like XUL and XAML looks interesting, but hoping for all the browser vendors to actually agree and adopt something like that seems pointless.

  148. CSS sucks?
    It does not suck at styling because that’s its job, it is style after all.
    It sucks at positioning, because that’s not its job, style is not layout.

    They wanted to split content from layout (good idea), but had no clue, so they split style instead, and sort of used style for layout and left the actual contents inside the page with the markup. *This* sucks.

    If they had really let us extract content from the HTML page instead, and put it in a separate file (or in the header) most problems would be solved. And nobody would care if you used floats or tables or flash..

    My 2 cents:
    http://www.pangoo.it/css-sucks.html

  149. CSS is absolutely horrible. The simple task of just positioning something easily on a webpage is a nightmare of complexity. A grid-based paradigm would be much easier to place elements properly aligned.

    Why has no one invented a simple (and I mean SIMPLE) way to include cleanly formatted menu bars (horizontal and vertical) with easy placement, easy update, etc? Millions of templates – all useless.

    I still use the old (equally horrible) FrontPage tool just to get the job done, because I am interested in the content of the website. I am not interested in the nonsense of “classes” other C-programming style CSS commands.

    • I’m currently working on a javascript infrastructure for my websites that replaces CSS and solves most of the problems mentioned in this article. Navigation is one of the parts of it that I’m in the process or working on. What would your idea of the ideal system for this be? Your thoughts may give me some good ideas on how to proceed.

  150. Hi guys,

    my name is Philip and i have moved from flash game development to html/css/js/php/mysql/codeigniter. I do not understand the whole CSS shit i CAN’T believe a real sane human invented CSS. Compared to actionscript where you simply give x.y and do left/right/top/bottom functions on your own, css just sux, i won’t mention ie7, IE.

    And another thing can you really make games in HTML5? Simple answer is you can’t and you won’t be able to do that.

    Instead of making our lives more simple what we do ?

  151. Thank you so much for this excellent article! I believe you have hit the nail on the head.

    It is indeed all about design intention. Neither HTML nor CSS or any combination of the two expresses design intention.

    Semantics are extremely important, so lets have a Semantic Markup Language that I can apply to simple design-centric elements.

    I am thinking a micro-format style that one can use to add any semantic meaning to the content.

    Please write more articles like this – the CSS sacred cow is in desperate need of slaughtering!

  152. Thanks for a nice article underlining *some* of CSS flaws.

    I read a good share of the comments and some people criticize your article while they obviously don’t have the background / experience to compare CSS with something else.

    My guess is that people who like CSS as it is have probably been using it for a long time, and may not have a strong [=successful] background in other areas – like C, Java etc… They are used to CSS, and after struggling to learn its rules, and how to manage to get all browsers on the same line, they just love it – a bit like the Stockholm syndrome. Now that they know (it took time) the multiple tricks and sometimes bizarre ways to get things right in CSS, they love to look condescendingly at less experienced people. Yes, they can fix any page in no time.

    But how logical and intuitive is that? It’s not. They had to visit hundreds and sites, read books after books to learn the hard way: “oh you have this problem? Try that. Ok you are in this particular case… try this instead…”.

    To people above saying “would you criticize C the way you blame CSS?”. I’m well experienced in C, C++, Java +, and in *no way* I would compare CSS and C. C is not easy to learn, but at least it’s a consistent and deterministic language.

    Anyway, just an example: “width” in CSS doesn’t include padding and borders. Tons of people try to find a solution (subtracting this and that) so that widths add up. I doubt Kerninghan and Ritchie (C creators) would have made such a mistake.

    CSS should have been designed by computer experts. Not designers.

    • You got that right. Although, I’m not sure how much of it we should blame on CSS or if we should consider it a problem with HTML. The HTML objects have their own inline styles that are just as bad as anything on a style sheet. Unless we want to lump all of this together as an HTML style problem whether it be inline on an HTML object, on an external style sheet, or on a style rule defined within the web page.

  153. That is one reason why we must admit doing things in Flash was super-awesome. They would look exactly the same everywhere! Let’s hope HTML5 Canvas brings this sweetness back :)

  154. I have to agree with your Greg. I have experience in a lot of different tools and most recently used XAML to a large extent. While not without flaws, XAML is a wonderful design language to work with.

    Recently it has become necessary to start doing more HTML/JS/CSS coding. It was something I despised. After getting back into it, I realize that I have no issue with HTML or JavaScript, it’s CSS that gets me.

    For those who come in defense of CSS, I respect your position, but let me ask you this: How do you make an element fill the remaining vertical space after other elements are sized? The fact that I have to do a google search and read dozens of different hacks to make it work speaks volumes. Worse yet, the questions and responses go at least as far back as 2003. Ten years later, people are still asking this same question.

    The fact that this is even a topic proves at the very least that there is a problem. Much of the issue is that the syntax doesn’t clearly specify what its purpose is. Take the example above in XAML, for example. You want something to fit the remaining vertical space? Just do the following: HorizonatalAlignment=”Stretch”. Trying to do the same in css? Perhaps someday I’ll figure it out.

    • Correction: VerticalAlignment=”Stretch”. ;)

      • As my websites are becoming more sophisticated, I’ll finding that CSS is becoming increasingly useless. HTML also has serious limitations, but they are a limitations I’m learning to work around.

        JavaScript is a complete blessing in all of this. I’ve spend the last few months getting skilled with it, and I’m pleased with the number of doors it opens. My next version of GeekinAround.net will have little or no CSS and future incarnations of my sites will have new JavaScript driven systems for dealing with styles, etc. For now, I’m using a somewhat jerryrigged mix of html and javascript to do what I want. It will be a little more systematic as things go along.

        One key thing I recently learned about HTML is that things work a lot better if you forget about the cascading. Create one div for the page and put all the objects inside of that. Not one inside another. With absolute positioning and use of the x, y, and z coordinates it’s possible to produce sophisticated, multi-layered layouts. You loose the benefits of floating things around, but you also loose the unpredictable behavior of screen objects.

        As for your question. If I’m understanding you correctly, you are trying to resize an object after the page has been loaded. That’s basically impossible with CSS. CSS is static, not dynamic. Once the page is loaded, it’s done. JavaScript has to be used to resize screen objects dynamically. To do any sophisticated resizing, you can create HTML objects with HTML and size them with JavaScript. Otherwise you can create the objects with JavaScript alone. This is definitely a serious drawback of CSS. There are many things like this that you simply can’t do with it.

  155. To the OP:

    Spot on.

    In fact the real problem starts with markup itself. TBL’s original idea was rather quaint and beautifully simple.
    Unfortunately, markup wasn’t the way things needed to go. What was wanted was layout, not markup.
    It should have all gone to something like Postscript, or a reduced dialect of Postscript, right at the beginning. And yes Postscript can flow, markup has nothing to do with flow despite many having misconceptions about this.

    I think this HTML/CSS combo silliness will eventually end. I think one of the things that will get rid of it is somebody will ‘spit the dummy’ and create a WYSIWIG editor that doesn’t try to do everything (like Dreamweaver does), it just tries to:
    * Get the basics right
    * Produce ultra-clean HTML
    * Produce ultra-clean CSS (or even better, LESS, the form that CSS should have taken from the beginning)

    Thus, leaving you with something you can then modify.

    After a while, some will go “So… why are we using this complicated garbage underneath?”.

    Another tool, less ambitious, that I’d like to see: Something that takes a well defined table layout and converts it to use the CSS silliness. Again, I think eventually there would be the reaction above, or similar, “So we dont use tables because tags are the wrong domain for layout…. and tell me again why I should care about this?”.

    Thanks for the post, nice to see some solidarity in the face of industry idiocy!

  156. 6/7 years on – do you still agree with the ideas you wrote? Or do you think css has changed for the better?

  157. What I find odd is that people keep saying CSS is difficult for non-programmers. As a back-end developer learning CSS, I was given the opposite line: CSS is the way it is because it was intended for *designers* and not developers.

    In my experience (15 years), real programmers have a terrible time with CSS because it’s so ILLOGICAL. The declaration names often have nothing to do with the actual effect being achieved. Sometimes the rules must be applied to completely unrelated elements!

    Apparently, designers are too stupid to understand difficult programming constructs such as addition and subtraction, so we can’t do things like width: 100% – (margin + border-size). But the esoteric wisdom of vertical alignment, overflow:hidden, negative indents, negative margins (and inside-out spheres?) must seem reasonable to all of those designers who spent the last 10 years taking LSD for “artistic inspiration”.

    No, I don’t think designers are stupid. CSS is stupid.

    The basic declarations for font size, color, inline centering, etc. are great. They eliminated 99% of the problems we had with table-based layout. The real problem wasn’t the tables, but the proliferation of redundant font tags, center tags, and so on. The W3C should have left CSS alone at that point and immediately started working on a unified specification to replace the whole HTML/CSS/JS regime. It might have been implemented by now.

  158. I notice in some of the comments on cascading. In some of my recent adventures, I’ve gained some incites into this topic that I’ll share here. Basically, I found that it was necessary in limited circumstances to group objects together. For instance, the text box on GeekinAround.net is a subpage which half of the page objects on the page belong to.

    It’s a lot like picture in picture on a television. It’s note traditional framing, but it’s my own twist on the idea. Basically all the page objects are created ahead of time and sit off screen. Then the page’s javascript engine sets their attributes to whatever I want to create the page.

    In the next version, the objects will be put in groups of eight. Seven divs inside of one other div. This new design allows for simpler creation of page objects, and for links embedded in paragraphs of text etc. The main object is absolutely positioned, but the sub objects can be positioned inline within the main object.

    This methodology requires object groupings to a limited extent, but I don’t know if it’s really cascading in the normal sense of the word. If it does use cascading, then it does so in a very limited way. I’m finding that extensive use of cascading is more of a headache than it’s worth.

  159. Greg, you mention parametric design in point #7. Not being a designer, I didn’t really get what you were referring to until I looked it up. Without realizing it, I ended up incorporating a simple version of these concepts into GeekinAround.net. I didn’t have the time to build an entirely new system for dealing with style rules, so for text, I created a style function which interprets parameters that are part of the class name itself.

    My style rules are only 7 characters long and can handle most situations relating to the formatting of text. The function that drives it is somewhat intuitive and can figure out most of the formatting based on a limited amount of information. I think I must have been channeling you when I came up with it. As I get my hands dirty, some of these “design centered” concepts of yours are making more and more sense to me.

  160. Glad that I’m not the only one that feels this way. I’ve been arguing with my husband for years that “I don’t care if CSS is supposed to better, it doesn’t feel better.” I don’t want to wysiwig everything so I don’t think design tools are the answer. They can add a layer that isn’t always necessary or helpful.

  161. I don’t hate CSS. I just hate how poorly it handles certain aspect of design. Centering, for example…
    Why does centering an element have to be a miserable process that requires troubleshooting every singe time?

    Why is there no simple align-horiz:center but instead we have to use margin-left:auto; margin-right:auto; basically pushing this thing into the center by specifying that the margins are not to be specified. It’s nonsensical. Margins and alignment are not the same thing!

    Furthermore, centering text requires different code than centering a div. And the code required to center vertically is completely different than the code for centering horizontally.

    Centering in CSS is such a convoluted process that entire articles are written about techniques to achieve it. I’m going back to using the deprecated but reliable HTML CENTER tag until CSS provides me with a way to specify alignment reliably.

    Your Reason # 7 is actually the best argument for why CSS is still not adequate for laying out pages – which is half of its purpose.
    Oh well, it’s all semantics ;-)

  162. I’m getting PhD in computer science. I’ve build programs in python, java, c, php, assembly.

    And I have to say the only program I DREAD using is CSS.

    It is as much an elegant programming language as getting stabbed is a massage.

    Every single thing is a hack. Everything is overcomplicated.

    Nothing is predictable so you can’t follow logical lines of reasoning to solve a problem in your head. You just have to google endlessly for a solution.

    It is an example of what every single modern programming language trys not to do.

    Browser companies need to implement an alternative ASAP.

  163. Lets do it a new spec… just dreaming

  164. CSS is shit.

  165. A design is as good as how simply and efficiently it addresses its design goals.
    Looking from that perspective, why css looks overcomplicated for simple needs ?
    where is its brilliance ?
    what design goal it achieves by doing things in such a messy way.
    I am a computer science student. i never seen a language so poorly designed like css.
    And it is the styling language of the web.

  166. The thing that pisses me off the most about CSS is it does things the microsoft way. The beauty of the Unix way is that if I say rm -rf /, the system doesn’t doubt, doesn’t ask me if I’m sure, it doesn’t second guess my command, it just executes it exactly as I put it. CSS second-guesses the user constantly. It should be simon says width:100%; but it is simon suggests maybe make this div bigger?.

    Try to do this: Paint france’s flag on the screen. Make it use 100% of the screen realstate. It can’t be done without awful tricks, and unclean syntax.

    CSS is fucking broken.

  167. Spot on, brother!

    CSS is a great technology for flowing text, but it’s a tragedy for layout. We desperately need a new technology for web layout.

    In my ideal world, we’d have a pared-down HTML+CSS strictly for styling flowing text, and we’d have a completely separate declarative language for layout and positioning.

    Right now, the nice thing about all the LESS/SASS style CSS preprocessors is that it’s giving people a playground to experiment with alternatives. Following that same spirit, I predict we’ll get some new layout frameworks based on SVG+CANVAS preprocessors within the next few years, and those new frameworks will finally give us a bridge to escape from HTML+CSS until the browsers natively support the emerging alternatives without a preprocessor.

Leave a Comment