David DeSandro
Updates
-
@bhaggs I keep having to zoom out to get a sense of what I'm working with.7 hours ago from web | Reply, Retweet, Favorite
-
@rolalagile awwwww yeeeaaaaaaaah7 hours ago from web | Reply, Retweet, Favorite
-
@bhaggs It's a closer-to-truth experience the design at 1x. Designing at 2x makes you a halfling experiencing everything at double size.7 hours ago from web | Reply, Retweet, Favorite
-
@bhaggs After working with 2x for the past couple days, I vote ONE EX.8 hours ago from web | Reply, Retweet, Favorite
-
11 hours ago from web | Reply, Retweet, Favorite
-
@pabloacevedo Great to hear a solution was ready13 hours ago from web | Reply, Retweet, Favorite
-
@pabloacevedo Hello! I'm not sure I follow. Do you have an example I could take a look at?13 hours ago from web | Reply, Retweet, Favorite
-
14 hours ago from web | Reply, Retweet, Favorite
-
@talbs Midi Matilda. Day Dreams. The Jam of the century.
-
Finally got around (pun!) to riding the Prospect Park loop. It's a gem http://t.co/u1Nud6pD1f29 hours ago from web | Reply, Retweet, Favorite
-
@enriquegonzalez You sir, are welcome!36 hours ago from web | Reply, Retweet, Favorite
-
@Pastorator awwwww yiiiisssssss36 hours ago from web | Reply, Retweet, Favorite
-
@seanwashington yeaaaaah, Head's up ImagesLoaded v3 will be out in a week or so36 hours ago from web | Reply, Retweet, Favorite
-
@mattwigham 7/4 Shoreline by Broken Social Scene takes that prize.39 hours ago from web | Reply, Retweet, Favorite
-
GIF is GIF with a hard G, just like the first $1000 it made on the streets shilling crack rock.44 hours ago from web | Reply, Retweet, Favorite
-
@Marchdoe Oh Doug, sweet sweet Doug. Unicorns are timeless being from another realm. That's like asking "How old is a rainbow?"44 hours ago from web | Reply, Retweet, Favorite
-
RT @inky: interesting take on the Yahoo–Tumblr deal http://t.co/UoRTeCEGBH2 days ago from web | Reply, Retweet, Favorite
-
2 days ago from web | Reply, Retweet, Favorite
-
2 days ago from web | Reply, Retweet, Favorite
-
I'm going with "wordmark." Here's the finished wordmark for @Flight http://t.co/EYKpq7UKB6 & first geometric attempt http://t.co/33HCrsMGHz2 days ago from web | Reply, Retweet, Favorite
Photos
Posts
Posts
Working on the logotype for Flight. Trying to channel the spirit of a keen-eyed James T Edmondson.
Writing JavaScript for 12 hours is cool, but lately, I've really been enjoying putting together logos for various endeavors at Twitter. It's fun to draw with markers, and not just another wireframe.
This one combines two design tropes: ambigrams and negative space. WHEEE
Check the animated version http://mlkshk.com/p/POOT
The Search & Relevance team are the folks behind Discover, Who to Follow, and Search. Occupying the SF and NYC office, they work their magic by taking the chaos that is Twitter, and weaving together a beautiful tapestry of relevant content. They smell of honey and pine cones, and they deserve their own emblem.
As seen in Going steady with Stacey
Original reference image from Meagan Fisher's vintage wallpaper pack
I like geometric type because its fun and easy. I suppose it fits the theme as this is fixed-width type as well. done in 45 min. For the dropshado.ws avatar on Tumblr.
I think it's safe to say that the demise of Delicious as a piece of intellectual property can be directly attributed to its over-simplified logo. Just four squares, with the most dull of colors.
The current logo does have its advantages. It has to hold up at tiny tiny sizes like the Add This toolbar and for favicons.
Here's a couple ideas I was thinking about on the Metro this morning. Uses the same colors. I thought the upper case "D" was a good solution as it scales down nicely to maybe 8x8. but "delicious" is branded all lowercase. So I tried out lowercase shape
I'd like to use Matt McInerney's Raleway for branding for a new site: Metafizzy. I'm not a fan of how the crossbar of the lowercase f lies below the x-height. "f" looks okay all by itself, but when put against a square-shaped letter like "z" the mis-match is apparent.
Lately Firefox has been taken a lot of heat as WebKit continues to dominate with sexier CSS features. But those users still stubborn enough to use Firefox do get OpenType ligatures when present. So Metafizzy looks all the more slick with the "fi" ligature.
With Mr. McInerney's blessing, I'm giving a shot at tweaking it myself. I'm using FontForge (with its whoa-thats-ugly-AND-pixelated interface) to go in and change the glyphs.
Playing with 3D transforms in Webkit. Works in Safari 4, Webkit nightly, iPhone, iPad. Best part is that you can animate the rotation using CSS alone. Mario images from Mario Wiki
I love Mint and I equally adore Mr. Inman's genius geometric logo for the app. As such, the favicon has always irked me as it isn't perfect, like the rest of the product.
Grab it here: http://desandro.com/files/mint-favicon/favicon.ico Use this file to replace mint/app/images/favicon.ico
Rejected logos I developed around a geometric type treatment. Going with this approach allowed to incorporate icons and imagery within the wordmark itself. The second and third treatments use all 45/90 degree angles to unify the wordmark. The fourth logo as the same angle for the M and Z slants. My favorite was the third, which combined used negative space.
Posts
Started out trying just to make an old-school fontstruction, with no 23.5 degree angles. I had another version with slanted A V W, & X, but it looked more cohesive with everything all blocky. It'd be easy to use this template and build multiple weights.
The goal was to make a blackletter font with the fewest blocks necessary. I need to add all the other symbols. Not too happy with those Z's.
Close of Rosslyn Regular. Bumped up the grid size to 16x16 so I could squeeze in lowercase characters.
Font idea taken from the typography from posters for the Smashing Pumpkins Arising tour, back in 1999. As williaum has pointed out, that font is Ironwood. It occurred to me that it would make a very easy Fonstruction. And it was! It's the perfect font for your iron-on Motorhead t-shirt decal. Named after the curmudgeon monk in "Pillars of the Earth" by Ken Follet.
Remigius wasn't metal enough. Added another pixel of vertical line width and cut the counters to just one pixel. Now it's ready for the that MAYHEM tattoo you always wanted. Clone of Remigius. Rip of Ironwood.
A rip off of "Black Slabbath" by You Work For Them. Big chunky slabs. A personal favorite.
When the half-angle blocks were first introduced I thought I would be the last one to produce an old style or transistional sans-serif typeface. Looking through the gallery, I still don't see any attempts. Creating a serif font with blocks is very much a square peg for a round hole, but I enjoyed the challenge. I tried to emphasis all the minor details, like angled stress, or the bottom terminal of the lowercase b. I spent a lot of time on this months ago, but after a while, just lost the drive to complete all the characters. Maybe you're up to the task.
Like Masphalt, the original inspiration for this one comes from Stefan Kjartansson's Black Slabbath. I think I played enough with it to make it my own. Like the two-story lowercase g and lowercase a. Squishing that middle stroke really gave this one a personality. I kept all the counters rectangular, try not to hide the hard edges. This is my first time going through the diacritics to give me a holler if you see something wrong.
This started as one of my first fonstructions, but I never got around to finishing it. The capital letters proved too vexing. But the lower case came out well enough.
Pixel font = relaxation. Less blocks to worry about makes for more fun.
Thinking of a geometric typeface, a la Gotham. Lowercase F, P, T, V, W, and Y are combo-ed with A for proper kerning. 8x8 grid
My take on Hellenic Wide, which I first saw in a Frank Chimero illustration. Some of his work looks ripped right out of the 50's and I love it. The capitals all fit pretty well into the FontStruct schema. I'd like to revisit this one sometime to see if it would work with a lighter stroke and skinnier character width.
Another experiment in breaking down the letterforms, trying to use the simplest shapes that would still hold true to the characters. Uppercase characters look fairly good, but the lowercase get a bit unreadable.
Inspired by the cursive aesthetic from pauldhunt's lovely Structurosa Script. I tried to play around with the kerning so there's the illusion of a continuous line.
Recent tracks
-
Baby by {'mbid': 'fb821608-35fd-4a45-a4b2-1a0537cee111', '#text': 'She & Him'}7 hours ago
-
Never Wanted Your Love by {'mbid': 'fb821608-35fd-4a45-a4b2-1a0537cee111', '#text': 'She & Him'}7 hours ago
-
Hold Me, Thrill Me, Kiss Me by {'mbid': 'fb821608-35fd-4a45-a4b2-1a0537cee111', '#text': 'She & Him'}8 hours ago
-
I've Got Your Number, Son by {'mbid': 'fb821608-35fd-4a45-a4b2-1a0537cee111', '#text': 'She & Him'}8 hours ago
-
I Know It's Over (2011 Remastered Version) by {'mbid': '40f5d9e4-2de7-4f2d-ad41-e31a9a9fea27', '#text': 'The Smiths'}12 hours ago
-
Please, Please, Please Let Me Get What I Want by {'mbid': '40f5d9e4-2de7-4f2d-ad41-e31a9a9fea27', '#text': 'The Smiths'}12 hours ago
-
Day Dreams by {'mbid': '69591c7e-405f-4ace-8c81-22276107908a', '#text': 'Midi Matilda'}16 hours ago
-
Stranger by {'mbid': '69591c7e-405f-4ace-8c81-22276107908a', '#text': 'Midi Matilda'}16 hours ago
-
By The Firelight by {'mbid': '69591c7e-405f-4ace-8c81-22276107908a', '#text': 'Midi Matilda'}16 hours ago
-
Love & The Movies by {'mbid': '69591c7e-405f-4ace-8c81-22276107908a', '#text': 'Midi Matilda'}16 hours ago
Top artists
Top tracks
-
79 plays
-
67 plays
-
65 plays
-
61 plays
-
59 plays
-
55 plays
-
54 plays
-
54 plays
-
53 plays
-
52 plays
-
50 plays
-
49 plays
-
49 plays
-
49 plays
-
48 plays
-
47 plays
-
46 plays
-
45 plays
-
45 plays
-
45 plays
-
44 plays
-
43 plays
-
43 plays
-
41 plays
-
41 plays
-
41 plays
-
39 plays
-
39 plays
-
39 plays
-
38 plays
-
37 plays
-
37 plays
-
36 plays
-
36 plays
-
35 plays
-
A New Poetry by Zwan35 plays
-
35 plays
-
34 plays
-
34 plays
-
34 plays
-
33 plays
-
32 plays
-
32 plays
-
32 plays
-
32 plays
-
32 plays
-
31 plays
-
31 plays
-
31 plays
-
31 plays
Posts
For the Astronomy Picture of the Day.
Black background. All typography is executed with Palatino. Plenty of type variation with italics, small caps, bold, all-caps. Explanation body text is restricted to 600px wide, for better legibility. Navigation links on bottom look like navigation links. Body width is restricted to 900px to give the entire content some cohesion and bring the site out of 1998.
The style works well in other pages, like the calendar and archive, and also holds up for nearly every photo going back to 1996. There are some quirks, like Flash content might have no top margin.
This is a full-site user style that aims to pretty up all sections of Craigslist. I attempted to address every detail of the site, in order to provide a more legible and aesthetically pleasing experience. At the same time, I preserved much of the basic style of Craigslist. Don't expect anything too radical. It's still gray/white background, blue links.
* Default font is changed from the browser-default of Times New Roman to Helvetica Neue/Arial.
* Extra spacing and a greater leading has been added for better legibility.
* Front landing pages have been tidied up and is now presented in three columns. All those tiny blocks are gone.
* Perhaps the biggest difference is that Table-of-Contents and Listing pages are now only 700px wide. This setting greatly improves legibility for long blocks of text. However, any listings that employ in-line styling with a custom width might have content that extends outside the new skinnier width.
Last updated 10 Aug 2009
v0.3 / 16 Oct 2009
* Modified buttons, all states styled: active, hover, inactive, focus, drop down clicked
* Thick border thinned down to 1px wide
* No ads, but right-sidebar utility links are still available
* Increased font-size in side bar navigation
* Compose Email text-area restrained to 540px wide
* Slight gradient over menu bar and email rows
* Increase padding around email rows and menu bar
* Underline removed for links, visible on roll-overs
Compatible with all Gmail themes.
@skrell I left plenty of comments in the CSS so you can tweak it to your liking. To return the Compose Mail textarea back to full width, just delete these lines:
/***** keep textarea for emails skinny ******/
td.d7 div[style="display: block;"] {
max-width: 540px;
}
Requires Helvetica Neue Light, so Mac only.
Now that Google has increased the font size in the search bar, the resulting aesthetic feels a little bit clumsy. Refining this look, this style simply addresses the text in the search bar, the suggested results, and the actual search results. Support for every Google domain out there.
Nothing says "get it done" like a big dumb sans-serif. Large Helvetica Neue Light (for Mac kids in their ascots), stylized tabs, cow removed.
In case the font is just too big, you can set it to you liking. The property to look for is :
.xtd_text, .xtd_entry input {
font-size: 24px !important;
Fixed width, Helvetica, less beige.
Only works with "Txpish" style selected in the user preferences.
Complete re-styling of Textpattern Resources at textpattern.org. All blue and green boxes have been wiped out in favor of minimal styling, following the default Textpattern branding. Fixed width at 960px.
If you like this one be sure to check out a similar user style for the Textpattern forums - Textpattern Forum - Tabula Rasa
For all my fellow userstylers. Typography is primarily with Gill Sans - sorry Windows people.
I'm a bit perplexed that userstyles.org has some fairly userstyle-unfriendly mark up. Where are the wrap/container divs? Consequently, it's not perfect, but I think its an improvement.
Posts
conclusion
Next week I start a new chapter, working for Twitter. As such, I'd like to say a couple things about my current employer for the next 4 days, nclud. As I am still in the infantile age of my professional career as a web designer, I feel ever so grateful to have been a part of this team for the past three formative years.
I was hired by Martin and Alex back in August 2009. I was surprised when they first reached out. At the time, my only professional experiences was at the internship I was currently attending. My body of work comprised mostly of side- and student projects. Somehow, they saw potential in me. I am certainly lucky that they saw anything at all.
Over an introductory lunch, Alex and Martin succintly communicated that nclud was a sort of lifestyle company. They were small for a reason. They were in DC for a reason. They fervently played Mario Kart every afternoon for a reason. nclud had a clearly defined identity and culture. One that I identified with.
I was entralled to be a part of the team. For years, I had been outside of the professional web community, and now here I was, getting a chair at the table, rubbing elbows with the same people I so strongly admired. Joining nclud made me the sixth full-time employee. I went from intern to 17% of a company.
Since that summer 3 years ago, the job has been everything I could have hoped for. I have worked for the best clients, creating the most exciting work, and enjoying all the fun in between.
It all worked together. Because nclud respected the creative endeavors of its employees, we were able to indulge in side projects. It was these side projects that got the attention of some high-profile clients — clients that cared about the craft of web design, that were excited by the same concepts we tinkered with. The culture facilitated a healthy self-sustaining feedback loop of experimentation and recognition.
Alex and Martin supported my decision to start my side-business. They didn't see it as distracting from my work at the day-job. They trusted that any success I would achieve on my own would eventually translate into success at nclud. They were right.
In 2007, when nclud was first founded, the web design community still had the impression of a small, tightly-knit group of hackers and typography geeks. Now SXSWi has an attendence of tens of thousands and the evening news leads with announcements from the latest Apple event. Web design is ever-present. It has ascended so far into the mainstream, we can forget that every byte and every pixel must have been crafted by an individual constiuent of the web design profession.
The amount of bytes and pixels nclud has contributed to the Web is infinitesimally small. But I envision its spirit in the community as inversely enormous. I hope others recognize the small sliver of success we carved out and subsequently identify a part of themselves that matches that same ambition.
nclud started out as two guys who thought they could do the job better on their own terms. Not only did they do the job better, but they made the job itself better. I'll always have that lesson, where-ever my path leads.
Masonry/Identity
It’s October. I am standing in the beer line at Brooklyn Beta. Around my neck hangs my conference badge. Under my name, my description explains the reasoning why I belong there, and why my acquaintance is possibly worth making. Along with boastful exaggerations of my coding prowess, it details that I developed Masonry. I recognize this snippet as my go-to factoid when introducing myself.
“Ever heard of jQuery Masonry? Yeah, I made that.”
True to the badge description, it honestly is the reason why I am there. Brooklyn Beta Conference co-organizer Cameron Koczon runs Gimme Bar. As Gimme Bar makes use of Masonry, Cameron was kind enough to invite me to the conference.
Gimme Bar uses Masonry. Pinterest uses (their own version of) Masonry. Delicious uses Masonry.
With these high-visibility web properties making use of my work, it’s now a part of my identity that I can share with people outside of the web profession. To my wife, Masonry was long regarded as the mysterious ‘boxes” project that her beau was constantly tinkering with. No longer. Now that she’s a Pinterest user, Masonry layouts are a familiar concept to her.
It is at this time in Brooklyn, I realize that Masonry has out-grown my authorship. It shares a place among other simple JavaScript resources now commonplace across the web, like Lightbox or FancyZoom. It’s another tool web developers have at the ready. Masonry belongs to everyone.
In the spirit of democratizing Masonry, I have developed Vanilla Masonry. Vanilla Masonry is the pure-JavaScript flavor of Masonry. It shares the majority of features with it’s jQuery counterpart, all without the filesize bloat of a full-scale library. From it’s foundation-level base, you can develop a custom fork to suit your own motives, as some have considered. Now Masonry can go anywhere.
I've been working on Masonry for about as long as I've known I wanted to be working in the web, nearly three years now. Today marks two years since the version 1.0 release of jQuery Masonry. I'd like to think that after all this time, all the hours spent coding, across three versions, I can dust off my hands and close the book on Masonry. But as I consider it's place, I see it's an integral part of who I am as a developer. As I grow in my profession, so does the project. So in a way, I hope Masonry never is completed.
Original image: Mean me by Pierre Vignau
Original image: Mixed Blue Headshot 2 by Fensterbme
Made with Processing. View code.
Here's the canvas version of Undulate. The original version was realized with CSS transforms on plain ol' <div>s. This approach caters to iOS devices, which can take advantage of hardware-acceleration via 3D CSS transforms. iOS devices perform pretty poorly with animated canvas. Getting that out of the way, this canvas version performs snappily on the desktop, so it can handle more particles.
Now that I know the name for it, particle systems have been my thing for a long time. You provide a set of rules and parameters for the constructor or class, throw in some sort of variation, and the result appears complex. But it's just the forest from the trees.
This was an accident. I mistakenly reversed the incremental direction of the segments. Instead of breaking as it should have, it resulted in this organic serpentine form.
I’m not exactly sure of the math behind its movement. Each segment is trying to catch up to the one before it, but in the opposite direction. The most interesting shapes are formed, not when you whip around the cursor as one might expect, but when you move slowly. The small differences between segments gets amplified, producing expanding curvatures.
As much as I appreciate well-structured content and finely crafted visuals, I find interactive experiments like one more compelling. While it may lack in any substance, its ability to entertain is what keeps me on the page. Like someone else built the car, but I get to drive it.
In its most banal form, the web is a library. We should build more ball pits and water slides.
I’d like to show you my fruit sticker collection.
I love fruit stickers. They are the favicons of print design. In the space no bigger than a thumbnail, they must display an identifying name and number, and establish a brand.
These were collected 5 years ago, while I was studying abroad in London.
Stemilt fruit had lovely stickers. They used every square micrometer efficiently, squeezing in a logo, an illustration and three text elements. The ladybug fits perfectly in the the pull tab.
These Chilean Royal Gala will perhaps always be my favorite. The yellow/blue/red color palette is attention-grabbing, reminiscent of vintage product packaging. The androgynous portrait still makes me wonder. Who is supposed to be? Why put him/her on fruit? Is that a star shape on the hat? Is this person a communist?
Tragically, a couple years ago, fruit distributors started printing a new kind of sticker. While the fruit name and number were still visible, the majority of the area was devoted to a hideous barcode. I imagine this was a usability concern. How many times have you been held up in the grocery line because your checker didn’t know the code for a Braeburn? I guess the idea was that she would be able to just scan it in, like every other item in your cart. To this day, I have yet to witness any checker scan in my fruit.
The visual aesthetic of my collection was ruined. Areas of this collage were consumed with ugly barcodes, spreading like a growing tumor.
My new strategy is to purchase fruit without barcodes if possible. For a while, these New Zealander Jazzes were my go-to fruit. They had a great crisp texture, bright tart taste, and most importantly, a beautiful sticker.
Here’s where my collection currently stands. I’m resorting to covering up the barcodes and exposing only the designed portions. Those Stemilts, which once were a delightful decal, have been contorted to the point where the ladybug is hardly recognizable. I was excited to find the blue and white Royal Galas. The photo doesn’t do it justice, but the stickers are actually reflective. It’s encouraging to see that some distributors haven’t given up on fruit stickers.
Close with canvas
If it weren’t for Rob Hawkes’ well-illustrated presentation on the canvas element, I might have never started playing around with the imageData feature. As Hawkes illustrates, to retrieve pixel values, it’s as easy as defining the area that you want to examine, much like rendering a rectangle. The more abstract part is parsing the data object that gets returned. I could get into the nitty gritty, but it's probably a better idea to check out this basic demo and get your hands dirty for yourself.
Now enlightened, I was able rediscover a favorite motif of mine: pixel manipulated portraits. The concept comes from Chuck Close. I have been to the MoMA and seen Mark and Lucas in person. The portraits are enormous. Up close, you only see the rings and diamonds, a hundred fish-eyes staring back at you. As you pace back, the grander image becomes visible. You forget that the details that make up hair strands and wrinkles are somehow an array of rings and dots. I love the contrast of the simple and the complex, how an image so detailed and intricate can be composed of such rudimentary components.
The images below are basic exercises with of that paradigm (just foolin’ around stuff). I wanted to deconstruct each portrait to the point where your eye can’t decide whether to look at the basic shapes or the person’s face. I used this technique to generate the portrait for my flavors.me page. I thought it fit nicely with the flavors.me brand of pixelation. The original images were licensed under Creative Commons and are appropriately credited to the original creators.
Update 22 Sep 2010
After getting better acquainted with using images and canvas, I revisited this project and produced a working script anyone can use. Close Pixelate converts an image into an pixelated HTML5 canvas. This project lives on GitHub where you can download the script and these examples: github.com/desandro/close-pixelate.
Going Steady with Stacey
And we’re back! After months in the making, desandro.com v2.1 is live.
For those of who are reading this via feed reader, I apologize for the big blip with the feed.
The site is now running on Stacey. It’s pretty neat! Working with Stacey is not just changing flavors of CMS, it’s an entire paradigm shift. Content and templates no longer live within a database that is accessed through an admin section. Instead, the entire site is managed through the file system as a basic collection of files and folders. Every time I want to publish a new article, I create a separate folder and with required text file. Explaining the setup to Dan, he appropriately responded “Why would you ever want to do that?”
Simply put, the typical CMSs that have risen to popularity in the past decade have were designed for a different kind of site. They expect to display multiple entries of content with similar views. My site, and the many others like it, break from this mold. For each entry, there is a unique view. After maintaining my site through one of those CMSs (Textpattern) for the past year, it became clear that it wasn’t the right tool for the job. Stacey addresses several of the biggest hang-ups I encountered.
Everything on the site lives together in one happy home. The files are grouped together by entry. For a site like mine, where each entry has its own particular resources like CSS, JS, images, etc, this is especially beneficial as I don’t have to hunt down the whereabouts when I want to make a change to a component of the entry. The content, the presentation, the behavior all live in the same room. I realize this goes against everything I have ever read or have learned about best practices, MCV, or what have you, but it makes so much more sense when I’m working with it in practice.
As the entire site exists as a complete entity with a separate database, I can get to any part of it through nothing more than Finder and TextMate. The workflow of publishing content is condensed into just working with text files, and not having to work with the CMS itself. No adding content to an entry, no adding filenames to custom fields to link CSS or JS, no FTPing said files to the site structure.
As a complete entity, the whole thing can go under version control. Leveraging Git, my workflow has thus been condensed to: design and develop entry. Then publish the changes via Git. I can rest assure that my local copy of the site is the exact same one as the live site.
The templating language, even as simple as it is, allows for enough flexibility to accommodate some creative solutions. Both the article section and portfolio section have their own variety of variables I employ. It’s much like Expression Engine in this regard, where each section has its own content-type and I don’t have to worry about one impeding on the other. That’s something I couldn’t say for my old CMS.
Prior to discovering Stacey, I was considering building my own sort of CMS. Knowing some basic server-side includes, I could do the templating thing, but I faltered when I considered how to handle caching, feed syndication, and comments. Fortunately, Stacey addresses two out of three. And I could live with losing comments.
But that’s not to say that Stacey is the ideal solution for most sites. Even with the all the issues it alleviates, I do have hesitations recommending it as a solution to anyone else.
The cunning simplicity of Stacey which makes it great, also provides for its greatest frustrations. As liberating as it is working primarily through a text editor, I could understand how perplexing it could be to anyone who is well acquainted with a typical CMS. There are no plugins, no templates, no admin section. If you want paginated archives, you’ll have to hack it. If you want to display images 1, 2, 3 and not 3, 2, 1, you’ll have to hack it. Flat out, there’s a lot of functionality that you might expect (comments, pages, sorting content) and Stacey doesn’t have it.
Lucky for me, it’s a great fit.
Opera Logo with CSS
The Opera logo, rendered only with CSS, no images. Compare it with the real deal.
Best viewed in Firefox 3.6+, Safari 4+, Chrome 5+, [Updated 17 March 2011] and Opera 11.1+.
Aside from another shameless plea for attention, this demonstration gives me a chance to look at some CSS3 properties across browsers.
[Updated 18 March 2010] After this post started gaining some momentum on the tweets, both Håkon Wium Lie and Jan Henrik Helmers produced their own Opera 10.5-friendly versions using inset box-shadows to recreate the gradients.
Border Radius
In all the tutorials and hubbub over CSS3, elliptical border radius is one of those features that hasn’t been given enough attention. It’s syntax is easy enough: instead of using one value, two are used. First value is horizontal, second is vertical (following x & y, just like other 2-D values like background-position). Important to note is the difference between the Mozilla, Opera and Webkit values. Mozilla uses a slash, Webkit uses a space.
-moz-border-radius: 220px/235px;
-webkit-border-radius: 220px 235px;
border-radius: 220px/235px;
Regular ol' border-radius is not just a vanity property anymore. Opera 10.5 and Internet Explorer 9 both support border-radius, no vendor-prefix necessary. For these browsers, the shape will not be perfectly oval, but at least be mostly round. Note that the border-radius property should come first, as it will overwrite preceeding -webkit-border-radius properties in Webkit browsers. Opera’s own Vadim Makeyev and Petter Nilsen did a good job of looking over my shoulder to point out that Opera 10.5 support elliptical border-radius.
Lars Gunther then followed up regarding the proper ordering of properties. I had overwritten the default border-radius with the vendor-specific owns, but as Lars discusses the best practice for this scenario, border-radius should be the ultimate property.
The extra fun use-cases to consider are the Webkit and Mozilla browsers that support border-radius, but not the elliptical variety. Take for instance Camino 2.0. Given the code above, it has no property to fall back on, and will render the shape as a rectangle. So do you add yet another border-radius property?
Gradients
While Firefox lagged Webkit browsers with supporting CSS gradients, the extra time it took doing so was well worth it. Mozilla’s gradient syntax is more intuitive and easier to remember. If it’s just a simple two color gradient, the Mozilla syntax goes angle, color, color. Webkit’s implementation requires more deliberate code with its positioning and colors.
background: #800;
background: -moz-linear-gradient(-90deg, #F88, #800);
background: -o-linear-gradient( #F88, #800);
background: -webkit-gradient(linear, 0 top, 0 bottom, from(#F88), to(#800));
This difference is emphasized when working with multiple colors. Take this example, from the large fill area, which has 3 additional color-stops:
background: #E71616;
background: -moz-linear-gradient(-90deg, #FE878A, #E71616 50%, #800000 80%,
#800000 85%, #b80304);
background: -o-linear-gradient( #FE878A, #E71616 , #800000 80%,
#800000 85%, #b80304);
background: -webkit-gradient(linear, 0 top, 0 bottom, from(#FE878A),
color-stop(50%, #E71616), color-stop(80%, #800000),
color-stop(85%, #800000), to(#b80304) );
Of course, a default color should be supplied for graceful degradation. Using a text editor with proper syntax highlighting is a huge help here, making sense of all the business going on between all those parentheses and commas.
Looking at radial gradients, it’s much of the same. The Webkit values can grow cumbersome easily. Mozilla provided some sweet helper constants like cover and contain so you don’t have to worry about sizing the radii perfect to fit whatever size you’re working with.
Box Shadow
Box shadow properties are consistent between browsers. Apart from the vendor prefixes, the properties are exactly the same.
-webkit-box-shadow: 0 100px 30px hsla(0,0%,0%,.2);
-moz-box-shadow: 0 100px 30px hsla(0,0%,0%,.2);
box-shadow: 0 100px 30px hsla(0,0%,0%,.2);
Here I’m using the HSLa color value, which I’ve found to be easier to tweak when designing on the fly.
Resources
I find myself turning to the Mozilla Developer Center for reference on the new properties and values. In addition to comprehensive overviews, it also details the differences between Mozilla and other browser implementations. In fact, it was through the MDC that I found the Safari Reference Library. Googling “mdc” with the property in question will get you straight there, so you can avoid the multitude of zombie CSS blogs.
PROTIP: when Googling for CSS3 values and properties, be sure to leave off the initial hyphen. “-moz-linear-gradient” will be interpreted as NOT moz-linear-gradient thus yielding no results.
Also useful is the Western Civilization CSS3 Sandbox, which has tools for trying out gradients, text shadows, box shadows, text stroke, and transforms. Especially helpful is the ability to change between Webkit and Mozilla syntax.
Possible practical reason for CSS shapes?
Resolution independence. Go ahead and page zoom in to see how the shapes hold up with no pixelation.
Conan Asks
All I ask is one thing, I’m asking this particularly of young people that watch. Please do not be cynical. I hate cynicism… It doesn’t lead anywhere. Nobody in life gets exactly what they thought they were going to get. But if you work really hard, and you are kind, amazing things will happen.
— Conan O’Brien
White hot glowing text is the new lens flare
By abusing the text-shadow property, you can turn any ho-hum bit of text into a magnificent, radiant beacon of allure and awe. But getting your bling-bling on has never been for the cheapskates. Expect to pay a boatload in refresh rates, as your browser buckles under the weight of rendering that glorious halo.
Here’s how it was pulled off:
#content h2 em {
color: #FFF;
text-shadow: 0 0 150px #FFF, 0 0 60px #FFF, 0 0 10px #FFF;
}
jQuery Masonry v1.0 Released
jQu ery
Masonry
version 1.0
Released 7 December 2009
Infinite Scroll support
Multi width column support
Automatic fluid rearrangement
No extra markup inserted
Advice Ouroboros
I only truly learn something by failing at it first. This experience is unique to me. That’s the pitfall of advice. There’s no way to transfer it to someone else, so that person can fully appreciate the lesson learned. I could offer my own experiences and the listener can try to absorb something worthwhile. But personally,
I have a hard time giving out advice. The only advice I would offer is to take any piece of advice with a grain of salt. Which is why
nclusion
Next week I start at nclud, thus commencing my first days as a professional web designer. It’s the culmination of a career transition that has consumed my life for the past two years. I’m so excited to be working with great people who produce stellar work, but also to be able to work as a designer. It’s exhilarating to think that this moment has finally come. It was not long ago that I was fantasizing about being employed at a place like nclud.
Flashback a couple years: I was your typical post-college graduate working at a nondescript corporation, pouring endless hours of what-should-have-been my most fruitful years into a job that left me with little emotional reward. What scared me most was that I felt trapped in that place. All my chances to escape my current career were already behind me, so I simply had to play the cards I was dealt.
If anything, I hope my story stands as an example that it is possible to take hold of your life, escape your uninspired job and start doing work that you care about.
You can read up more of the details about my journey in this month’s issue of FullBleed, where I’ve been featured as the Fresh Face for August. Stephanie Hay wrote a great article on my career transition and a bit on my design philosophy. It’s an honor to be a part of FullBleed. The ADCMW and its contributors have been publishing terrific articles and creating a consistent source of worth-while content for fellow web designers. Its another example of the great content that makes me feel fortunate to be a part of the DC area design community.
Introducing Gmail Vitamin: a userstyle
Jon Hicks aptly identifies Gmail as the Holy Grail of userstyles. And rightly so—it is incredibly popular, yet it has enough visual quirks to ensure that absolutely no one is happy with its appearance. As such, there are hundreds of Gmail userstyles available. For a while, I held off on attacking the project. But after months of clicking those buttons encased in that awkward thick border, I had enough. Something had to be done.
As you can see, I didn’t want to completely overhaul the interface. Google apps are generally innocuous, an aesthetic I appreciate as the design facilitates the functionality fairly well. All the tweaks I put in place are concerned with resolving some specific quirks that I just couldn’t stand anymore. The buttons are now softened and the 4px border around the main content has been reduced to 1px. I also took consideration to add more padding around most items, as advocated by Khoi Vinh. For a full feature set, you can read all of them on the userstyle page.
I do realize that the Gmail team makes frequent revision to the markup, and I hope to keep this userstyle up to date.While I tweaked the design with either the Classic Gmail theme in mind, the userstyle is compatible with all other themes. In the likely case that you’re not 100% happy with my fixes, I added enough comments so that any user can go in and remove certain styles line-by-line. I, for one, like having no underline for my links until I roll-over them. But I could imagine that others might need those links always underlined, especially when using the other themes.
As with previous CSS themes, all the gradients were generated with the Quickie Canvas. Here’s the script for the glossy buttons:
var grad = ctx.createLinearGradient(0,0,0,h);
grad.addColorStop(0, '#FFF');
grad.addColorStop(.5, '#E8E8E8');
grad.addColorStop(.5, '#DADADA');
grad.addColorStop(1, '#F5F5F5');
ctx.fillStyle = grad;
ctx.fillRect( 0, 0, w, h);
Now about those buttons…
If you’ve never looked under the hood of Gmail, I recommend giving it a try. Open up Firebug and see if you can properly overwrite the background color of any element. The markup is incredibly deep and intricate. It’s mind-boggling at first, un-collapsing an nH div only discover that there are no less than four more nH divs contained within it. And the epitome of this byzantine markup is the Gmail button.
In February, then-Google-lead-designer Douglas Bowman unveiled the new multi-function buttons for Gmail. I do have to tip my hat: it was a tremendous achievement that Bowmen was able to create a pseudo-rounded-corner box with pseudo-shading and make it all work even in IE6. But in order do so the markup for just one button is the following:
<div id="" class="goog-imageless-button goog-inline-block goog-imageless-button goog-imageless-button-collapse-right goog-imageless-button-primary">
<div class="goog-inline-block goog-imageless-button-outer-box">
<div class="goog-inline-block goog-imageless-button-inner-box">
<div class="goog-imageless-button-pos">
<div class="goog-imageless-button-top-shadow"> </div>
<div class="goog-imageless-button-content">
<b>Button text</b>
</div>
</div>
</div>
</div>
</div>
I bother bringing this up because I can think of no better example for the case of progressive enhancement. Hacking seven elements to get a faux version of rounded corners and gradient shading seems to be like throwing the baby out with the bath-water, especially considering that the same effect could be better achieved solely in CSS. If Google embraced progressive enhancement, they wouldn’t have to go to such lengths, producing a monstrosity of markup all for a single button. IE6 users would be still get buttons, theirs just wouldn’t be as pretty.
The Gmail buttons are a bit of a Rube Goldberg contraption. But with options like userstyles and Greasemonkey scripts available, I guess I can’t complain. All I’m asking is they make it a little easier next time.
Prototyping with the canvas element
Since the beginning of 2009, HTML5 has become the hot topic in the web design community. Everyone is excited to try out the new elements and join in the fun. While I too am interested in playing with sections and asides, I'm a bit disappointed that the new canvas element hasn't been more prominent in all of the HTML5 hullabaloo.
In brief, the canvas element enables designers to create images using programming and geometry. I realize this might not be a big deal to a good amount of designers out there. If you live in a world of Photoshop, Illustrator, and all around GUI, you might think its completely backwards to create something visual through pure code. For example, take Cedric Dugas:
The canvas tag was created in a response to those who wanted pixel drawing in html. It feels like Flash 5 without any graphic UI. Seriously I gave it a try, Unless you are really good in mathematic formulas, don't expect to do great things on it. Most front-end developers are not well versed in mathematic programmings, which means we'll probably never use this thing as it's too complex to work with, or will only use a plug-in.
I can sympathize with Cedric here. When you are solely a web designer who doesn't have to dabble in development, you are conditioned to rely on GUI. Most of your day is spent pointing and clicking, selecting options, arranging layers, and navigating through multiple levels of dialog boxes. So I understand the repulsion to a tool that can only be manipulated via code and scripting.
But I doubt that most designers are only 'visual' creators, shackled to GUI. More often, a web designer's skill-set extends through a decent amount of front-end development. Chances are, if you ever wrote a couple lines of JavaScript, then you can get your head around using the canvas. If not, the canvas element might be an ideal place to get your feet wet with programming. The results are purely visual, so you have immediate feedback on whether or not your code is working.
Currently, I think most designers view the canvas element as either for weird, experimental designs, or boring pie charts and bar graphs. But I've been using the canvas in a much more practical manner — to generate simple UI graphics.
As I see it, using the canvas element in this manner has several clear advantages over traditional GUI applications like Illustrator or Photoshop:
1 Pixel-perfect rendering: When I'm creating a simple small icon, I have a real tough time making sure there is no anti-aliasing. Aligning shapes and lines to the pixel is like picking up grains of sand with chopsticks. It feels very clumsy to be placing shapes and anchor points specific to the pixel. And there's also the whole issue of dealing with cropping. But relying on the script for the canvas, there's some confidence gained in the code.
2 Image output: To extract a PNG from the canvas element, just right click on the canvas and view the image. Skip over exporting and file management.
3 One less app: Opening up Photoshop just get a new gradient is such a drag. Using the canvas element means you only have worry about another text file. And if you're using the Quickie Canvas, then you only have to worry about another browser tab.
4 Text accessibility: GUI is great because all the attributes you see are represented within some other panel or dialog box. But navigating through all these boxes can be a chore. Especially if you're making slight changes. Using scripts for a canvas element eliminates all that chrome, so you can easily identify and change specific attributes and values.
5 Data URI: This is a game changer. The canvas element outputs data URI. So when you view just the image, you'll see the raw data in the address URL field (Firefox 3 only, Thx Shwetank). The next step is to take that URI and plug it right into CSS. You just skipped right over any sort of file management. The downside is that the data URI could be extremely long, and it looks really messy sitting inside the stylesheet. But this practice makes for very quick prototyping. For the past year there has been plenty a-clamoring about skipping comps in Photoshop and jumping in with HTML and CSS. Using Data URI images fits right into this methodology.
On top of those reasons, you now have at your disposal all the advantageous of generative art. Move over Joshua Davis.
With all these advantages in mind, I developed the Quickie Canvas. It's a simple web app that uses jQuery to generate canvas elements, basically skipping over all the HTML muck to get one to render on the page. Any time I need a gradient, drop shadow, button, or shape, I just load up another tab in Firefox and get coding. As proof of my method, I'm providing the code to all the images used on this site.
Examples
I am still working out all the kinks with some of these examples. All of them were originally rendered in Firefox 3. I've discovered several discrepancies between it and Safari/Opera. If you're using IE, I'm sorry to say I couldn't get excanvas working properly.
Drop shadow
Maybe this is just my fault as a feeble designer, but trying to get Illustrator to export a drop shadow like the one shown here is especially difficult.
var grad = ctx.createLinearGradient(0,0,0,h);
grad.addColorStop(0, 'rgba(0,0,0,.15)');
grad.addColorStop(.3, 'rgba(0,0,0,.05)');
grad.addColorStop(1, 'rgba(0,0,0,.0)');
ctx.fillStyle = grad;
ctx.fillRect( 0, 0, w, h);
Navigation Gradients
Shown at 940 x 196, but was actually rendered at 1440 x 300.
var s = w/6;
var colors = new Array("#F8A","#3D8","#EB2",
"#8AF", "#C66", "#C4C" );
for ( i=0; i<=5; i++) {
grad(i*s, colors[i]);
}
function grad( x, color) {
ctx.fillStyle = color;
ctx.fillRect( x, 0, s, h);
}
var lingrad = ctx.createLinearGradient(0,0,0,h);
lingrad.addColorStop( 0/h, 'rgba(255,255,255,1)');
lingrad.addColorStop( .73, 'rgba(255,255,255,0)');
lingrad.addColorStop( .87, 'rgba(0,0,0,0)' );
lingrad.addColorStop( 1, 'rgba(0,0,0,.1)' );
ctx.fillStyle = lingrad;
ctx.fillRect( 0, 0, w, h);
D Favicon
var grad = ctx.createLinearGradient(0,0,0,h);
grad.addColorStop(0, '#E79');
grad.addColorStop(1, '#B46');
ctx.fillStyle = grad;
ctx.beginPath();
ctx.lineTo(1,1);
ctx.lineTo(8,1);
ctx.arc(8, 8, 7, -Math.PI/2, Math.PI/2, false);
ctx.lineTo(1,15);
ctx.lineTo(1,11);
ctx.lineTo(3,11);
ctx.lineTo(3,4);
ctx.lineTo(7,4);
ctx.lineTo(7,11);
ctx.arc(8, 8, 3, Math.PI/2, -Math.PI/2, true);
ctx.lineTo(1,5);
ctx.fill();
ctx.closePath();
Diagonal Stripes
For the repeating background image seen here. This examples was rendered at 20 x 20, but the height and width values can be manipulated to produce different angles and sizes.
var color1 = 'rgba(255,0,0,1)';
var color2 = 'rgba(255,0,0,.2)';
ctx.fillStyle = color2;
ctx.fillRect( 0, 0, w, h);
ctx.fillStyle = color1;
ctx.lineTo( w/2, 0);
ctx.lineTo( 0, h/2);
ctx.lineTo( 0, 0);
ctx.moveTo( w, 0);
ctx.lineTo( w, h/2);
ctx.lineTo( w/2, h);
ctx.lineTo( 0, h);
ctx.fill();
ctx.closePath();
Grain
Be careful with this one. The formula runs for every pixel, so it can get crash your browser at resolutions greater than 300 x 300
for ( ih=0; ih < h; ih++) {
for ( iw=0; iw<w; iw++ ) {
var alpha = Math.random()*.07+.04;
ctx.fillStyle = 'rgba(0,0,0,'+ alpha + ')';
ctx.fillRect( iw, ih, 1, 1);
}
}
RSS icon
// orange gradient
var grad = ctx.createLinearGradient(0,0,w,h);
grad.addColorStop(0, '#D80');
grad.addColorStop(.5, '#FA3');
grad.addColorStop(1, '#D80');
// orange background w/ gradient
var r = 2.5; // corner radius
ctx.fillStyle = grad;
ctx.beginPath();
ctx.arc( r, r, r, Math.PI, Math.PI*(3/2),false);
ctx.arc( w-r, r, r, Math.PI*(3/2), 0,false);
ctx.arc( w-r, h-r, r, 0, Math.PI*(1/2),false);
ctx.arc( r, h-r, r, Math.PI*(1/2), Math.PI,false);
ctx.fill();
ctx.closePath();
// circle bottom left
ctx.fillStyle = "#FFF";
ctx.beginPath();
ctx.arc( 3.5, 10.5, 1.5, 0, Math.PI*2, true);
ctx.fill();
ctx.closePath();
// quarter circle lines
ctx.strokeStyle = "#FFF";
ctx.lineWidth = 2;
ctx.beginPath();
ctx.arc( 2, 12, 6, 0, -(Math.PI/2), true);
ctx.stroke();
ctx.closePath();
ctx.beginPath();
ctx.arc( 2, 12, 9.5, 0, -(Math.PI/2), true);
ctx.stroke();
ctx.closePath();
Previous/Next links
I was also able to swivel the arrows around for the up/down links for my portfolio.
function arrow(s, x, y, angle, color) {
ctx.save();
ctx.translate(x,y);
ctx.translate(s*1,s*2);
ctx.rotate(angle);
ctx.translate(s*-1,s*-2);
ctx.beginPath();
ctx.fillStyle = color;
ctx.lineTo(s*1.8,s*0);
ctx.lineTo(s*.8,s*2);
ctx.lineTo(s*1.8,s*4);
ctx.lineTo(s*1,s*4);
ctx.lineTo(s*0,s*2);
ctx.lineTo(s*1,s*0);
ctx.fill();
ctx.closePath();
ctx.restore();
}
var r = 5;
arrow(r, r*0, 0, Math.PI*0, "rgba(0,0,0,.2)");
arrow(r, r*1.2, 0, Math.PI*0, "rgba(0,0,0,.2)");
arrow(r, r*0, 40, Math.PI*0, "rgba(0,0,0,.6)");
arrow(r, r*1.2, 40, Math.PI*0, "rgba(0,0,0,.6)");
arrow(r, r*0, 80, Math.PI*1, "rgba(0,0,0,.2)");
arrow(r, r*1.2, 80, Math.PI*1, "rgba(0,0,0,.2)");
arrow(r, r*0, 120, Math.PI*1, "rgba(0,0,0,.6)");
arrow(r, r*1.2, 120, Math.PI*1, "rgba(0,0,0,.6)");
This article's background
In this example I did 800 iterations, but the image I used has 4800 iterations.
var color1 = 'hsla(330,30%,92%,1)';
var color2 = 'hsla(0,0%,100%,1)';
ctx.fillStyle = color1;
ctx.lineWidth = 1;
ctx.strokeStyle = color2;
for ( i=0; i<=800; i++ ) {
//randomize values for placement and size
var x = Math.random()*w;
var y = Math.random()*(Math.random()*.75+.25)*h*.9;
var s = 5+Math.random()*Math.random()*Math.random()*100;
var theta = Math.random()*3.14;
// render boxes on the left
ctx.save();
var x1 = x-w/2;
ctx.translate( x1, y);
ctx.rotate(theta);
ctx.translate(-s/2, -s/2);
ctx.fillRect(0,0,s,s);
ctx.strokeRect(0,0,s,s);
ctx.restore();
// render the same boxes on the right, so it repeats
ctx.save();
var x2 = x+w/2;
ctx.translate( x2, y);
ctx.rotate(theta);
ctx.translate(-s/2, -s/2);
ctx.fillRect(0,0,s,s);
ctx.strokeRect(0,0,s,s);
ctx.restore();
}
One step up from doodling
After reading about Michael Bierut’s sketchbooks, I was compelled to find the blank-page composition books the prolific designer extolled. Sure enough, the local office supply store didn’t have them, but I was able to find composition books with graph paper.
Getting my hands on one, I could see how any creative person could latch on to these. The saddle stitching makes for pages that open easily and lay flat. Best of all, they are tremendously cheap. The low price means you don’t feel guilty about filling in the pages. Any idea is worth putting down.
Discussing his own sketchbooks, Frank Chimero emphasized the importance of thrift:
For sketching, I have a three-ring binder with hole-punched copier paper. Cheap, awesome. And, you don’t feel bad documenting your bad ideas, because, c’mon. It’s cheap paper. Getting the first, awful ideas out of the way is crucial for me, and if I document them on paper, I feel like I’ve acknowledged it and can move on to better things. If I had nice paper and a nice sketchbook, I’d be paralyzed to make the first idea good or great.
I feel you there, Frank. I have plenty of unfinished and empty Moleskines sitting around to back up his statement.
For now, I’m pretty happy with working on the graph paper for sketching. My wanderlust handwriting desperately needs the guidance of the horizontal rules. The grid lends itself to wire-framing websites. If the illustration adheres to the grid, it can be quickly reproduced digitally. Using the graph paper also facilitates the creative thought process. Instead of facing the intimidation of a completely blank page, I am encouraged to work within the grid. So there are less design decisions to worry about. Each shape or proportion makes sense as long as it fits on the graph paper.
I break out the sketchbook at lunch break and during down times. The simple act of putting pen to paper is a sort of meditation. I think of it as a more sophisticated form of connect-the-dots. It’s mindless and easy, just one step up from doodling.
The graph paper has reignited an interest with FontStruct, a web app to create modular fonts. Oddly enough, it takes me longer to sketch out the letters on graph paper, than it does to create the same font block-by-block with FontStruct. But I’ve discovered that drawing the letters has opened up new ideas for characters and styles.
These experiments in typography result in ugly, awkward letterforms. For now, I try using only circular curves and straight lines. By keeping the shapes simple, I don’t worry about making the ideal typeface. I’m not trying to make the next Gotham. It just feels good to draw something.
Granularity
I
find
comfort
in
the
granularity
of
web
design.
Everything
you
see
and
interact
with
can
be
broken
down
and
sub—divided
into
small—
er,
simpler
component
parts.
No
matter
how
complex
or
intricate
the
work
becomes,
it‘s
all
just
a
bunch
of
carefully
selected
characters
placed
in
a
particular
order.
Textpattern Interface Case Study
Ever since John Hicks released his custom theme over a year ago, I’ve taken up the pet project of redesigning the Textpattern admin interface. Now that I’ve released some of these themes, I thought it would be appropriate to discuss my process and what challenges I faced.
Motivation
Aside: While I was drafting this article, Wion released a terrific post regarding the Textpattern back-end. I recommend you read it as well. He provides some historical context and he goes into detail about what elements he would fix. If you are interested in getting involved in the a possible Textpattern redesign, go ahead and chime in on the current forum thread.
Why change the Textpattern interface at all? The general consensus from the community was that, while not the most attractive back-end, Textpattern does look okay, and more importantly, it gets the job done. If it ain’t broke, don’t fix it.
While the design of Textpattern wasn’t necessarily broken, I do feel that it fails in one specific area. The look of the interface does not properly represent the brand of Textpattern. Now that I’ve been using TXP for several years, I’ve come to think of as sleek, efficient, modern and easy-to-use. But when I look at the back-end interface, I do not see those characteristics reflected in the design. The tabs look a bit clumsy as the drop shadows are too opaque. The text fields feel dated with that grey background. In short, it feels old, like it would have been the best blogging solution five years ago, not the flexible, modern CMS I’ve come to know it as.
Words and phrases that characterize Textpattern
- minimal
- sleek
- nimble
- efficient
- convenient
- easy to use
- flexible
The main goal of my themes was to help close this gap between the design and the brand of Textpattern. The themes wouldn’t just be some shiny new chrome—a redesign just for its own sake. Rather, each detail would have to emphasize the great qualities that make up TXP.
Tab-ula rasa
My primary focus of re-designing the Txp admin interface always began with the tabs. The tabs are the principal navigation element. As I already stated, I wasn’t too big of a fan of the drop shadows. But there’s a bigger issue here: both rows of tabs are too similar to one another. There are only two characteristics that separate the primary row from the secondary row:
- Primary tabs are placed on top
- Primary tabs are colored a slightly darker yellow
Apart from that, the user has no other visual cues to distinguish between the elements. Shape, size, and behavior are all the same. This is a Gestalt issue. Since the tabs are so similar in appearance, we want group them together. Consequently, differentiating between secondary and primary items is all the more difficult.
I was also reminded of Dave Shea’s article, Get in Shape. In it, he specifically addresses this issue with primary/secondary navigation. When you do not consider the entire composition of both elements, it can result in awkward shapes that do not seem to relate to one another.
I used different shapes, colors, sizes to distinguish between primary and secondary tabs.Facing this dilemma, I tried to use different characteristics for the primary and secondary tabs: size, shape, color, and position. To emphasize the child-parent relationship between the two rows, I found the most successful technique was to use tab shapes only on the top row. This is a typical design pattern I saw used with other popular CMS like Wordpress (the 2.5 release) and Expression Engine. Two rows of tabs reminds me too much of a bad Microsoft UI. My favorite solution to the two-row tab problem was the convention of using a heavy bottom border for the secondary tabs, as John Hicks did in his custom theme. This border was subtle enough that didn’t compete with the tabs, but it was strong enough to be noticed. In search for other solutions, Pattern Tap was a true blessing, providing plenty of examples of tabs I could steal from.
Branding
Here’s my best attempt at expressing why Textpattern is great:
Textpattern is small and easy to use, which makes it nimble and fast. Textpattern also has a tremendous capacity for expansion, which makes it flexible enough to handle a variety of purposes.
My aim was to adhere to those two ideals—minimalism and flexibility. In terms of minimalism, this meant keeping “chrome” to a low—making sure that every gradient and drop shadow I put in place had a purpose and was necessary as a design element. For flexibility, I had to consider that Textpattern is used to handle many different kinds of content—blogs, portfolios, brochure-ware, even magazines. The interface that controls those different platforms should be able to fit the role.
The default theme comes with the most prominent design element of Textpattern, that yellow bar (most say yellow, I always thought it was orange). It’s the first thing you see, a bright strip of color right at the top of the page. Part of me loves it, because its so bold and it immediately acts as the brand for Textpattern. But as a designer, I found that working with it was a bit frustrating. #FFCC33 is a serious color, one that’s doesn’t play well with others. I tried several color combinations to see if I could somehow use it to my advantaged, but only ran into frustration. I tried other beiges and pale yellows and oranges, but the results looked too mushy. Adding a black or charcoal gray to the mix made for a bumble-bee / Stryper look. And I didn’t want to try another bold color, like royal blue or blood red, because then they would be competing. In the end, I either kept the yellow un-touched, and used it with a minimal white, or removed it all together.
Buttons
Top: buttons as styled by the default Textpattern CSS. Bottom: Buttons with styling removed, rendered with Firefox for Mac.
I suppose this a point of contention amongst Interaction Designers, but I prefer buttons to retain their native browser rendering. This maintains consistency within the web application and ensures that the user views a button as a button. Moreover, The smaller buttons (with classes of spsmallbox and the like) don’t look any better than the default browser rendering. Plus, you don’t have to worry about active and hover states in the CSS, as the browser will handle that.
Typography
Looking at the type, Textpattern employs Verdana at 11px. Again, here’s another 2004 design element that doesn’t quite mesh into today’s environment. Verdana was designed for the screen to be legible at small sizes. It’s hey day was 8 years ago, before Clear Type and anti-aliased pixel rendering. Nowadays I see Verdana as dated and clunky. Using other fonts — Helvetica/Arial, Lucida Grande, and even Georgia italic bold — helped freshen up the look.
Execution
Even if the final product of this project isn’t too flashy, I am happy that I took it on for the simple fact that it forced me to stretch my abilities as a web designer.
This was the first time (and hopefully last) that I had to implement CSS for a table-based layout. We now live in a post-standardista world of web design, where table-based layouts have become the fabled gremlins of the dark ages long since past. But here was a great opportunity to bring them back into the light and try working with them. I was immediately reminded why the tables are so loathed. In short, CSS and HTML tables can play well together, but it takes a lot of work. Hopefully, the development team will look to tackle this issue in one of the next releases.
Since I only had CSS to work with, I was forced to adopt data URI images. This is a method I conned off of (who else?) Jon Hicks, who mentioned in his User Stylin’ article for 24ways. But unlike Mr. Hicks, I generated the URI by creating images straight from the canvas element. In fact, creating these themes was the primary reason why I made the Quickie Canvas tool.
Results
View theme demo and download themes
Getting a hang of restyling Textpattern took a while, but once I got it, it was easy to strap on my CSS helmet (it is a helmet, not a hat) and theme it up. So far, I’ve developed 11 themes that are compatible with Textpattern versions 4.0.5 through 4.0.8. I made so many because I kept trying to find that ideal theme that could possibly replace the default CSS. The themes range in many elements I changed and how much I kept the same from the default CSS. Sometimes I touched all the buttons and fonts and headers, sometimes just a couple elements. Smallmarine2 only touches the tabs and the link color, whereas simplexbubble was designed with the goal of a lot of chrome.
Simplexmild is my prime candidate to usurp the default theme. The theme isn’t so much of a re-design as it is a re-alignment. The top tabs are still there, but adding padding and a subtle gradient softens the look. Bottom tabs are replaced by the bottom border a la Hicks. Typography was also given some attention, swapping out Verdana for Helvetica.
Personally, the theme I like the best is the wilsonorange. Still searching for that ultimate minimal theme, I came across Wilson Miner’s site, which he redesigned in October. His site served as an example of how to make something look simple and attractive. The theme is the most basic one I created – no rounded corners or drop shadows. And I kept that big block of orange at the top. For typography, Helvetica is at work, in its trendy tightly-kerned fashion.
The other themes attempt to divert from the original goal of creating a new default theme for the interface. Dropmag was created for dropshado.ws. Wp25 is a port of Jason Santa Maria’s Wordpress 2.5 interface. Smallmarine2 was designed for that corporate blue look. It’s all done with CSS, so everyone is encouraged to fix and tweak to their heart’s content to find their own ideal theme.
Further discussion
Unfortunately, the themes I developed are just CSS files and therefore, I wasn’t able to touch any of the mark up or content. Digging into CSS and HTML, it’s plain to see how piecemeal Textpattern is. Across the various modules within Txp (Write, Forms, Sections, Plugins), the visual consistency is lacking. For example, the Forms and Write modules use h3.plain tags. Some of sub-tabs under Admin use h1.
Part of me wants to see a serious overhaul—scrap everything and build it back up better. Of course, I realize that starting from a blank slate is unrealistic, especially for a platform that has such a large userbase (although there are projects do just that, see crockery and Xpattern ). Plus, the developers have to ensure a good measure of backwards compatibility for the plugins that make Textpattern so flexible.
In the two and half years I’ve been using Textpattern, the interface has undergone only minor tweaks and changes. Compare that with Wordpress, which has seen 2 major redesigns in the same span of time. Granted, these two platforms have a world of difference in between them. Wordpress has a development team, and was able to hire Happy Cog, the web design firm, to do the interface refresh. Textpattern relies on the contributions of its userbase, just a handful of enthusiastic volunteers spread across the world to make the changes to the product. With enough community support, redesigning Txp is certainly an attainable achievement.
I created these themes because I am excited about Textpattern, and I hope to share that excitement with others. As a tool, I love using it every day. it’s the principal device I use to communicate on the web. As a community, I love being a part of something bigger than just a couple CSS files.
I like IE6 because
I enjoy a good challenge
When a new IE6 bug pops up, my first negative reaction probably isn’t the best one. Instead of initial frustration, I should be excited that I have a quirky new puzzle awaiting a solution. After all, nerds love puzzles. Sure, completing a site does come with a sense of accomplishment. But that’s nothing compared to the joyous moment of triumphant ecstasy when you get it to work in Microsoft’s browser.
I like surprises
Working with computers all day, the profession of web design can become monotonous. But unlike all the other reliable, boring browsers out there, IE6 has some personality (albeit the annoying and frustrating sort) willing to mix it up and keep the designer/machine relationship new and interesting. IE6 is sort of like C-3PO, always getting into trouble, and being kind of a jerk. Keeping with the allegory, web designers are like Han Solo: cool, calm, in control, saving the day while maintaining a perfect head of hair.
It makes me think about people that are not like me.
I fear that as web designers, we are overly insulated in our own cultural bubble. While we are connected tightly to one another via the numerous social networks of the modern age, there’s a tendency to close ourselves off to everybody else. People like our parents, grand parents and other relatives. People who toil at corporate jobs and provide the human infrastructure that powers our industrous society. People who don’t have the shiniest new Mac. All of these individuals deserve, and perhaps depend upon, us web designers doing our best to ensure they get a terrific online experience. When I’m in the briar patch, trying to resolve an IE6 bug, I try to keep those people in mind.
It gives us bonding power
The easiest way to unify a group of people is to find a common entity of opposition. IE6 is the ideal focal point of commiseration for an entire professional sector. We may not be able to agree on everything, but we all can find common ground with our general disdain for IE6. Together, we are stronger. Thank you Microsoft!
Uncover
I am just beginning to uncover some sense of the role of interaction in web design. Typically, I framed the interactive element as facilitating the message of the work. But I now I see it more as the message itself.
Concept Flow: What I'm going for
Ideal Result
Optimistic Result
Likely Result
Graphic & web designer living in Arlington, VA, working at nclud Washington, DC.
Being creative and making stuff keeps him happy.