Object Oriented CSS - Joomla!dagen Nederland 2014

49
Joomla!dagen Nederland 2014 OOCSS - Keep it small

description

Presentatie on OOCSS for the Joomla!dagen Nederland 2014. OOCSS borrows concepts from software architecture. By structuring your CSS and abstracting parts for re-use the resulting code is leaner, more scalable and much more maintainable. It introduces a few methods for modular CSS ands shows how you can use some of SASS's new features to implement BEM.

Transcript of Object Oriented CSS - Joomla!dagen Nederland 2014

Page 1: Object Oriented CSS - Joomla!dagen Nederland 2014

Joomla!dagen Nederland 2014

OOCSS - Keep it small

Page 2: Object Oriented CSS - Joomla!dagen Nederland 2014

Babs Gösgense @babsgosgens

#jd14nl

Page 3: Object Oriented CSS - Joomla!dagen Nederland 2014

www.crossinghippos.com er @crossinghippos

Page 4: Object Oriented CSS - Joomla!dagen Nederland 2014

Joomla!dagen Nederland 2014

Modular CSS

Page 5: Object Oriented CSS - Joomla!dagen Nederland 2014

–Hugo Giraudel (@HugoGiraudel )

“CSS has become more interesting and more complicated.”

h!p://www.sitepoint.com/architecture-sass-project/

Page 6: Object Oriented CSS - Joomla!dagen Nederland 2014

WET

Page 7: Object Oriented CSS - Joomla!dagen Nederland 2014

Be!er ?

Page 8: Object Oriented CSS - Joomla!dagen Nederland 2014

Context

Page 9: Object Oriented CSS - Joomla!dagen Nederland 2014

Be!er ?

Page 10: Object Oriented CSS - Joomla!dagen Nederland 2014

Re-usability

Page 11: Object Oriented CSS - Joomla!dagen Nederland 2014

Be!er ?

Page 12: Object Oriented CSS - Joomla!dagen Nederland 2014

(Cross media) Semantics

Page 13: Object Oriented CSS - Joomla!dagen Nederland 2014

Be!er ?

Page 14: Object Oriented CSS - Joomla!dagen Nederland 2014

Persistent Grid

Page 15: Object Oriented CSS - Joomla!dagen Nederland 2014

Be!er ?

Page 16: Object Oriented CSS - Joomla!dagen Nederland 2014

Facebook

• 6498 colour declarations

• 548 unique colours

• 261 shades of “Facebook” blue

• 3668 padding declarations

• 511 heading selectors

Source: thekmiecs.com

Page 17: Object Oriented CSS - Joomla!dagen Nederland 2014

Media Object• 5 Lines of CSS

• A small HTML snippet

Page 18: Object Oriented CSS - Joomla!dagen Nederland 2014

Media Object

Page 19: Object Oriented CSS - Joomla!dagen Nederland 2014

Nicole SullivanOOCSS in 2009 (@stubbornella)

Source: Joshua Kulpa via Flickr CC

Page 20: Object Oriented CSS - Joomla!dagen Nederland 2014

OOCSS

• Separate structure and skin

• Separate container and content

Modular

fDRY

fScalable

f+ =

Page 21: Object Oriented CSS - Joomla!dagen Nederland 2014

Small sites can grow big

Source: Harry Roberts (@csswizardry)

Page 22: Object Oriented CSS - Joomla!dagen Nederland 2014

less CSS = faster site

Page 23: Object Oriented CSS - Joomla!dagen Nederland 2014

Object

• HTML

• CSS

• JavaScript

• …

Page 24: Object Oriented CSS - Joomla!dagen Nederland 2014

OOCSS Systemen

• OOCSS

• SMACCS

• BEM

• Atomic CSS

• …

Page 25: Object Oriented CSS - Joomla!dagen Nederland 2014

BEMBlock-Element-Modifier

Page 26: Object Oriented CSS - Joomla!dagen Nederland 2014

Block

• Independent Entity

• Blocks can contain other blocks

Bron: h!p://bem.info/method/definitions/

Page 27: Object Oriented CSS - Joomla!dagen Nederland 2014

Element

• Smallest part of a block

• Context-dependent

Bron: h!p://bem.info/method/definitions/

Page 28: Object Oriented CSS - Joomla!dagen Nederland 2014

Modifier

• Extra, or different property

• Multiple modifiers

Bron: h!p://bem.info/method/definitions/

Page 29: Object Oriented CSS - Joomla!dagen Nederland 2014

BEM Classes

.block { }

.block__element { }

.block--modifier { }

Page 30: Object Oriented CSS - Joomla!dagen Nederland 2014

Person

Page 31: Object Oriented CSS - Joomla!dagen Nederland 2014

