David Leggett (TheLeggett)

Work

Easy CSS Baseline Grid for Pretty Much Anything

I wanted to share a simple trick I’ve been using recently for quickly adding baseline grids to nearly any element on a page. It’s nothing too fancy, and it’s very easy to implement.

Demo: Baseline Grid on Any Element Example

Download Demo: easy_baseline_demo.zip (12KB)

In the demo above, you’ll see various baseline grids (and combinations of grids). There’s a switch in the top right to turn the grids on and off.

To make a 21px Baseline Grid, you would apply the class “baseline_21″ to the element which you want to apply the baseline grid to. In your stylesheet, you would add the following CSS:


.baseline_21 {
position:relative;
}

.baseline_21::after {
z-index:9999;
top:0;
bottom:0;
left:0;
right:0;
position:absolute;
content:'';
}

.baseline_21::after {
background:url(images/baseline_21.png);
}

Adding this class to an element will make that element “position: relative;” (meaning that this won’t work on elements where position needs to be something else). Then, using the ::after pseudo-element, we apply a background that is positioned absolutely to fill the entire element.

The background image is a 42px tall graphic divided into two rows. The rows alternate with their background color. The top row has no background, just a red baseline, and the bottom row has a 20% opaque white (or other color) background. This just helps me follow the rows on wide documents.

As shown in the demo, it’s easy to apply baseline grids to children inside the element with the baseline grid as well. By adding multiple backgrounds to a baseline grid, you could also overlay a column grid using this method.

Full disclosure: I’m not a typography guru, and the demo might not be a very solid example of baseline grid usage. Also, I whipped up the demo very quickly, so there may be an error or two in some browsers.

Python Safety Catalog 2012 First Edition

Got these in the mail today. I know this catalog doesn’t mean much to people outside of our company, but seeing this project all come together so nicely really makes me feel fantastic.

I’m working on a few posts that outline the process we used for designing and producing this catalog. In some regard, I’m writing to solidify what worked and what didn’t work in my own mind. I hope that the series also helps others like myself who decide to design a catalog with very little (if any) previous print experience.

Python Safety is a company I have been working with for just over half a year now.

Python Safety Upgrade

We upgraded our office space at Python Safety this past week. I’ve got more of a dedicated “studio” now for working on the new 2012 catalog.

And the catalog is shaping up very nicely. Still plenty to do, but if things continue at this rate, we should have a beautiful 80 page catalog ready for print by the end of December.

Pretty exciting for us all. In less than a year, we’ve moved and upgraded our headquarters twice. The company is growing quickly, and having a lot of fun :)

Evening project: GamerChannels.com

Most normal people I know have at least one sport they try and keep up with. Could be Football, Tennis, or maybe even something like competitive Poker.

Myself? I’m a fan of competitive video games. Starcraft, specifically.

It’s a geeky choice for evening entertainment, but I’m definitely not alone in my programming selection. Over 60,000 people tuned in from all over the world this past weekend to watch a live tournament in Spain called DreamHack. Some events see even more attention than this—and the winners often take home prizes in the tens (or hundreds) of thousands of dollars.

A lot of the individuals who “cast” live video streams use live video streaming service Justin.tv. JTV is great, but I find it a little difficult to navigate my way around the site, or watch video on my tablet. Thankfully, JTV has put together an API that has allowed me to create my own customized stream browser :)

I spent some time last night putting together a basic video browser with the API that tracks some of my favorite streams. I don’t currently have any plans for it, but I’m hosting the app at GamerChannels.com for the time being.

With how much momentum I’ve seen competitive gaming gain in the past 2 years, who knows… I may invest some more time into this project so it will be more useful for others.

Justin.tv Error #2048

Just spent the past 2 hours troubleshooting a problem I was having with the Justin.tv API. Thought I’d save a few headaches for anyone else who runs into this problem and post about it.

I was having no trouble getting the API to do the things I wanted, but the Embed code for streams seemed to be borked.

I kept getting: “Something went wrong: Error #2048″

Did some digging and wasn’t able to find any error code documentation. I couldn’t even get embed codes working directly from channels.

Turns out that for whatever reason, Justin.tv doesn’t like “localhost”. That’s a pretty strange quirk… not sure if it’s intentional or not (haven’t seen any mention of it in the API documentation). I added a new host “test.local” and was immediately able to see the embed codes working.

Guide for setting up custom hosts on Mac →
…and on Windows →

New Project: Caldwell for House 2012

Today, my good friend Michael Caldwell launched his 2012 campaign for the Georgia State House (District 20). I’m happy to once again be a part of his campaign. Here are a few screenshots from the site we launched this morning.

I’m very proud to support Caldwell’s campaign. In 2010, I believe we ran one of the best campaigns in Georgia, and I’m looking forward to once again setting an example of how local campaigns can be operated honestly and transparently.

Had some fun with the Wufoo API while working on this project. Really impressed with how easy it was working with Wufoo and MailChimp together.

Multiple Key/Value Pair jQuery Powered Filters

Spent a good chunk of the day working on a nifty filter system for a project I’m assisting nGen Works with. We needed a way to filter entries by multiple key/value pairs.

In other words, if a table has the columns “Name” and “Eye Color”, there needed to be a way to search for both at the same time (ie: “David” and “Brown” would return any entries where the “Name” column contained “David”, and the “Eye Color” column matches “Brown Eyes”.)

Pretty straightforward stuff, but it was my first time building a system like this almost entirely with Javascript. Filters can be applied and deleted instantly, and there is an autoassist feature that prints out all the unique values of searchable columns.

We’ve barely touched the styles on the app, but it’s shaping up nicely.

Quick note: Hopefully it’s clear that this is all just fakesy dummy data!

I’d like to write a post about the code for the system sometime. There is still some work to be done, and it would need some tweaking to be more useful in areas outside the application we’re building.

Quick thought on remote research

Just a passing thought on remote research:

I recognize several pros and cons to using remote research. My favorite part about it is to intercept a person about to do [a task], and then watch what they were going to do anyways from their own natural environment. However, I do wonder if remote research practitioners are able to go a step further.

What if we could somehow watch someone do something (they were already going to do), but not have them act any differently due to the knowledge of someone watching their actions. What if there were someway this could be done without invading someone’s privacy, securely, with their permission. There would be no interaction between the moderator(s)/researcher(s) and the person completing the tasks, and the research team would be able to see when the user is using the site, versus when they switch to another application, pause from the task to go do something in another browser tab, or do anything else that the user does naturally.

There are certainly a lot of what-if’s there, and I do think that the current remote research methods are very valuable, but I think that this type of ideal approach offers a lot of benefits. I sometimes take notice to strange things I’ll do when filling out a form, or sending a payment that I never get to watch other people do. For example, while subscribing to a service this morning, I paused in the middle of the signup process to go chat with a friend, then did some browsing on another site, and then I remembered that I hadn’t finished signing up for that site. Maybe that’s a pretty rare occurrence, but it definitely seems like something I could test for. Maybe it was actually just a bad sign up process, and where I paused ends up being an area where some people drop off.

*shrug*

Just a thought

Tools for Facilitating Conversation on Wireframes and Prototypes

I’m a big fan of wireframes. Prototypes too. Actually, especially prototypes (even though I almost always start with a blocked out wireframe).

But almost equally important to me is a means to discuss these initial designs with my team/stakeholders/project-managers. Over the past few months, I’ve worked a bit on refining some processes for having these important conversations. This morning on the UX Booth, I published a quick post outlining some of the tools I’ve found especially useful in starting these discussions.

Check it out: Tools for Facilitating Feedback on Wireframes and Prototypes →