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
200
1
Share
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
730
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
220
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
Stage 3 Decorators でできること / できないこと / TSKaigi 2026
susisu
1
1.3k
OCRを使ってゲームのアイテムをデータ化する
kishikawakatsumi
0
120
ビジネスモデルから紐解く、AI+型駆動開発
hirokiomote
2
3.8k
RailsTokyo 2026#4: AI様があれば、 Hotwireの弱点は消えるか?
naofumi
5
1k
net-httpのHTTP/2対応について
naruse
0
310
oxlintはeslint/typescript-eslintを置き換えられるのか
shomafujita
2
280
GitHub Copilot CLIのいいところ
htkym
2
1.2k
AIエージェントの隔離技術の徹底比較
kawayu
0
440
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
310
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
390
Transactional Change Stream Processing With Debezium and Apache Flink
gunnarmorling
1
140
バックエンドにElysiaJSを採用して気付いた、良い点・悪い点
wanko_it
1
190
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
540
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Visualization
eitanlees
152
17k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
560
A Soul's Torment
seathinner
6
2.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
The Pragmatic Product Professional
lauravandoore
37
7.3k
HDC tutorial
michielstock
2
680
Are puppies a ranking factor?
jonoalderson
1
3.4k
KATA
mclloyd
PRO
35
15k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
320
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