Responsive Design Sameness

Sometimes, when discussions are really interesting, I find it hard not to chime in.

Mark Boulton tweeted:

I wonder if #RWD looks the way it does because so many projects aren’t being run by designers, but by front-end dev teams.

Then the fine Mr. Tim Kadlec wrote a great post, followed by observations from Susan Jean Robertson. There were also a few thought-provoking responses to Mark’s tweet.

Tim and Susan (and others on Twitter) seem to agree that workflow/process—specifically lack of communication between designers and developers—tends to lead to the type of design sameness we’re observing today. I agree that this is a problem for many aspects of the design process; in fact, I wrote a book about it. And with the utmost respect for Mark, Tim and others, I tend to be skeptical that getting designers and developers to work together will solve the design sameness problem. That’s not to say it doesn’t need to happen; it certainly does.

In my experience, most projects are not run by front-end developers, as Mark suggests might be the case. Of course, that’s just my experience. In fact, I observe that front-end devs often get the short end of the stick, basically forced to implement whatever gets thrown on their plate by designers and requirements. In the same way, the visual designers before them in the waterfall process must implement that which has been handed to them by interaction designers, UX designers, or whoever might be in front of them. A slightly longer stick, but still pretty short. This is a workflow problem, and one of the main things I’ve spoken and written about for the past few years.

But this doesn’t necessarily explain why responsive sites share similar visual characteristics.

At the moment I can think of three things that I theorize might be at least as important as workflow, in regards to RWD design sameness:

  • Lack of a solid graphic design foundation
  • Excessive reliance on tools
  • Lack of critical design thinking when copying the work of other designers

Lack of a solid graphic design foundation

Now that design education has fragmented somewhat between “traditional” graphic design and web/digital/whatever design (even though students are often required to take both), I get the feeling that many designers live with the assumption that these are two separate worlds. It’s probably our fault (I know I’m guilty of it): we keep hammering on the differences between design for web and design for print.

But web and print are simply media. Design is problem-solving. Design is—and for the umpteenth time I quote Paul Rand—”the method of putting form and content together”. Contrary to popular web-belief, good web design is not only typography. Web designers need to know how to design. They need a solid foundation in the principles of design. And when they choose their preferred medium, of course there are always specifics that are only relevant to that medium.

A problem arises when designers lack a basic design foundation, yet have a working knowledge of medium-specific design concerns. Lacking the foundation, their creative potential has a fence around it. And, if what Mark says is true and devs are designing, that foundation might be lacking as well. And, no, I don’t mean go read The Elements of Typographic Style and you’re off to the races. Graphic design is a formal, legitimate field of study.

Judging by what I’ve observed while guest-lecturing to web design students, I suspect that tool-based education and reliance on tools and frameworks is partly to blame.

Excessive reliance on tools, frameworks and pattern libraries

Similar to Mark, I’ve often quipped that 50% of the web looks like Twitter Bootstrap. And it shouldn’t be surprising when a good portion of web design education is tool-focused. Photoshop. Illustrator. Web-based answers to Dreamweaver (“but they generate better code!”) that use frameworks as a Foundation for the generated code. (See what I did there?)

No matter how you look at it, tools are just tools. In my book, I present the Tool Rule: it’s not about the tools. Frameworks are prefab. These tools are about execution, not design. Design involves first thinking, then execution. And when one designs for a particular medium, they need not be shielded from the inner workings of that medium. Designers who want to know how to change Bootstrap need to know the inner workings of Bootstrap; have fun switching frameworks down the road. But why hide the web from them behind an abstraction layer? Would designers come up with more appropriate visual patterns if they knew more about what was possible outside the confines of a framework?

Yes, designers must learn tools. Which tools would make them more effective at being able to effectively design for the web: those that teach them about the web, or those that teach them a particular framework? I don’t know the answer; I just have my opinion.

Lack of critical design thinking when copying the work of other designers

Designers copy/steal trends all the time. Sometimes this is mandated by bad clients (“my competitor does this so it must be good”—oh, the logic), and often designers emulate the bits they like from others’ work into their own projects. It’s not only graphic designers doing this, but interaction/UX designers and developers as well. We copy patterns we like. We have pattern libraries. Prefab building blocks to help us work faster. Faster perhaps, but not always better.

Emulation is a part of the evolution of design. And the web, for that matter. But design sameness tends to fade when one forgets all of the existing patterns, all of the Bootstraps, all of the preconceived design solutions. Design sameness fades when designers stop focusing on which solutions for their problem are out there and start focusing on the problem at hand.

Solve that problem, and maybe the solution is exactly what your peer implemented, in the exact same way. But maybe not.

(Thanks to Mark Boulton for reviewing this post.)

Responsive Design Workflow Workshop in Berlin

With Smashing Magazine, I’ll be doing a workshop on Responsive Design Workflow in Berlin on November 11. Here’s why.

My book, Responsive Design Workflow, has been available since mid-April. The content of the book (as the workflow described within it) is not difficult, but the concepts and techniques presented do become more complex as the chapters progress. For those without coding experience, the later chapters require an openness to new approaches and a certain amount of patience. While the reader is practically hand-held through every step, it can take some time and practice to get used to my approach.

The point of the book is not to say, “this is the workflow you should adopt”, but rather to get readers to think critically about their own responsive design workflow and inspire them to change as needed. I do this by describing my own workflow, which while “different”, has been heavily battle-tested in real projects. I simply can’t describe every workflow out there. I also can’t simply write a book about new workflow theory and not give any examples of a workflow that works. So that’s what I did, and readers can choose whether or not my particular workflow is for them.

