Slide 1

Slide 1 text

J and Beyond 2014, Königstein Germany Modular CSS

Slide 2

Slide 2 text

J and Beyond 2014, Königstein Germany Modular CSS

Slide 3

Slide 3 text

J and Beyond 2014, Königstein Germany Modular CSS

Slide 4

Slide 4 text

Babs Gösgens speakerdeck.com/babsgosgens

Slide 5

Slide 5 text

Babs Gösgens speakerdeck.com/babsgosgens

Slide 6

Slide 6 text

Babs Gösgens speakerdeck.com/babsgosgens @babsgosgens

Slide 7

Slide 7 text

Babs Gösgens speakerdeck.com/babsgosgens @babsgosgens

Slide 8

Slide 8 text

–Hugo Giraudel (@HugoGiraudel ) “CSS has become more interesting and more complicated.” h p://www.sitepoint.com/architecture-sass-project/

Slide 9

Slide 9 text

Facebook • 6498 colour declarations • 548 unique colours • 261 shades of “Facebook” blue • 3668 padding declarations • 511 heading selectors Source: thekmiecs.com

Slide 10

Slide 10 text

Media Object • 5 Lines of CSS • A small HTML snippet

Slide 11

Slide 11 text

Media Object .media { margin:10px; }
 .media, .bd { overflow:hidden; _overflow:visible; zoom:1; }
 .media .img { float:left; margin-right: 10px; }
 .media .img img { display:block; }
 .media .imgExt { float:right; margin-left: 10px; }
me

 @Stubbornella 14 minutes ago


Slide 12

Slide 12 text

OOCSS • Separate structure and skin • Separate container and content
 
 
 


Slide 13

Slide 13 text

OOCSS • Separate structure and skin • Separate container and content
 
 
 
 Modular DRY Scalable f + =

Slide 14

Slide 14 text

Modular Methodologies • OOCSS • SMACCS • BEM • Atomic CSS
 


Slide 15

Slide 15 text

less CSS = more work

Slide 16

Slide 16 text

but…

Slide 17

Slide 17 text

less maintenance faster loads

Slide 18

Slide 18 text

80:20 Rule Source: Harry Roberts (@csswizardry)

Slide 19

Slide 19 text

Methods • Structure • Ordering • Comments • Semantics (for us, not for machines)


Slide 20

Slide 20 text

Good habits • Separate skin and behavior • Avoid repetition (DRY) • Use shallow selectors • Avoid having to rewrite properties • Avoid context

Slide 21

Slide 21 text

Specificity • Universal selectors • Tag (type) selectors • Class selectors • A ribute selectors • Pseudo-classes & Pseudo-elements • ID selectors • Inline styles

Slide 22

Slide 22 text

Specificity • Universal selectors • Tag (type) selectors • Class selectors • A ribute selectors • Pseudo-classes & Pseudo-elements • ID selectors • Inline styles *

Slide 23

Slide 23 text

Specificity • Universal selectors • Tag (type) selectors • Class selectors • A ribute selectors • Pseudo-classes & Pseudo-elements • ID selectors • Inline styles * a, div, article

Slide 24

Slide 24 text

Specificity • Universal selectors • Tag (type) selectors • Class selectors • A ribute selectors • Pseudo-classes & Pseudo-elements • ID selectors • Inline styles * a, div, article .block

Slide 25

Slide 25 text

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”]

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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 #mainmenu

Slide 28

Slide 28 text

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 #mainmenu style=“color: #f00;” bad!

Slide 29

Slide 29 text

Bad habits • Overqualified selectors • Overly specific selectors • Universal selector • ID’s for styling • !important .menu#mainmenu .block > .block__element *

Slide 30

Slide 30 text

Abstract behaviour .btn {
 border: 2px solid #000;
 // and lots of vendor prefixes
 border-radius: 16px;
 text-decoration: none;
 color: inherit;
 }
 .message {
 border: 2px solid #000;
 // and lots of vendor prefixes
 border-radius: 16px;
 } Click me

information

Slide 31

Slide 31 text

Abstract behaviour .anchor- -incognito {
 text-decoration: none;
 color: inherit;
 }
 .outline {
 border: 2px solid #000;
 }
 .soft {
 // and lots of vendor prefixes
 border-radius: 16px;
 } Click me

information

Slide 32

Slide 32 text

@extend .btn {
 @extend .anchor- -incognito;
 @extend .outline;
 @extend .soft;
 }
 .message {
 @extend .outline;
 @extend .soft;
 } Click me

information

Slide 33

Slide 33 text

@extend .anchor- -incognito, .btn {
 text-decoration: none;
 color: inherit;
 }
 .outline, .btn {
 border: 2px solid #000;
 }
 .soft, .btn {
 // and lots of vendor prefixes
 border-radius: 16px;
 }

Slide 34

Slide 34 text

–W3C “Good names don’t change.” h p://www.w3.org/QA/Tips/goodclassnames

Slide 35

Slide 35 text

