object oriented css for rapid, scalable and maintainable development

Post on 27-Jan-2015

111 Views

Category:

Design

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Most frontend developers have already heard of Object Oriented CSS, yet it is still sorely under-practiced. Do your CSS files have overrides and !importants scattered through them? Do they often come in at 3000 lines+ for a regular site? Tied with good semantic HTML, the Object Oriented CSS approach really is the answer to rapid, lightweight, scalable and easy to maintain frontend code. OOCSS will speed up any front end build, but really comes into its own on bigger sites. I will talk through my approach to frontend builds and show how OOCSS makes the process so much easier. I'll also talk a bit about CSS compilers and how it is important to have a good understanding of OOCSS methods before jumping into SASS or LESS. Poor CSS practice isn't going to be rescued by a compiler; in fact it can even compound problems by bringing in another layer to debug. I hope to instill a real understanding of what OOCSS means, why it REALLY matters, and how it's going to make you a better front end developer! @graemeblackwood http://www.deeson-online.co.uk/graeme-blackwood Presented at Frontend United – http://frontendunited.org

TRANSCRIPT

Object Oriented CSS

Graeme Blackwood Creative Lead, Deeson Online

deeson-online.co.uk @graemeblackwood

Props•Nicole Sullivan, http://www.stubbornella.org

•Jonathan Snook (SMACSS), http://smacss.com

•Everyone at http://thesassway.com

•Chris Eppstein, http://compass-style.org

•Kevin Poulton http://www.flickr.com/photos/kevinpoulton

•And loads more!

Before we get going

OO CSS !=OO Programming

But an OOP mindset can be applied to CSS

OOCSS does not require any newer technologies

It works in IE6 – no need for CSS3, HTML5 etc

Semantic markup is very helpful, but usually not essential

Semantic is better though!

The traditional approach to CSS

Style output as needed Each item / page individually...

Target styles by drilling down through nested elements

Problems with traditional CSS

Coding takes a lot longer

It gets bloated

It is difficult to read and hard to reuse

Traditional CSS is tough to maintain

Object Oriented CSSA new way of thinking

Separate layout from theme(Use a grid system!)

Separate the container from the content

Look for shared stylesYou will see them everywhere

Why should I care?

Reusable code

Faster development

Less effort to code

Easier to maintain

Less code,smaller files

Getting started

Using a grid system?You are already on the right track!

Use a reset stylesheetHTML5 boilerplate’s normalize.css

Set good base stylesTo minimise later overrides

* {box-sizing: border-box} is pretty handy

Set good base stylesTo minimise later overridesBuild HTML prototypeswith Drupal in mind...

Clean up what Drupal throws at youDon’t just style,theme!

Lose unnecessary markup if it affects you

Some divs are totally pointless!

Don’t be too obsessed with perfect markup

Just enough is ok

“Now, this is just a simulation of what the blocks will look like once they’re assembled”

Let’s look at some real world applications...

.block = inherited base styles only

.grid-4 = grid class

.theme-a = theme class, H3 and p inherit colour

.padded is a class I add to the grid framework for situations like this

<div class=”grid-4 theme-a block”> <h3>Block title</h3> <p>Hello world!</p></div>

.grid-4 comes from your grid framework

.theme-a { background-color: #580174; border-radius: 6px; color: #fff; //H3 and p inherit this}

Carousel nav tabsObject is a Drupal menu – UL with a class of .sidebar-menu. Custom jQuery targets the ID.

Also used on a listingAnd it flexes to the container

99% of the styles are reused, targeted through .right .sidebar-menu only to flip the active item

Carousel itemsWith a class of .product-box

Reused on listing pages

Same layout as product listings and carousel, flexed to image size

What aboutSASS and LESS?Why bother with presentational classes in markup anymore?

Not everyone wants to use a CSS preprocessorAnd the mindset of reduce, reuse & recycle is just as important even with one

Use SASS wisely – it’s another layer to debug

Disregarding the other principles of OOCSS may create pain laterYou could end up with generated CSS bloated even more than if you had hand-coded it

Summary•OOCSS is as much a mindset as a technique

•The principles are to reduce, reuse and recycle code

•This is done through separating layout from theme

•and the container from the content

•It relies primarily on reused classes and markup

•We are working on Drupal 8 to make it much easier to change markup. In the meantime, try Display Suite or Skinr for node theming

Summary

•CSS preprocessors like SASS and LESS are great

•But they create another layer to debug

•And the code they generate can be very bloated

•Preprocessors are not an excuse to be lazy

•They still need to be used with an OO mindset

@graemeblackwood

Questions?

Thanks for listening!

Most of the fantastic lego images were by Kevin Poulton http://www.flickr.com/photos/kevinpoulton

top related