Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Future is In Pieces
Search
snookca
December 05, 2015
Programming
210
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Future is In Pieces
My talk from CSSDay.io
snookca
December 05, 2015
More Decks by snookca
See All by snookca
Responsive Web Applications
snookca
0
1.7k
Responsive Web Applications
snookca
4
1k
Responsive Web Applications
snookca
0
200
Responsive Web Applications with Container Queries
snookca
3
740
Responsive Web Applications
snookca
0
140
Becoming a Deep Generalist
snookca
1
540
Your CSS is a Mess from ShropGeek's Revolution Conf
snookca
4
230
Your CSS is a Mess from SmartWeb
snookca
0
270
How to Write a Book
snookca
4
450
Other Decks in Programming
See All in Programming
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
110
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
180
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
880
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
190
Contextとはなにか
chiroruxx
1
330
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
840
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.4k
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
350
RTSPクライアントを自作してみた話
simotin13
0
610
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
13k
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Everyday Curiosity
cassininazir
0
230
GitHub's CSS Performance
jonrohan
1033
470k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Test your architecture with Archunit
thirion
1
2.3k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Transcript
The Future is in Pieces
2003 CSS Takes Off
Wired Redesign
Blog Design
None
None
Blog Designs #header h1, #header h2 { font-size:13px; font-weigh… }
#header h1 { color: #680; float:right; padding-b…} #header h2 { float:left; padding:18px 20px; posi…} #header h2 img { position:absolute; left:0; top:0; } #header h2 a { text-decoration:none; color:#333; } #main h2 {text-transform:uppercase; font-weight:…} #main h2 a {text-decoration:none; color:#444;} #main h2 a:hover {color:#680;} #main .article.inside h1 { text-transform:uppercase;…} #comments .comment .meta .authorname { text-transfo… } #comments .comment .meta .commentnumber a { float: … }
Blog Designs #header h1, #header h2 { font-size:13px; font-weigh… }
#header h1 { color: #680; float:right; padding-b…} #header h2 { float:left; padding:18px 20px; posi…} #header h2 img { position:absolute; left:0; top:0; } #header h2 a { text-decoration:none; color:#333; } #main h2 {text-transform:uppercase; font-weight:…} #main h2 a {text-decoration:none; color:#444;} #main h2 a:hover {color:#680;} #main .article.inside h1 { text-transform:uppercase;…} #comments .comment .meta .authorname { text-transfo… } #comments .comment .meta .commentnumber a { float: … }
Blog Designs #header h1, #header h2 { font-size:13px; font-weigh… }
#header h1 { color: #680; float:right; padding-b…} #header h2 { float:left; padding:18px 20px; posi…} #header h2 img { position:absolute; left:0; top:0; } #header h2 a { text-decoration:none; color:#333; } #main h2 {text-transform:uppercase; font-weight:…} #main h2 a {text-decoration:none; color:#444;} #main h2 a:hover {color:#680;} #main .article.inside h1 { text-transform:uppercase;…} #comments .comment .meta .authorname { text-transfo… } #comments .comment .meta .commentnumber a { float: … }
None
None
None
None
None
None
SMACSS
Scalable and Modular Architecture for CSS
• Describes how to approach site design and development •
No GitHub repo, not a library, not a framework, no tools • Techniques can be applied to static CSS, Sass, React, Web Components, etc.
What does it mean to be modular?
A module is “each of a set of standardized parts
or independent units that can be used to construct a more complex structure.” –Dictionary
None
None
None
None
What hurdles are there to being truly independent?
• Inheritance • Cascade • Browser Default Styling • Putting
modules/components together
Inheritance
• Typography e.g. color, font-size, font-family • List Styles e.g.
list-style • Table Styles e.g. border-collapse
Sorry, React. Inline styles won’t save you from inheritance.
• all: initial
None
None
Cascade
The cascade is how the browser decides what properties to
apply when you have multiple rules declared on the same element.
a:link { color: blue; } a:hover { color: cornflowerblue; }
.sidebar a:link { color: grey; } .sidebar a:hover { color: crimson; } .nav a:link { color: cadetblue; } .nav a:hover { color: darkblue; }
• Don’t write multiple rules for the same element •
Inline styles • Create a structured layering system to prevent conflicts
Browser Defaults
<button class="button"> .button { border:1px solid purple; padding: 5px 10px;
color: pink; } <a href="/" class="button"> text-decoration: none;
• all: initial • Predictable HTML i.e. templates
Putting Modules Together
Send
Cancel Send
.button + .button { margin-left: 10px; }
Cancel Send
Send Email
.button + .button, .input + .button { margin-left: 10px;
} * + * { margin-left: 10px; }
Send Subscribe Email
http://snk.ms/26
• Separate layout from module • Micro layout classes
<span class=“layout-inline”> <input><button>Send</button> </span> <span class=“layout-inline”> <button>Subscribe</button> </span>
<input><button>Send</button> <button class=“ML-S”>Subscribe</ button>
BONUS PROBLEM! Media Queries
None
None
If Module A in Module B in Layout
C Then I’m screwed.
If Module A has room do this.
Element Queries
Element Queries
Oh, right. SMACSS.
None
None
None
None
None
None
None
Design has a cost.
Every piece of design ends up in code.
None
None
• Categorize • Naming Convention
Base Layout Module State Theme
• .btn • .btn--variation • .btn__component • .btn • &--variation
• &__component • button.css • .variation • .component SMACSS-y BEM Sass CSS Modules/React • .btn • .btn-variation • .btn--component
HTML CSS JavaScript HTML CSS JavaScript HTML CSS JavaScript
The Future is React?
React.render( <XUIButton type={type}> My Button! </XUIButton> );
var XUIButton = React.createClass({ render: function() { return ( <button
className="{this.props.type}"> {this.props.children} </button> ); } });
var myStyle = { color: '#FFF', backgroundColor: '#330000' } var
XUIButton = React.createClass({ render: function() { return ( <button style="{myStyle}"> {this.props.children} </button> ); }
HTML CSS JavaScript HTML CSS JavaScript HTML CSS JavaScript
The Future is Web Components?
• Templates • Shadow DOM • Custom Elements • HTML
Imports
var p = document.createElement(‘p'); p.createShadowRoot(); p.shadowRoot.innerHTML = 'HTML Contents'; document.body.appendChild(p);
• The Cascade no longer applies • Inheritance still applies
(unless you use all:initial)
None
HTML CSS JavaScript
HTML CSS JavaScript component.html <link rel="import" href="component.html">
<template> <figure> <content select="img"></content> </figure> <div> <content></content> </div> </template>
<custom-element> <img src="…"> </custom-element>
// Creates a MediaObjectElement class // that extends HTMLElement. class
MediaObjectElement extends HTMLElement { createdCallback() { var shadowRoot = this.createShadowRoot(); shadowRoot.innerHTML = 'Shadow DOM contents...'; } } // Registers the `<custom-element>` element for use. document.registerElement('custom-element', MediaObjectElement);
• Likely a year before all browsers support everything. •
JavaScript Dependent • Phillip Walton’s Talk on Modular CSS with Web Components http://snk.ms/27
• Think about standardized and modular design. • Frameworks like
React can help. • Web Components are coming. (So is winter.)
Thank you. http://snook.ca/ @snookca