Class names • a warning, important, submenu • b border4px, ligh ext, pre ybackground
 
 h p://www.w3.org/QA/Tips/goodclassnames

Slide 36

Slide 36 text

BEM Block-Element-Modifier

Slide 37

Slide 37 text

Block • Independent Entity • Blocks can contain other blocks
 
 
 
 Bron: h p://bem.info/method/definitions/

Slide 38

Slide 38 text

Element • Smallest part of a block • Context-dependent
 
 
 
 Bron: h p://bem.info/method/definitions/

Slide 39

Slide 39 text

Modifier • Extra, or different property • Multiple modifiers
 
 
 
 Bron: h p://bem.info/method/definitions/

Slide 40

Slide 40 text

BEM Classes .block { } .block__element { } .block--modifier { }

Slide 41

Slide 41 text

Media Object .media { margin:10px; }
 .media, .bd { overflow:hidden; _overflow:visible; zoom:1; }
 .media .img { float:left; margin-right: 10px; }
 .media .img img { display:block; }
 .media .imgExt { float:right; margin-left: 10px; }
me

 @Stubbornella 14 minutes ago


Slide 42

Slide 42 text

Media Object in BEM .media { margin:10px; }
 .media, .media__body { overflow:hidden; _overflow:visible; zoom:1; }
 .media__image { float:left; margin-right: 10px; }
 .media__img img { display:block; }
 .media__img—rev { float:right; margin-left: 10px; }
me

 @Stubbornella 14 minutes ago


Slide 43

Slide 43 text

Person Object .person { }
 .eye { }
 .female { }
 .female-eye { }
 .left-eye { } .person { }
 .person__eye { }
 .person- -female { }
 .person- -female__eye { }
 .person__eye- -left { }

Slide 44

Slide 44 text

Person Object Design: Chiara Alio a (h p://viryagroup.com/etv/ )

Slide 45

Slide 45 text

Person Object .chiara { }
 .chiara__eye { }
 .chiara__eye- -left { }
 .chiara__nose { }
 .chiara__glasses { } Design: Chiara Alio a (h p://viryagroup.com/etv/ )

Slide 46

Slide 46 text

Person Object .marco { }
 .marco__eye { }
 .marco__eye- -left { }
 .marco__nose { }
 .marco__glasses { } Design: Chiara Alio a (h p://viryagroup.com/etv/ )

Slide 47

Slide 47 text

Classisitis • Repeating classes are excellent candidates for compression
 
 Source: h p://www.staceyreid.com

Slide 48

Slide 48 text

CSS Preprocessors • Variables • Functions • Mixins & placeholders • Inheritance • Operators & directives • Maps

Slide 49

Slide 49 text

– 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.”

Slide 50

Slide 50 text

File & Folder structure • Every component in its own file • Individual files are pulled in 
 to create a single stylesheet • Much easier to maintain | - vendor/ | - utilities/ | - settings/ | - behavior/ | - | - base/ | - | - | - reset/normalize | - | - | - layout | - | - | - typography | - | - | - forms | - | - | - list | - | - blocks | - | - page | - | - themes | - | - trumps

Slide 51

Slide 51 text

File & Folder structure • Every component in its own file • Individual files are pulled in 
 to create a single stylesheet • Much easier to maintain • Link to JLayout? | - vendor/ | - utilities/ | - settings/ | - behavior/ | - | - base/ | - | - | - reset/normalize | - | - | - layout | - | - | - typography | - | - | - forms | - | - | - list | - | - blocks! | - | - page | - | - themes | - | - trumps

Slide 52

Slide 52 text

SASS & BEM .block {
 &__element { }
 &- -modifier { }
 }
 
 .block { }
 .block__element { }
 .block- -modifier { }

Slide 53

Slide 53 text

SASS & BEM .block {
 @at-root {
 .block__element { }
 .block- -modifier { }
 }
 } .block { }
 .block__element { }
 .block- -modifier { }

Slide 54

Slide 54 text

Abstraction exercise

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

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://css-tricks.com/efficiently-rendering-css/ • 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 p://www.stubbornella.org/content/2010/06/25/the- media-object-saves-hundreds-of-lines-of-code/ • h ps://github.com/necolas/idiomatic-css • h ps://github.com/stubbornella/oocss/wiki • h ps://github.com/joomla/coding-standards/tree/gh- pages

Slide 57

Slide 57 text

a www.facebook.com/crossinghippos
 h ps://speakerdeck.com/babsgosgens

Slide 58

Slide 58 text

a www.facebook.com/crossinghippos
 h ps://speakerdeck.com/babsgosgens

Slide 59

Slide 59 text

a www.facebook.com/crossinghippos
 h ps://speakerdeck.com/babsgosgens

Slide 60

Slide 60 text

www.crossinghippos.com er @crossinghippos

Slide 61

Slide 61 text

www.crossinghippos.com er @crossinghippos

Slide 62

Slide 62 text

www.crossinghippos.com er @crossinghippos