Media Object in BEM

Page 32: Object Oriented CSS - Joomla!dagen Nederland 2014

Not everything is BEM

Page 33: Object Oriented CSS - Joomla!dagen Nederland 2014

–W3C

“Good names don’t change.”

h!p://www.w3.org/QA/Tips/goodclassnames

Page 34: Object Oriented CSS - Joomla!dagen Nederland 2014

Class names

• a warning, important, submenu

• b border4px, ligh!ext, pre!ybackground

h!p://www.w3.org/QA/Tips/goodclassnames

Page 35: Object Oriented CSS - Joomla!dagen Nederland 2014

Classisitis

• Repeating classes are excellent candidates for compression

Source: h!p://www.staceyreid.com

Page 36: Object Oriented CSS - Joomla!dagen Nederland 2014

Good habits• Use shallow selectors

• Separate skin and behavior

• Avoid repetition (DRY)

• Avoid context

• Avoid having to rewrite properties

• Comments, comments and comments

Page 37: Object Oriented CSS - Joomla!dagen Nederland 2014

Bad habits

• Overqualified selectors

• Overly specific selectors

• Universal selector

• ID’s for styling

• !important

.menu#mainmenu.block > .block__element*

Page 38: Object Oriented CSS - Joomla!dagen Nederland 2014

Specificity• Universal selectors

• Tag (type) selectors

• Class selectors

• A!ribute selectors

• Pseudo-classes & Pseudo-elements

• ID selectors

• Inline styles

*a, div, article.block[type=“checkbox”]:first-child, ::before#mainmenustyle=“color: #f00;”

bad!

Page 39: Object Oriented CSS - Joomla!dagen Nederland 2014

Methods

• Structure

• Ordering

• Context

• Comments

• Semantics (for us)

Page 40: Object Oriented CSS - Joomla!dagen Nederland 2014

CSS Preprocessors• Variables

• Functions

• Mixins & placeholders

• Inheritance

• Operators & directives

• Maps

Page 41: Object Oriented CSS - Joomla!dagen Nederland 2014

– J.R.R. Tolkien (& Hugo Giraudel)

“One file to rule them all, One file to find them,

One file to bring them all, And in the Sass way merge them.”

Page 42: Object Oriented CSS - Joomla!dagen Nederland 2014

Partials

• Every component in its own file

• Individual files are pulled in to create a single stylesheet

• Much easier to maintain

Source: h!p://www.sitepoint.com/architecture-sass-project/

Page 43: Object Oriented CSS - Joomla!dagen Nederland 2014

SASS & BEM

Page 44: Object Oriented CSS - Joomla!dagen Nederland 2014

SASS & BEM

Page 45: Object Oriented CSS - Joomla!dagen Nederland 2014

Abstraction exercise

Page 46: Object Oriented CSS - Joomla!dagen Nederland 2014
Page 47: Object Oriented CSS - Joomla!dagen Nederland 2014

Abstraction exercise

Page 48: Object Oriented CSS - Joomla!dagen Nederland 2014

Sources• h!p://bem.info/ • h!p://bradfrostweb.com/blog/post/atomic-web-design/ • h!p://clubmate.fi/oocss-acss-bem-smacss-what-are-they-

what-should-i-use/ • h!p://coding.smashingmagazine.com/2011/12/12/an-

introduction-to-object-oriented-css-oocss/ • h!p://csswizardry.com/2011/09/writing-efficient-css-

selectors/ • h!p://csswizardry.com/2013/01/mindbemding-ge!ing-

your-head-round-bem-syntax/ • h!p://hugogiraudel.com/ • h!p://nicoespeon.com/en/2013/05/dive-into-oocss/ • h!p://nicolasgallagher.com/about-html-semantics-front-

end-architecture/ • h!p://rhodesmill.org/brandon/2011/concentric-css/ • h!p://sass-lang.com/

• h!p://smacss.com/ • h!p://snook.ca/ • h!p://www.alwaystwisted.com/post.php?s=2014-02-27-

even-easier-bem-ing-with-sass-33 • h!p://www.bre!jankord.com/2013/02/09/thoughts-on-

semantic-html-class-names-and-maintainability/ • h!p://www.mathayward.com/modular-css-with-sass-

and-bem/ • h!p://www.sitepoint.com/architecture-sass-project/ • h!p://www.sitepoint.com/css-sass-styleguide/ • h!p://www.slideshare.net/maxdesign/css-oocss-and-

smacss • h!ps://github.com/necolas/idiomatic-css • h!ps://github.com/stubbornella/oocss/wiki

Page 49: Object Oriented CSS - Joomla!dagen Nederland 2014

a www.facebook.com/crossinghippos

h!p://www.slideshare.net/babsgosgens