Rolling Your Own CSS Methodology

133
ROLLING YOUR OWN CSS METHODOLOGY Dave Shea

Transcript of Rolling Your Own CSS Methodology

Page 1: Rolling Your Own CSS Methodology

ROLLING YOUR OWN CSS METHODOLOGY

Dave Shea

Page 2: Rolling Your Own CSS Methodology

section { color: black;}

Page 3: Rolling Your Own CSS Methodology

section { color: black;}.page section { color: blue;}

Page 4: Rolling Your Own CSS Methodology

section { color: black;}.page section { color: blue;}.page section > ul { color: black;}

Page 5: Rolling Your Own CSS Methodology

section { color: black;}.page section { color: blue;}.page section > ul { color: black;}.page section > ul li:first-child { color: blue;}

Page 6: Rolling Your Own CSS Methodology

section { color: black;}.page section { color: blue;}.page section > ul { color: black;}.page section > ul li:first-child { color: blue;}

@media only screen and (min-width: 480px) {

section, .page section, .page section > ul, .page section > ul li:first-child {

color: orange;}

}

Page 7: Rolling Your Own CSS Methodology

section { color: black;}.page section { color: blue;}.page section > ul { color: black;}.page section > ul li:first-child { color: blue;}

@media only screen and (min-width: 480px) {

section, .page section, .page section > ul, .page section > ul li:first-child {

color: orange;}

}

* { color: black !important;}

Page 8: Rolling Your Own CSS Methodology

CSS is Simple!

Page 9: Rolling Your Own CSS Methodology
Page 10: Rolling Your Own CSS Methodology

So maybe it’s not.

Page 11: Rolling Your Own CSS Methodology

What are we going to do about it?

Page 12: Rolling Your Own CSS Methodology

WHO AM I?

Page 13: Rolling Your Own CSS Methodology

@mezzoblue @mobify

Page 14: Rolling Your Own CSS Methodology
Page 15: Rolling Your Own CSS Methodology

LET’S TALK ABOUT CSS

Page 16: Rolling Your Own CSS Methodology

Why think about this?

Page 17: Rolling Your Own CSS Methodology

OUR PROBLEMS TO SOLVE

Page 18: Rolling Your Own CSS Methodology

Bloated Codebase

Page 19: Rolling Your Own CSS Methodology

Development friction

Page 20: Rolling Your Own CSS Methodology

Growing team

Page 21: Rolling Your Own CSS Methodology

The Goal

Page 22: Rolling Your Own CSS Methodology

WHAT’S A CSS METHODOLGY?

Page 23: Rolling Your Own CSS Methodology

A Naming System

Page 25: Rolling Your Own CSS Methodology

Why not use the others?

Page 26: Rolling Your Own CSS Methodology

Why not use Bootstrap or Foundation?

Page 27: Rolling Your Own CSS Methodology

Framework != Methodology

Page 28: Rolling Your Own CSS Methodology

The last thing the world needs is another one.

Page 29: Rolling Your Own CSS Methodology

But we built one anyway

Page 30: Rolling Your Own CSS Methodology

It’s called Argon

Page 31: Rolling Your Own CSS Methodology

Is Argon right for you?

Page 32: Rolling Your Own CSS Methodology

Truthfully… probably not

Page 33: Rolling Your Own CSS Methodology

This is a case study

Page 34: Rolling Your Own CSS Methodology

What To Do

Page 35: Rolling Your Own CSS Methodology

What To Do

Page 36: Rolling Your Own CSS Methodology

WHAT WE WANT FROM ARGON

Page 37: Rolling Your Own CSS Methodology

Predictability

Page 38: Rolling Your Own CSS Methodology

DRY

Page 39: Rolling Your Own CSS Methodology

DRYDon’t Repeat Yourself

Page 40: Rolling Your Own CSS Methodology

