CSSquirrel A look at web development and web design by Kyle Weems

:

Posts Tagged ‘CSS’

Comic Update: This is not a Reference

Monday, July 13th, 2009

[Update: The CSS3 Attribute Selectors article in the Reference was updated just prior to this post going live. So my ranting about that section is largely out-of-date and can be summed up now as "Took much longer than I'd anticipated".]

When I was first hired by Mindfly in 2007 I was not what you’d call “web standards aware”. Upon seeing the table-based layouts, font tags, and massive collection of inline-styles that stampeded through my pages like wild buffalo, grown men would gnash their teeth and wail in torment and mothers would hide their children.

It only took a few crying infants for me to realize something needed to change if I wanted to keep this career. My infovore nature led me to consume as much information on the topic I could muster, starting with Andy Clarke’s Transcending CSS and continuing through dozens of online tutorials and references. Learning the errors of my past, I spent a bit of time quietly taking my old sites out to the woods, instructing them to dig their own graves, then whacking them with a shovel before burying them for all time.

After the evidence had been destroyed, I went about trying to make compliant, pretty sites using the best practices in HTML and CSS. By 2008, I had friends who thought making website was the bee’s knees, but they didn’t know where to look for learning CSS, etc. At that point my bookmarks of handy sites had grown enormously, so I heartily recommended several.

One that I mentioned time and again was the Sitepoint CSS Reference, which was (to my knowledge at the time) a very complete, useful reference to the wonderful world of CSS. It even included tasty tidbits about CSS3 support. The main reason I sent each person who asked to this reference was explained in Sitepoint’s announcement“…the reference contains a bunch of features that make it stand out from the pack — things like cross-browser compatibility charts and user feedback to ensure that it is accurate, up to date, and best-practice. If you’re building sites with CSS, this is a reference you’ll keep coming back to again and again.”

With the speed at which this industry changes, who wouldn’t want access to a constantly updated reference that even incorporated outside feedback?

There is a problem, unfortunately. As near as I can tell, the reference isn’t updating. Since its launch, it seems to be sitting still, failing to modernize its information as browsers march on. Every single browser on their compatibility list has had major updates since its launch, putting much of the CSS3 support information well out of date. Never mind that Google Chrome has been out for quite a bit of time now (as the Internet sees such things) and has no compatibility information present despite it’s higher browser share than Opera in most markets.

In a book, this situation is a necessary reality. Books, by their static nature, are out-of-date typically before they’ve even been published, requiring later editions, etc. But for a web-based reference, which claims specifically to have the benefit of staying up-to-date and incorporating user feedback, this isn’t terribly cool.

For me, the situation is exasperated by their promise to incorporate feedback (or even claiming to do so) when they (at least in situations I’ve experienced) clearly are not. To back my claim, I’d like like to direct you to my own experience I’ve had, which I’ll call Exhibit A. If you examine the page on CSS3 Attribute Selectors, you’ll find that it erroneously claims that Internet Explorer 7 completely fails to support these little gems.

I’m no IE fan, but I can tell you my friends, that this is a falsehood. And because I was foolish enough to take that advice at face value (who doesn’t trust Sitepoint?) I created IE-specific workarounds in a project where I first included these selectors, workarounds which ended up costing me a decent chunk of time. It was only later that I decided the best experience is personal experience and I actually tried the selectors in IE7, only to discover that they work perfectly fine. I’d wasted time (translate that: money) fixing a nonexistent problem they claimed existed.

Not being the type to hoard information, I shared the fact that they were mistaken in a comment on May 2, 2008, complete with a link to a test page to confirm that I wasn’t full of hot air. (The old test page has disappeared, so you can see what I’m talking about if you check this test page in IE7). Eventually they marked that they’d incorporated my comment into the article… only they hadn’t. It still incorrectly stated IE7 support didn’t exist. Sometime much later (aka, this year), I commented in annoyance at the mistake again on Twitter. They responded multiple times over Twitter to me, asking for clarification (which I gave) and then promised to update their Reference (which they didn’t).

That was a couple months ago.

Today’s comic shares my view on the so-called Reference, albeit in a somewhat abstract sense. So let me make it clear: I don’t think the Reference is what they claim: a reference. Rather, much like René Magritte’s unpipe it is not what it appears, merely the image of it. The unreference, if you will, is something that claims authority and completeness but increasingly lacks both as time moves forward.

One erroneous page isn’t worth tearing down their entire reference. However, with a complete lack of modern CSS support information on every major browser, Sitepoint’s “up-to-date” CSS Reference has become largely useless as a source for web designers living and working in 2009.  I’m upset at this, because I sent literally everyone I knew with an interest in learning CSS to their site, saying “Hey, these guys know their stuff.”

Now… well, now I tell people to avoid it. I’ll repeat that for anyone reading: Don’t bother. They mean well, but they’ve failed to live up to their mandate of keeping updated. In March, when I’d commented (again) on my disgruntlement with the lack of updates, I received the following pair of tweets from Kevin Yank (@sentience).

April 6, 2009 4:19pm: “What erroneous compatibility info did you find? We are planning to refresh the Reference for the latest crop of browsers in May.” (after which I gave a summary).

April 6, 2009 4:50pm: “Thanks! Will get that corrected ASAP.

It’s July now. I think we may have different definitions for “corrected” or “ASAP”.

Posted at Mindfly: Web Developer Weems and the Case of the Multiclass Bungler (AKA, IE6)

