If you, like me, are working on your first Drupal theme, a big question can be: Do I really need a base theme or should I start from scratch? This is an easy question to answer: start with a base theme. Why? Because even if you start from scratch, you really aren’t starting from scratch. Drupal loads in a bunch of CSS files for you. And the styles they apply make far too many assumptions. And as my 9th grade Geometry teacher loved to say: assumptions make an “ass” out of “u” and “me.”
So if you’re going to go with a base theme, which to chose? There are a ton out there, but the two I was most intrigued by were Zen and Tao, and I’m going to tell you why Tao totally beat the heck outa Zen in a very Buddhist way.
Zen – the path to (record scratch)
I started with Zen. It was very nice at first. It made me feel welcome in a foreign land. It has nice documentation. It walked me step-by-step through creating a sub-theme. I felt good. I felt confident.
After my sub-theme was established, I checked it into our SVN repository, and began coding. This was going well! I saw a lot of things I liked about Zen — A focus on accessibility, an attempt to break down CSS into logical files so you don’t have one monster CSS file, logical content regions, and did I mention the documentation!?
Heart of Darkness
But after a few days of working with Zen, theming became maddening. What had been sensible defaults now turned into a Heart of Darkness journey to find and override styles. I was spending far more time in Firebug tracking down exactly what styles were doing so they could be overridden instead of coding my site. And I couldn’t use CSScaffold, which is my CSS framework of choice, due to the way the comments were formatted throughout (this really isn’t Zen’s fault).
And while the CSS files were broken down, they are broken down in a very illogical way which requires redefining selectors in multiple files, and also mixing your screen and print styles. For example, zen has “layout.css” where you’re supposed to put all layout-related styles, such as display, margin, padding, floating, etc. But then it encourages you to put background and font styles in other stylesheets — yuck! That decision alone makes it very hard to quickly visualize what an element will look like in your “Minds Compiler”, and requires you to shift between files just to make edits to a single element. Overall, bad news.
Not so sure about ems
Furthermore, within Zen, fonts and many margins are sized in ems. I decided to go with the flow and keep using ems, which is nice if you want to support text resizing in IE6, but is a complete mess if you’re trying to establish a baseline grid. Ems turn into nasty fractions you have to constantly calculate (and recalculate if you want to do something simple like make the page text slightly larger), and the rounding errors that occur cross browser are simply unavoidable. So scratch that. IE6 only accounts for 1.5% of our users, and my brain accounts for 100% of my sanity.
No reset — the deal breaker
And then, in my opinion, the dagger in the heart: There’s just no reset. This was an intentional design decision by the creators, but in my opinion, a HUGE mistake. I simply could not get my Zen sub-theme to render consistently in all browsers, which is a direct result of no reset.
So I added a reset. But you know what? It was still inconsistent! Ack, why? Because of Drupal’s core CSS files. It was like a dream within a dream… I just couldn’t escape Firebug purgatory, and almost lost my cool with Drupal. Once again, I had found myself in assumption land, and I didn’t like it.
Tao rescues me. Or did I rescue myself?
So I went back to the drawing board. I went through a lot of the starter themes again, and still saw a bunch of stuff I was concerned about. This time around, I wanted a theme which did one thing well — reset pretty much everything so that my Drupal page looks just like an XHTML document with a reset CSS applied to it. No weird spacing, no more Drupal CSS files effing with me, and I didn’t want ANY STYLING. I literally didn’t even want default columns, tabs, yellow backgrounds for blocks on the edit-block page, NOTHING. I just wanted some very clean HTML with a reset style that made everything consistent between all our favorite browsers.
And that’s when I remembered reading about Rubik theme from Development Seed. If you don’t know, Development Seed makes the best looking Drupal sites. The Best. No question in my mind about it.
Rubik is a fantastic administration theme. It dramatically improves the drupal administrative interface by reducing visual clutter, and it looks just wonderful. It’s worth it to download and install just for it’s own functionality. And best of all: it relies on a fantastic base theme maintained by Development Seed: Tao.
As Tao says: “Tao is a base theme for Drupal that is all about going with the flow. It is not meant for general-purpose use, but instead takes care of several tasks so that sub-themes can get on with their job.” And this is exactly what it does.
It has an “aggressive reset,” provides preprocessing functions for “core annoyances,” properly splits up its files between screen and print, and unifies theme files within a “templates” directory (thank you for this alone — makes the directory structure much cleaner!).
Basically, it resets the ugly in Drupal, and kindly opens the door to beautiful design for you.
Now, I can use CSScaffold. This gives my page a beautiful grid without needing to further pollute my HTML with even more extraneous classes, as you have to do to employ 960gs or Blueprint.
I can split CSS files up into an order I think is much more logical (CSS files for the header, footer, content, blocks, etc). This means no more switching between files to edit one selector, and also prevents me from slipping into Firebug Purgatory.
And best of all — my site renders almost perfectly across browsers now.
Conclusion
If you’re just starting off, Install Zen and play with it. If you’re a casual designer and don’t care too much about whether the line-height of your fonts is off, and don’t particularly care about rigid control of you grid system (which is too bad, cus your page probably looks ugly), go ahead and use Zen.
But if you want to avoid Firebug Purgatory, clean up your code, organize it in a way that’s logical to you, and make sites that are truly spectacularrrrr, the choice is clear: use Tao.
And if you don’t believe me, take a look at Lullabot (creators of Zen), and then compare it to Development Seed. Lullabot’s site isn’t bad — I’m not saying that, but it clearly isn’t the same caliber as Development Seed. And if that’s the case, which one do you trust to make the best base theme? I know where I’m putting my money.

