Skip to main content

How to create clean and efficient CSS

In a typical workday, I deal with dozens of yahoo stores and very often I have to tweak, fix, or change CSS used by these stores. While some stores have very clean and easy to follow style sheets or CSS definitions, the vast majority of stores I've seen seem to include complete hack jobs, style sheets put together completely haphazardly, or as an afterthought. While working in such a store, the idea came to me to turn my gripes into a post. So the following is my list of dos and don'ts of good CSS or style design.

1. Externalize your style sheets. This means to save your style sheets into one or more css files, and link to them using the <link rel="stylesheet" type="text/css" href="/lib/yourstoreid/yourstyle.css"> notation, or in Editor V3.0, you can use the LINK operator.

2. Combine your style sheets into as few files as possible. Nothing worse than trying to wade through 6, 8, 10 or more different style sheets to find the color of a link for example. If you must use multiple style sheets, at least give them meaningful names. Style1.css, style2.css, mystyles.css, etc. are NOT meaningful. Item.css, section.css, home.css ARE meaningful.

3. If you are using Editor V3.0, you can put your own CSS stuff in the css-edits.css file. You can find it on the “Contents” page.

4. Avoid using inline CSS, that is, putting styling in the style attribute of tags, especially within RTML. Imagine trying to find something like a “style: font-size: 20px” inside one of the store templates if you don't know where it is...

5. Use IDs for elements you know you will only have one. For example, chances are you will only have a single left navigation, so give it an ID, not a class. For instance, <div id="navbar"> ... </div>. Use classes for similar things of which there are more than one on the page.

6. Don't repeat classes without a purpose. So many times I've seen navigation links like this:

<a class="nav" href="index.html">Home</a>
<a class="nav" href="info.html">Info</a>
<a class="nav" href="contents.html">Contents</a>

Instead, do something like this:

<div id="navlinks">
<a href="index.html">Home</a>
<a href="info.html">Info</a>
<a href="contents.html">Contents</a>
</div>

You can now easily define the styles for these links like this:

#navlinks a:link, #navlinks a:visited { ... }
#navlinks a:hover { ... }

7. Start from top to bottom. Define the main styles first, and refine them as you get specific. For example, define your default font like this:
body, * { font-family: arial, Helvetica,sans-serif; font-size: 10pt }
Then, as you define your other elements, you won't have to define the font again, only if you needed to override one or more of the global styles (like font-size, for example).

8. This is related to the previous point: don't redefine the same styles more than once. If you defined your default font to be Arial, don't define it again for, say the <a> tags. This makes things complicated. Remember, CSS was meant to make life easier.

9. Don't use !important, only if you absolutely must. I often see people use !important to fix something, but it's a lazy way of fixing styles. True, if you slap !important on a style definition, it will take precedence over anything else defined for that style up to that point. But once you have your style sheet or style sheets littered with !important lines, trying to fix THAT later can be a nightmare.

10. Don't use chained styles with IDs, for example: #main #maintable #navbar. IDs are unique by definition, so it's perfectly enough to just reference the ID by itself. When you chain IDs like in the above example, you are establishing a stronger rule that says, your style should only apply if #navbar is somewhere within #maintable, and #maintable is somewhere within #main.

Comments

Anonymous said…
Great tips. I can certainly change some of things I've been doing with my CSS. Thanks for sharing.
Unknown said…
Just a note:
"body, * { font-family: arial, Helvetica,sans-serif; font-size: 10pt }"
can bewritten as body, * { font: 10pt arial, Helvetica,sans-serif; }
Anonymous said…
Good post. Most people don't realise the amount of benefit that can be gained from good clean CSS. It can help with SEO and with page loading times. I follow most things on your list, but you've highlighted a few i'm gonna definitely take on board.

Good stuff. thanks.
Aaron Pyon said…
I accidently deleted "css-edits"...is there any way to restore or recreate it?
Sure, click on "Contents", then "New", enter css-edits as the id, select "css" as the type, and click Continue.
Anonymous said…
Well written article.

Popular posts from this blog

Adding custom Yahoo Store fields - Catalog Manager vs. Store Editor

In a non-legacy Yahoo Store, there are two ways to add custom fields: through Catalog Manager under "Manage my Tables" and through the Store Editor, under "Types" (the Store Editor's "Types" are essentially the same as Catalog Manager's "Tables".) Whether you add custom fields from Catalog Manager or from the Store Editor does make a difference as each has its advantages as well as disadvantages. Catalog Manager To me the main advantages of using Catalog Manager to add custom fields are: 1) You can add multiple fields quicker 2) You can later change the field's name and even type 3) You can delete the field if you no longer need it. 4) All the fields that are available in Catalog Manager are included in the data.csv file if you download your catalog. 5) All the fields that are available in Catalog Manager are also included in the catalog.xml datafeed file, which is used by the comparison shopping engines, for example. (See the Search ...

Multi-Add and Yahoo Floating Cart Blues

Although the Yahoo! Floating Cart is considered pretty much bug free by Yahoo (you can look at the official open issues list here http://help.yahoo.com/l/us/yahoo/smallbusiness/store/floatingcart/floatingcart-09.html ) , there are some pretty "interesting" issues still, so since I keep running into them, I decided to post them here along with the work-arounds. The following issues all occur with multi-add forms only. 1) If you have your quantity set up as anything other than a simple text box (for example a drop-down SELECT box), the floating cart will not take the quantity value. It will take vwquantity as a customer-selected option. The workaround: use a text box instead. Nothing else works currently. 2) If you have a script that checks if the shopper made a selection from a drop-down (basically, any kind of an "onsubmit" handler), the floating cart will still receive the item, even if you cancel the submit event. The workaround: put the event handler on the click...

CPR for a Yahoo Store on Google's Supplemental Index

Recently a client of mine came to me and said that most of his store pages disappeared from Google, and he did not do anything to make this happen. I was a bit skeptical, so I went to Google, did a search on his store, and sure enough, there were only two pages indexed, his home page and his site map (ind.html) page. The rest were in the supplemental results, which means that Google thought the rest of the pages were not much different than these two pages. When I looked at the supplemental results, the little excerpts under each link were exactly the same, and I also noticed that what Google showed under each result was actually text from the ALT tags of the header image. I looked at some of these pages in my client's store, and they were actually different. This was a bit puzzling, but then I thought perhaps Google saw that the header and left navigation was the same throughout the site (which is pretty normal), but that the text that made each page different was too far down ins...