Thursday, June 18th, 2009

Nothing keeps you more humble in your industry than learning an important job-related detail, then discovering shortly thereafter that everyone else has known for years. For the past few months I’ve been experimenting with “OOP CSS”, taking advantage of mutliclassed elements to reduce stylesheet size and increase CSS reusability (after attending this presentation by Nicole Sullivan at Web Directions North.) Within the past couple weeks, I found some major roadblocks to using this technique with IE6 when being incautious about how the rule descriptors are ordered: IE6 majorly bungles multiple-class descriptor support.

To get a better view of what I’m speaking about (assuming you’re not already familiar with it), go check out the post I wrote at Mindfly about this very issue: Web Developer Weems and the Case of the Multiclass Bungler (AKA IE6).

Word-Spacing and Inline-Block Incompatibility in Webkit Browsers

Thursday, April 9th, 2009

This is a quick sanity check, if nothing else.

A while back, I found a way to make my inline-block spacing issues go away by getting tricky and using word-spacing to remove the gap, as discussed and tested here. I failed to check the results in a webkit browser, though, and recently discovered a slight problem.

Mainly, they don’t support that.

For whatever reason, IE, Firefox and Opera all apply word-spacing styling to inline-blocks, either adding to or removing the whitespace between the elements depending on your style. Safari and Chrome, however, do not. Mind you, they both have whitespace between the elements. They simply don’t allow the use of word-spacing to modify that space.

Here’s an example page showing the use of word-spacing with inline-blocks and normal sentances. Take a look in a webkit and non-webkit browser to notice the difference. (I didn’t bother to do IE 6&7 correction, so those browsers won’t show the lists side-by-side. Upgrade your browser already!)

As you’ll see, the webkit browser isn’t removing the whitespace.

So, the question is this: Does the w3c spec say what behavior is supposed to occur? Is the webkit result a bug/out-of-spec, or are the other browsers providing a result that isn’t required by the spec? It seems to me that the non-webkit result is the proper one. If you’re going to make blocks behave like words with spacing, you should be able to modify them in the same fashion. But then, there’s a lot about CSS that doesn’t always work like you think it should. (point in case: vertical-align. Probably the worst style ever.)

Using Inline-Block and Word-Spacing to Make Columns Easier

Monday, March 23rd, 2009

Columns or grids, whatever you’re calling your blocks of content that are stacked next to each other, you’ve often got an annoyance when working on a design. I’ve probably covered this topic something like six million times, as I for one am easily annoyed by unnecessary floats, but historically found myself using them way too much to make some sort of grid of blocks work out to make a designer’s dream a reality.

I don’t know why floats drive me bonkers. But they do. I feel like frequently they’re being used almost exclusively to solve problems that were never intended for them, and the end results can get messy as soon as a client starts using a carefully balanced page built upon delicate floats and adds an unexpected list or makes a given element too full or too empty.

Not terribly far back in the past I talked about display: inline-block, one of my favorite CSS style, as a solution to this problem at Mindfly in The Curious Case of Inline-Block. It provides a nice tutorial to getting columns of content to work side-by-side without floats using inline-block, and how thanks to the quick adoption rate of Firefox 3, all major browsers (including IE6) support this style (granted, IE6 & 7 actually require a helping hand, but the tutorial discusses the easy fix).

I had one problem that nagged at me, though. Whitespace. In particular, the inline-block style is whitespace sensitive, so normal markup practice will result in your columns getting space between them when you use this style, which can mess with your carefully measured columns, and so forth. One possible fix is to simply remove any whitespace between the elements in question, but this is impractical for two reasons: 1. A lot of dynamically generated content won’t be set up with that sort of issue in mind, and 2. Clients entering their own content.

So I did some digging around, and through a complete accident later stumbled upon word-spacing, a style I’ve never had cause to make use of in the past. It’s simple enough as a style goes. Give it a value (in px, em, etc) and that’s how it modifies the existing whitespace between words. This counts for space between inline-block elements as well. So if you give the parent of those elements word-spacing: -1em, then it will remove the whitespace (normally 1em) that is between your inline-block elements. The catch? Make sure to give the elements themselves word-spacing: normal to resest the spacing for any text inside them, or you’ll get some nasty results.

Here is an example of positioning items side-by-side cleanly by using word-spacing and inline-block together (as well as showing the IE6&7 fix). Of course, with the whitespace issue solved, you can add your own margins to elements to create whatever nice gutters and such that you prefer.

Posted at Mindfly: Get Refreshed – Liquid Layouts With Simpler CSS and Without A Semantic Mess

Tuesday, January 13th, 2009

Although recently the trend seems to be more towards fixed widths or flexible percentage-based width layouts, from time to time I’m tasked with building a site with a liquid layout. Thanks to the demands of appropriately-ordered content and the challenges of having one column stay fixed in width while the other flexibly expands to fill the remaining space, these types of sites haven’t been the cleanest to make with CSS. One common technique that I’ve made a lot of use of was written in A List Apart called Creating Liquid Layouts with Negative Margins by Ryan Brill. It does the job, but it’s a semantic mess with a ton of divs.

I decided to try to find a method that pares down the div count, and makes the CSS a bit cleaner and more appropriate to the task. Lightning struck, and my mind put together a technique that feels like a decided improvement on accomplishing the desired task. I wrote about it over at Mindfly’s blog. Go check it out at Get Refreshed: Liquid Layouts with Simpler CSS and Without A Semantic Mess.