.button { display: inline-block; padding: 0.5rem 1rem; border-radius: 3px; color: #fff; background: gradient($grey20, $grey18, 50%); font-size: 1rem; text-decoration: none;}.input { display: inline-block; padding: 0.5rem 1rem; border-radius: 3px; color: #000; background: #fff; font-size: 1rem; text-decoration: none;}

Page 41: Rolling Your Own CSS Methodology

.button, input { display: inline-block; padding: 0.5rem 1rem; border-radius: 3px; font-size: 1rem; text-decoration: none;}.button { color: #fff; background: gradient($grey20, $grey18, 50%);}.input { color: #000; background: #fff;}

Page 42: Rolling Your Own CSS Methodology

Re-usability

Page 43: Rolling Your Own CSS Methodology

.contactpage .submit-form div.inline-options .form-element { display: inline-block; float: left; width: 25%;}

Page 44: Rolling Your Own CSS Methodology

.form .form-element { display: inline-block; float: left; width: 25%;}

Page 45: Rolling Your Own CSS Methodology

Modularity

Page 46: Rolling Your Own CSS Methodology
Page 47: Rolling Your Own CSS Methodology
Page 48: Rolling Your Own CSS Methodology

No specificity battles

Page 49: Rolling Your Own CSS Methodology

section { color: black;}.page section { color: blue;}.page section > ul { color: black;}.page section > ul li:first-child { color: blue;}

@media only screen and (min-width: 480px) {

section, .page section, .page section > ul, .page section > ul li:first-child {

color: orange;}

}

* { color: black !important;}

Page 50: Rolling Your Own CSS Methodology

Team-wide consistency

Page 51: Rolling Your Own CSS Methodology

Argon extra credits: @jam_sbryant & @kbingman

Page 52: Rolling Your Own CSS Methodology

ANATOMY OF A SELECTOR

Page 53: Rolling Your Own CSS Methodology

AT-A-GLANCE UNDERSTANDING

.swift-project.-activeProject ._filterField { width: 25%;}

Page 54: Rolling Your Own CSS Methodology

Ugly selectors? You bet they are.

Page 55: Rolling Your Own CSS Methodology

NAMESPACE

.swift-project.-activeProject ._filterField { width: 25%;}

Page 56: Rolling Your Own CSS Methodology

(Maybe not our best idea)

Page 57: Rolling Your Own CSS Methodology

COMPONENT

.swift-project.-activeProject ._filterField { width: 25%;}

Page 58: Rolling Your Own CSS Methodology
Page 59: Rolling Your Own CSS Methodology
Page 60: Rolling Your Own CSS Methodology

MODIFIER

.swift-project.-activeProject ._filterField { width: 25%;}

Page 61: Rolling Your Own CSS Methodology
Page 62: Rolling Your Own CSS Methodology
Page 63: Rolling Your Own CSS Methodology

DESCENDANT (SUB-COMPONENT)

.swift-project.-activeProject ._filterField { width: 25%;}

Page 64: Rolling Your Own CSS Methodology
Page 65: Rolling Your Own CSS Methodology
Page 66: Rolling Your Own CSS Methodology
Page 67: Rolling Your Own CSS Methodology

ARGON IDEALS

Page 68: Rolling Your Own CSS Methodology

Classes for everything

Page 69: Rolling Your Own CSS Methodology

No ID styling

Page 70: Rolling Your Own CSS Methodology
Page 71: Rolling Your Own CSS Methodology

#nav { margin: 0;}

Page 72: Rolling Your Own CSS Methodology

.nav { margin: 0;}

Page 73: Rolling Your Own CSS Methodology

No styling of HTML elements

Page 74: Rolling Your Own CSS Methodology

h2 { font-size: 1rem;}

Page 75: Rolling Your Own CSS Methodology

.header-2 { font-size: 1rem;}

Page 76: Rolling Your Own CSS Methodology

EXCEPTION

base-html.css

Page 77: Rolling Your Own CSS Methodology

Don’t over-select

Page 78: Rolling Your Own CSS Methodology

THIS IS UNACCEPTABLE

.panel { display: block; margin: 1rem 0; font-size: 0.8rem; }

.panel .panel-wrapper { padding: 1.5rem; }

.panel .panel-list { width: 50%; float: left; }

.panel .panel-list ul.item-list { margin: 0; list-style: none; }

.panel .panel-list ul.item-list li.item { display: block; margin: 0.5rem 0; }

.panel .panel-list ul.item-list li.item a { font-weight: bold; }

.panel .panel-list ul.item-list li.item a:hover, .panel .panel-list ul.item-list li.item a:focus { text-decoration: underline; }.panel .panel-list ul.item-list li.item a span.prompt::before { content: "$ "; }.panel .panel-list ul.item-list li.item a i { font-style: normal; }

Page 79: Rolling Your Own CSS Methodology
Page 80: Rolling Your Own CSS Methodology
Page 81: Rolling Your Own CSS Methodology

NO !important

Page 82: Rolling Your Own CSS Methodology

Argon flattens to BEM

Page 83: Rolling Your Own CSS Methodology

.project__filterField-—conditionValue { width: 25%;}

Page 84: Rolling Your Own CSS Methodology

.swift-project ._filterField.-conditionValue { width: 25%;}

Page 85: Rolling Your Own CSS Methodology

.swift-project .__filterField.--conditionValue { width: 25%;}

Page 86: Rolling Your Own CSS Methodology

.swift-project .__filterField.--conditionValue { width: 25%;}

Page 87: Rolling Your Own CSS Methodology

.swift-project ._filterfield.-conditionvalue { width: 25%;}

Page 88: Rolling Your Own CSS Methodology

.swift-project ._filterfield.-conditionvalue { width: 25%;}

Page 89: Rolling Your Own CSS Methodology

NESTED ARGON.swift-project { ._filterList { width: 50%; } &.-activeProject { ._filterList { width: 100%; } } ._filterField { &.-conditionValue { width: 25%; } }}

Page 90: Rolling Your Own CSS Methodology

vs. BEM

.swift-project__filterList { width: 50%;}.swift-project--activeProject__filterList { width: 100%;}.swift-project__filterField--conditionValue { width: 25%;}

Page 91: Rolling Your Own CSS Methodology

HTML (ARGON)

<div class="swift-project -activeProject"> <div class="_filterList"> <input type="text" class="_filterField" /> <input type="text" class="_filterField" /> </div> <button type="submit" class="_filterApply"> Okay </button></div>

Page 92: Rolling Your Own CSS Methodology

HTML (BEM)

<div class="swift-project--activeProject"> <div class="swift-project--activeProject__filterList"> <input type="text" class="swift-project--activeProject__filterField" /> <input type="text" class="swift-project--activeProject__filterField" /> </div> <button type="submit" class="swift-project--activeProject__filterApply"> Okay </button></div>

Page 93: Rolling Your Own CSS Methodology

Exceptions

Page 94: Rolling Your Own CSS Methodology

JAVASCRIPT? DON’T TOUCH!

.jsSwiftProject { width: 25%; // NO! BAD!!!}

Page 95: Rolling Your Own CSS Methodology

STATES? ONLY VISIBILITY STYLING

.is-visible { display: inline-block;}.is-hidden { display: none;}

Page 96: Rolling Your Own CSS Methodology

OTHER STUFF WE HAVE RULES FOR

• White space

• Style rule ordering

• File structure

• z-index scale

• Typography scale

• Grid system

• Colour

• etc.

Page 97: Rolling Your Own CSS Methodology

FURTHER READING / WATCHING• High-level advice and guidelines for writing sane, manageable, scalable CSS

• The Modular CSS (BEM/OOCSS) naming conundrum

• Medium’s CSS is actually pretty f***ing good.

• Slaying the Dragon: Refactoring CSS for Maintainability – Alicia Liu at Front-Trends 2014

• Code Refactoring for America

• Pixels are expensive

• Let’s Play Nice with CSS Tools & Methodologies – Brad Westfall at HTML5DevConf

Page 98: Rolling Your Own CSS Methodology

ROLLOUT

Page 99: Rolling Your Own CSS Methodology

New features only

Page 100: Rolling Your Own CSS Methodology
Page 101: Rolling Your Own CSS Methodology
Page 102: Rolling Your Own CSS Methodology
Page 103: Rolling Your Own CSS Methodology
Page 104: Rolling Your Own CSS Methodology
Page 105: Rolling Your Own CSS Methodology
Page 106: Rolling Your Own CSS Methodology
Page 107: Rolling Your Own CSS Methodology

But, the design changed!

Page 108: Rolling Your Own CSS Methodology
Page 109: Rolling Your Own CSS Methodology
Page 110: Rolling Your Own CSS Methodology

OUTCOME

Page 111: Rolling Your Own CSS Methodology

Ramp up?

Page 112: Rolling Your Own CSS Methodology

NEED GREAT DOCS

Page 113: Rolling Your Own CSS Methodology

Forces thought

Page 114: Rolling Your Own CSS Methodology

Quick code reviews

Page 115: Rolling Your Own CSS Methodology
Page 116: Rolling Your Own CSS Methodology

Debugging

Page 117: Rolling Your Own CSS Methodology
Page 118: Rolling Your Own CSS Methodology
Page 119: Rolling Your Own CSS Methodology

Over-reliance on modifiers

Page 120: Rolling Your Own CSS Methodology

File sizes?

Page 121: Rolling Your Own CSS Methodology

Only works for controlled systems

Page 122: Rolling Your Own CSS Methodology

Will the cost:benefit ratio break down?

Page 123: Rolling Your Own CSS Methodology

WRAPPING UP

Page 124: Rolling Your Own CSS Methodology

The big breakthrough:

Page 125: Rolling Your Own CSS Methodology

It’s not the syntax

Page 126: Rolling Your Own CSS Methodology

It’s the discipline

Page 127: Rolling Your Own CSS Methodology

Every project? No.

Page 128: Rolling Your Own CSS Methodology

Favour shipping

Page 129: Rolling Your Own CSS Methodology

Be wary of “The Perfect Syntax”

Page 130: Rolling Your Own CSS Methodology

The proof is in the implementation

Page 131: Rolling Your Own CSS Methodology

Build systems that people understand

Page 132: Rolling Your Own CSS Methodology

THANKS!http://mezzoblue.com/presentations/2015/fitc

Page 133: Rolling Your Own CSS Methodology

FURTHER RESOURCES• A Maintainable Style Guide

• Combine matching media queries with Grunt

• Setting up Sass and Compass with source maps

• Using source maps with Sass 3.3

• csste.st - The How and Why of CSS Testing

• Code refactoring for America