Some people have been intrigued by what they’ve read in the book, and I generally receive positive reactions about it. That said, I’ve noticed that for some it’s a lot like cookbook: you read it, you understand what’s there, but watching someone cook from it adds a lot to the understanding of it.

Reading something is one thing, but seeing it done and trying it out yourself adds insight and can be the difference between learning and not learning.

To this end, the Smashing Magazine folks and I have teamed up; I’m hosting a workshop on the content of the book. The first one will be held in just a couple of weeks, on November 11, in Berlin. We’ll have a fun and busy day working through things like:

  • Doing content inventories for design comps
  • Making simple and effective responsive wireframes in the browser
  • Gaining insight into content and design by “designing in text”
  • Ease into the responsive design process by making a linear design first
  • Planning and documenting breakpoints by drawing breakpoint graphs
  • How to make web-based design mockups (and replace PSDs as deliverables)
  • How to present your designs to stakeholders
  • How to create self-updating style guides

It’s going to be a fun-filled day! There may be new dates and locations for this workshop in 2014, but this is the only one I’m doing for the rest of this year.

Smashing is putting on a bunch of other workshops in November and December, hosted by the likes of Dan Rubin, Remy Sharp, Andrew Clarke, and more. Be sure to check them out.

So if you’re able, come join me in Berlin!

Another approach to responsive scrollable tables

A few days ago, Roger Johansson posted his approach to creating responsive scrollable tables. As as is the case with most of what Roger publishes, I like the approach.

I thought I’d share something similar I used on a client project I did earlier this year; an (imperfect) approach that is practically the same as Roger’s, but slightly different in how I’m dealing with shadows as a visual clue about the “scrollability” of the table.

Roger creates a shadow along the rightmost edge of a container holding the table. This serves as a visual clue that the table can be horizontally scrolled. The shadow remains on the right side of the table at all times.

Thinking about requirements

While working on the client project, my thinking was along those same lines. I wanted any table, whether narrow or wide, to be supported, so I just wanted normal table markup, and content authors should not have to worry about doing anything special; just create a normal table. The CMS would automatically put every table into a container with overflow scrolling enabled, as Roger does.

This would be enough for practical purposes, although if I did this again, I would follow Roger’s advice and add some CSS to make the a scrollbar immediately visible in iOS Safari and Android browser (mine wasn’t).

Making shadows even more useful

What I wanted (which differs from Roger’s demo) was to have the visual clue of a shadow, but to also have the shadow indicate which direction contains hidden table content. This means that when you start out, all the content of the table is hidden to the right, so the rightmost side has a shadow indicating that. As you scroll, your table content scrolls to the left. When that disappears behind the leftmost side, a shadow should appear there as well. And finally, the shadow should disappear when you can’t scroll further on a given side.

See the demo to see exactly what I mean:

Plain HTML as a base

This is simply progressive enhancement. The table is simply a table. The only concession we’re doing here is putting the table into an extra container (I’m using a div). Then we turn on overflow scrolling.

<div class="widetable">

.widetable {
  overflow-x: auto;

Add scrollbars for certain browsers

I didn’t do this in my project, but you could use Roger’s code which improves the usability by making it even clearer that you can scroll.

Add the shadows

Lucky for me, I had seen Lea Verou do one of her usual fantastic talks, this particular one on multiple backgrounds and background-attachment. In fact, she described this very use case, only along a vertical axis rather than horizontal. Take a look at her post on the subject, it makes the strategy behind these shadows very clear. Thanks, Lea!

.widetable {
  overflow-x: auto;
  background-image: linear-gradient(left, #ffffff, rgba(255, 255, 255, 0)), linear-gradient(right, #ffffff, rgba(255, 255, 255, 0)), linear-gradient(left, #c3c3c5, rgba(195, 195, 197, 0)), linear-gradient(right, #c3c3c5, rgba(195, 195, 197, 0));
  background-position: 0 0, 100% 0, 0 0, 100% 0;
  background-repeat: no-repeat;
  background-color: white;
  background-size: 4em 100%, 4em 100%, 1em 100%, 1em 100%;
  background-attachment: local, local, scroll, scroll;

Use vendor prefixes where necessary.

To break it down, remember that background-attachment: local fixes a background to the content, so it will scroll when the content scrolls. background-attachment: scroll, which is the default, means that the background will scroll with (in this case the containing) block within the viewport.

Now imagine the block that contains the table (we’re not touching the actual table at all). This container has four backgrounds: two on the left and two on the right. Two of these are the actual shadows. They are placed on either side of the container. The other two are gradients that are attached (via background-attachment: local) to each side of the content of the container, which is the table itself. These gradients serve to hide the shadows when they pass over them. See an example using colored gradients, which makes it easier to follow what is going on.

Many variations

There are many approaches to responsive tables. This worked for my project, but it depends on your tables. The method does have the advantage that it can be universally applied (to any table), and shadows and scrolling only appear when the table is too wide for the viewer’s screen. Some tables could or should be handled differently. Your mileage may vary. Also, nothing’s perfect. You might prefer to tweak the gradients. Great. I’m sure there are things that can be improved. At the base level, though, we’ve simply got a normal HTML table that scrolls within its container. Not too fancy, but it might beat scrolling the whole page horizontally or jumping through hoops to accommodate every table in your responsive site.