Be Responsive: CSS Naming Conventions
by
Peter Wilson
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
CSS Naming Conventions Peter Wilson • @pwcc Be Responsive • August 2014
Slide 2
Slide 2 text
What is a naming convention? • Class names • Systematic • Planned flic.kr/p/fLTwjD
Slide 3
Slide 3 text
Components
Slide 4
Slide 4 text
Components
Slide 5
Slide 5 text
Sub-components
Slide 6
Slide 6 text
Sub-components
Slide 7
Slide 7 text
Variants
Slide 8
Slide 8 text
Popular Naming Conventions • BEM • SMACSS • SUITCSS
Slide 9
Slide 9 text
BEM by Yandex
Slide 10
Slide 10 text
Block, Element, Modifier • Strict • Meaningful hyphens • Meaningful underscores flic.kr/p/aLvmZ
Slide 11
Slide 11 text
Components .component-name { // hyphen separated // all lower case }
Slide 12
Slide 12 text
Sub-components .component-name__sub-component { // double underscore // hyphen separated // all lower case // includes component’s name }
Slide 13
Slide 13 text
Variants .component-name––variant-name { // double hyphen // hyphen separated // all lower case // includes component’s name }
Slide 14
Slide 14 text
State & Layout
Slide 15
Slide 15 text
The media object
Slide 16
Slide 16 text
The media object .media-object { overflow: hidden; //clearfix } .media-object__image { float: left; } .media-object__body { overflow: hidden; }
Slide 17
Slide 17 text
The media object
Lorem Ipsum
Slide 18
Slide 18 text
The media object variant
Slide 19
Slide 19 text
The media variant .media-object––rev > .media-object__image { float: right; } // OR .media-object__image––rev { float: right; }
Slide 20
Slide 20 text
The media variant .media-object––rev > .media-object__image { float: right; } // OR .media-object__image––rev { float: right; }
Slide 21
Slide 21 text
SMACSS by Jonathan Snook
Slide 22
Slide 22 text
Scalable & Modular Architecture for CSS • Loose naming convention • meaningful hyphens flic.kr/p/aLvmZ
Slide 23
Slide 23 text
Components .componentName { // camel case }
Slide 24
Slide 24 text
Sub-components .componentName–subComponent { // indicated with hyphen // all one word // camel case // includes component’s name }
Slide 25
Slide 25 text
Variants .componentName–variantName { // indicated with hyphen // all one word // camel case // includes component’s name }
Slide 26
Slide 26 text
Layout & state .layout-grid, .l-grid { // layout prefixed, dev’s preference } .componentName-is-open { // state prefixed with is }
Slide 27
Slide 27 text
The media object .mediaObject { overflow: hidden; //clearfix } .mediaObject-image { float: left; } .mediaObject-body { overflow: hidden; }
Slide 28
Slide 28 text
The media object
Lorem Ipsum
Slide 29
Slide 29 text
The media variant .mediaObject-rev > .mediaObject-image { float: right; } // OR .mediaObject-image-rev { float: right; }
Slide 30
Slide 30 text
bit.ly/css-mess
Slide 31
Slide 31 text
SUIT CSS by Nicolas Gallagher
Slide 32
Slide 32 text
SUIT CSS • Strict • Meaningful hyphens • Utilities • State flic.kr/p/aLvmZ
Slide 33
Slide 33 text
Components .ComponentName { // Pascal case }
Slide 34
Slide 34 text
Sub-components .ComponentName–subComponent { // indicated with hyphen // all one word // camel case (not pascal) // preceded with component’s name }
Slide 35
Slide 35 text
Variant .ComponentName––someVariant { // indicated with double hyphen // camel case (not pascal) // preceded with component’s name ! }
Slide 36
Slide 36 text
Utilities .u–displayBlock { // indicated with .u- prefix // camel case // verbose ! }
Slide 37
Slide 37 text
Utilities .u–cf { // indicated with .u- prefix // camel case // verbose* // can use common abbreviations }
Slide 38
Slide 38 text
State .ComponentName.is-someState { // prefixed with .is- // camel case (not pascal) // state classes are always overloaded ! }
Slide 39
Slide 39 text
The media object .MediaObject { overflow: hidden; //clearfix } .MediaObject-image { float: left; } .MediaObject-body { overflow: hidden; }
Slide 40
Slide 40 text
The media object
Lorem Ipsum
Slide 41
Slide 41 text
The media variant .MediaObject––rev > .MediaObject-image { float: right; } // OR .MediaObject–image––rev { float: right; }
Slide 42
Slide 42 text
Advantages
Slide 43
Slide 43 text
Advantages • planning • rules • link code bases
Slide 44
Slide 44 text
Avoiding naming clashes // without a naming convention .permalink { … } ! // using a naming convention .Article-permalink { … } .Comment-permalink { … }
Slide 45
Slide 45 text
Better targeted selectors .permalink { font-style: italic } .comment .permalink { font-style: normal }
Slide 46
Slide 46 text
Better targeted selectors .Article-permalink { font-style: italic } .Comment-permalink { // unneeded }
Slide 47
Slide 47 text
Using ID selectors kills kittens (Aside) flic.kr/p/6T35mX
Slide 48
Slide 48 text
So does nesting in Sass. (Aside) flic.kr/p/6T35mX
Slide 49
Slide 49 text
–Me “With a well chosen naming convention, you’re half way to having a CSS Architecture”
Slide 50
Slide 50 text
Advantages for Design
Slide 51
Slide 51 text
Name components • brings planning forward • reenforces it will be a site
Slide 52
Slide 52 text
Think components
Slide 53
Slide 53 text
Plan for the browser • look for patterns • normalise your design • plan for compromise
Slide 54
Slide 54 text
flic.kr/p/4bAYfc
Slide 55
Slide 55 text
flic.kr/p/4bAYfc
Slide 56
Slide 56 text
Real World Example
Slide 57
Slide 57 text
No content
Slide 58
Slide 58 text
SUIT CSS changes .ComponentName { … } .ComponentName––variant { … } .ComponentName–subComponent { … }
Slide 59
Slide 59 text
SUIT CSS changes .ComponentName { … } .ComponentName–Variant { … } .ComponentName_SubComponent { … }
Slide 60
Slide 60 text
CSS Partials • separated by type • base: Sass basics • generic: HTML elements • utilities • components
Slide 61
Slide 61 text
No content
Slide 62
Slide 62 text
Comment.scss .Comment { … } .Comment–AuthorComment { … } .Comment_Meta { … } .Comment_Name { … } .Comment_Time { … } .Comment_Body { … }
Slide 63
Slide 63 text
Comment.scss .Comment { @include font-size(14/16); line-height: (24/14); display: block; }
Slide 64
Slide 64 text
Take homes
Slide 65
Slide 65 text
Thank you, any questions? peterwilson.cc • @pwcc