I’ve had similar issues with Drupal. It’s great for throwing together a quick website, but it’s a bitch to restyle things since Drupal themes/modules throw up a bunch of crap markup in seemingly random places with ids and class names a mile long to avoid name clashes. Also no jQuery 1.4, short of writing your own module and really messing with the Drupal core. I’ve had similar experiences with PHP frameworks. They have their place, but anything you build is really hard to optimize in straight HTML/CSS/JavaScript/PHP. I’ve tried to Zen out and accept doing things more or less the Drupal way, though it still bugs me.
Yeah I gotta say, I really hope Drupal doesn’t couple jQuery with Drupal Core any more. 1.2.6 was great back in the day, but that is literally over 2 years old now, which makes it a dinosaur. 1.3 offered great speed improvements, and 1.4 added more speed plus some really amazing API components, like “live” on everything. If they’re going to use jQuery, then they need to make the commitment to keeping it up-to-date IMO.
I’ve actually liked Drupal in a lot of ways, but having to use Firebug to navigate 8 levels into a DOM tree can get pretty old lol. Tough problem to solve, though, so I gotta give credit to the Drupal guys for taking on the challenge.
Jquery can be updated – there is a module for that.
For instance, I have jquery1.7.3 on one of my drupal 6 sites.
more version.txt
1.7.3
I’d like to correct myself. That was for jquery UI, which apparently is different.
(you could just delete both of my comments!
)
This was very valuable insight. Thank you for leading me out of purgatory…that place makes you feel dumb.
I came across tao in my search for zen, but never took it serious. I am very happy your article inspired me to take another look, as I am elbow deep in zen issues right now…the same issues you’ve outlined here…they are indeed maddening.
I would like to see the Drupal site you coded with Tao. Did you use other themes for layout (e.g. 960gs) or admin (Rubik)? Did you configure Tao as a sub-theme? Any other suggestions for configuring Tao for a Drupal newbie (and experienced web coder) are appreciated.
Hi JT,
We just launched the site a couple of weeks ago: http://library.unlv.edu/cml/
And yes, we’re using Rubik as the admin theme — definitely the way to go. Gets rid of a ton of clutter, and makes it so I can theme the front end for our patrons instead of worrying about getting all the back end stuff right.
And Tao isn’t a sub-theme, it’s a base theme. I have a sub-theme based on Tao called “unlvlib” which has a line in it’s .info file which reads:
base theme = “tao”
The one thing I found really tricky at first was theming views. Nothing answered my views theming questions like this article:
http://www.group42.ca/theming_views_2_the_basics
And in general I would recommend Emma Jane Hogbin’s book on Theming Drupal (it’s a really short, 30-page starter guide which is perfect to get someone with web coding experience a quick start):
http://www.designtotheme.com/ebooks/theming-drupal-first-timers-guide
Oh — and for the record, I actually didn’t try the 960gs code as a base theme because I tend to prefer CSScaffold for my CSS framework. Also, after dealing with Zen, I just really liked the minimalism of Tao.
And, I’ve never played around with using 2 different base themes, but I would think that would get pretty tricky. I would just stick to one you like, and that makes sense to you.
There is a lot of buzz about “rubik” but for some reason there is not the same for Tao as a Drupal base theme compared to Zen. Which means people learn about it the harder way.
I’d like to ask about CSScaffold, link to github repository is broken.
Sombody knows where find it?
Hi JP,
Sorry, looks like I need to update the link! The maintainer has changed the name of the project to simply “Scaffold”: http://github.com/anthonyshort/scaffold
Also, check out this awesome Drupal module which I’m about to start using, and which I hope makes working with Scaffold + Drupal much easier!
http://drupal.org/project/scaffold
Cheers,
Brian
Hi Brian,
thank you very much for very helpfull information.
Also Drupal Scaffold module looks promising.
See you,
Janusz
also for me, tao/rubik is the way to go for the admin theme, no question. and as starter theme for front end it’s tao. can’t believe it’s still kinda underestimated.
r.
This is a nice article – thanks for writing it.
Do you have any thoughts about how Tao stacks up against other base themes like Fusion, Omega, and Adaptive Theme?
Hey Erich,
If I were distributing my themes for sale, I would probably take a much closer look at Fusion — it’s got a lot of nice features in it, and it’s integration with Skinr would make it perfect if I had to hand my sites off to a client.
Right now, I work as part of a web dev team. Therefore, I went with the base theme that would give us the most control – Tao. So with Tao vs Fusion, that would be a situational thing, and I would definitely consider Fusion.
Omega is also actually quite nice, and it’s based off 960.gs which I quite like. However, I really like how Tao gives you a true reset, by not only zeroing out browser styles, but axing lot of Drupal’s frankly bad CSS. That makes it way easier to achieve cross-browser consistency, which was my big issue with Zen.
Can’t say I’ve checked out AT yet. Anyone else?
Can you explain how you use SCAFFOLD as the grid system with TAO and how you keep your html clean free of grid classes?
Thanks
HI Glenn,
I really liked your question, so I answered it with a full blog post about why and how I use Scaffold to reduce clutter in my HTML: http://brianegan.com/why-im-a-css-preprocessor-fanboy/
Also, with regard to Drupal, all I do is use Tao as my Base theme, and Scaffold in my Subtheme of Tao instead of lame regular CSS. The Scaffold Drupal module lets you import Scaffold files through your .info file just like you would normal CSS files. Simple as pie.
Wow, thanks for the full blog post. I thoroughly enjoyed it. It will definitely be helpful to many people.
So why did you choose the Scaffold module over the LESS module? Can you do grids with LESS?
Correct me if I’m wrong, but it looks like you can only do grids in CSScaffold not Scaffold?
One more thing, do you use the skinr module with the Tao theme?
Thanks again
Glad it helped!
The only reason I chose CSScaffold over LESS is because I had more experience with CSScaffold when I began my first Drupal themes for UNLV Libraries, and I’m a big fan of the Grid mixins. Today, I would probably go with LESS because it’s so simple to get up and running with and I’m in love with the watch feature. Plus, I’ve found the LESS Drupal module is a bit more mature than the Scaffold module.
Achieving grids with LESS isn’t quite as easy as CSScaffold, but it’s by no means difficult. Here’s an article on using the BluePrint Grid with LESS that should give you the general idea: http://richarddingwall.name/2009/12/28/semantic-css-grid-layout-with-less/
With regards to grids in Scaffold: looks like you’re right. I’ve been using CSScaffold, the old version, as it seems a bit more stable and feature-complete. Although I like a lot of what I’m seeing in the new version of Scaffold!
And personally, I haven’t used Skinr in my themes so far, but it’s something I’m really interested in to make it easier for others to maintain the site I’ve setup once I leave my current job.
Thanks for reading!
Brian
Since your not familiar with Skinr, here is some of my links on the subject that should help get you up to speed.
http://www.diigo.com/user/glennm/skinr
Make sure you use the 2.x branch of skinr
I think I’m going to give Tao a shot based on your advice. Is there anything I need to watch out for with Tao? like I read somewhere that someone couldn’t do the typical tpl.php overrides for nodes.tpl.php and blocks and page.tpl.php? is that true?
Does it play well with Panels? I’ve been trying to decide on which theme to use for my site. I like Tao, but then I’m left with using some kind of grid system for handling layouts. The Ninesixty and Zen Ninesixty look good, but they inject their grid classes directly into the markup which as you indicated is no good for separation of content and presentation.
One thing I do like about those themes is that they have an “ns()” function that they use to set different grid classes on a region when another region is empty. I guess you could do the same thing with a CSS Preprocessor with body classes?
The Fusion theme is where I learned about skinr and it works great, but since you set the layout settings in theme settings there is no way to override it with different page.tpl.php. You can’t have split sidebars on one page and both sidebars on the right on another.
This is why on my search for a theme.
Anyways, enjoyed the discussion.
Thanks for the links! I’ve had no problems overriding page, node.tpl.php or any blocks, views, custom content types, whatever.
And I also use panels, works like a charm.
The ns() function could be sweet, but I think, as you mention, similar effects could be achieved with body classes, and that to me makes more sense anyhow. Once again, you’re keeping your styles where they belong, which makes maintenance less of a chore.
Brian
I prefer Adaptivetheme, http://drupal.org/project/adaptivetheme, because it is focussed on accessibility and standards. Adaptivetheme for Drupal 7 is now HTML5 ! AT has many cool subthemes developed for it, one of them is the Mobile theme.
I find it easy to develop from “scratch” with Adaptivetheme. The biggest strength of AT, in my opinion, is that it is easy to port your existing HTML / CSS to AT. If you have already a site, it is easy to map your design, HTML and CSS to AT, and port it with little change.
Hi, Brian,
i just wonder if you had any troubles with Scaffold Drupal module. I’ve made a theme without any base theme, just to take a shot, and I’ve put the Scaffold instructions in my .info file. But it seems like it didn’t work, I don’t see any Scaffold specific .css file appear in FireBug. Maybe I’m doing something wrong…
And one more thing regarding AT theme, I had also problems with reseting Drupal css within Zen theme, so what about AT? I’ve made the sub theme using AT, but it looks similar to Zen – “too heavy as base theme”…
Don’t you think?
Hi Vladimir,
I have had some troubles with the Scaffold module, which is why I’ve actually switched to the LESS module. It’s just been more reliable for me.
I actually haven’t had that much experience with AT, but after playing with Zen I decided that Bare Bones was the way I wanted to go, and Tao lets me do that. However, it sounds like some of the other commenters of this thread really like AT, so I should probably give it a shot at some point.
Cheers,
Brian
Do you think Tao is obsolete in Drupal 7?
According to their README file,
The thing about both Fusion and Adaptivetheme is that they are built for narrow audiences – the peeps who want to build a CSS only theme and as a base framework for commercial themes. The vast middle ground of devs who want something they can “build up” is not catered for, because they’re not the target audience.
I am not so familiar with Fusion CSS but AT has a massive reset to override Drupals stupid core CSS (far less stupid in D7 thanks to the markup team).
One of the very neat things about Fusion is that it should be possible to import your own grid, using Skinr, but I have not tried this but I believe this something that will happen.
Look, I am biased, I built AT, but if you really want something lightweight that you can build up from near scratch then don’t choose AT or Fusion, choose something lighter like Genesis, Tao or similar, or one of the grids themes link NineSixty or the Drupal Blueprint theme – all great themes.
The best thing of all actually, is that you’re using Drupal
Wow, I couldn’t thank you more for stopping by and taking the time to write out such a great response.
After looking at AT and Fusion a bit, I couldn’t agree more. The amazing thing about Drupal is the flexibility. There are themes and modules for every situation. Just like everything on the web, pick the proper tool for the job!
Cheers,
Brian
Have you played with Genesis? I chose this over Zen because I just found it so intuitive and it does some accessibility work for you. Admittedly it’s probably more themer orientated and doesn’t reset everything, but it’s not caused me any heartache yet.
My biggest problem in theming has been troubleshooting modules that manipulate css / dom elements via javascript. (Try getting views_slideshow images to center vertically
)
Big fan of LESS; Doesn’t it just rock?
Only played with Genisis a bit, although hearing more about it I might have to play with it. Haha, and the JS affecting CSS issue from Modules is absolutely my biggest gripe as well! jQuery is awesome, but it makes stuff like that a little dangerously easy at times.
Also, LESS: Love it, love it, love it!
Thanks for reading, looks like you got a good start going to your portfolio!
Thanks for article, i had been using rubik as an admin-theme for a while.
Althought now I want to create my theme from scratch, but i have some begginer issues. Hope you could help.
Based on what i read, when im creating subtheme for tao i only need proper .info file with : base theme = “tao”. Rest should be inherited from tao folder, right?
Now in practice: it shows blank page (page.tpl.php not inherited). Anyway, after copying page.tpl.php to subtheme, it shows warning about not found template files (template files not inherited f.e. node.tpl.php)
Do u have any idea how it actually works? What files are actually inherited and which are not? What folders and files i need to put to start bulding my tao sub-theme from scratch?
Thanks
Hi Ksiar,
Sorry it took so long to get back! It’s been a wild couple of months for me.
If you’re looking for good information on where to begin, I highly recommend checking out the Drupal theming docs. They’re pretty good at explaining how the theme layer inherits files and works in general. I bet if you give em a read through you’ll realize what’s going on!
http://drupal.org/theme-guide/6-7
Cheers!
Interesting article! I am new to themeing and am looking into Omega…Do you have any thoughts on it?
Unfortunately, I don’t! Haven’t played with that one before =/ Anyone else who stumbles onto this post: I’d be happy to hear your thoughts!
I have used Zen a lot – and also am quite dissatisfied, especially with their multiple css files that I have to override at every step. I like Fusion. Tao is also good. You can also try AdaptiveTheme. They have subthemes in their root folder, that you can copy outside the root folder and start changing.
Hey Brian,
Quick question about Tao if you have a minute. With other themes, in order to get a blank node, I just do node-[type].tpl.php and then create a node of that content type. I’m trying this with Tao, and it works about 80% of the way – the content does not show up at all. I’m still stuck with the title on the page, though, which I don’t want. Any suggestion on how to remove the node title? I looked at the page.tpl file, and I could remove the title there, but that change then occurred on every single piece of content, which I don’t want.
Any help would be appreciated!
Note: Lullabot did not create Zen. J0hnA1bin works at Palantir.
I using rubik theme for Admin control and ZEN base theme for Front-end.
I like rubik and zen
I am using Zen in all my projects, never used by Tao till date, After reading this, I would love to see how Tao works and what changes do we have to make in our work.
Thanx for the comparison.
Zen is designed for beginners, we have ‘rescued’ a few disaster Drupal sites, built by people who really didn’t know what they were doing. Every single one used Zen. It is bloated and causes endless headaches.
Tao is nice, but you have to ask yourself do you really need a base theme?
More often than not you will find that you have overridden every tpl file in your master theme anyway. So you have a base theme set simply to use a handful of functions from the template.php.
It’s cleaner and more efficient to simply create a collection of functions you always use and make them your own.
We kind of developed our own ‘starter’ theme, it does include a lot of the great CSS reset functions and extra theme functions from Tao. Kudos to Development Seed.
For the admin pages I use rubik < tao or my_admin_subtheme < rubik < tao.
However, the actual theme of a site is nowadays usually my_subtheme < omega < alpha.
Omega is simply too good not to use. With delta+context it can even replace big modules such as panels! The reset stuff is there too.