SlideShare a Scribd company logo
なんでCSS 
すぐ死んでしまうん 
Frontrend in Kanazawa 
https://www.flickr.com/photos/tveskov/3387394098
@pocotan001 
Hayato Mizuno
なんでCSSすぐ死んでしまうん
@大阪 
http://peatix.com/event/55901
BIG CSS 
https://www.youtube.com/watch?v=R-BX4N8egEc 
https://www.flickr.com/photos/nickpiggott/5212359135
“CSSはその単純さゆえに、 
大規模な実装では管理が難しい。 
BIG CSS 
“CSS, for all its simplicity, is a difficult language to manage in 
large-scale implementations. ” 
- MVCSS / Overview 
https://www.youtube.com/http://watch?mvcss.v=github.R-BX4N8egEc 
io/ 
https://www.flickr.com/photos/nickpiggott/5212359135
簡単なシンタックス ≠ 簡単な言語 
! 異なるバージョンとブラウザベンダーへの依存 
! ネームスペースの問題 
! 紳士協定だけでルBIG ールをCSS 
制限する難しさ 
! … 
https://www.youtube.com/watch?v=R-BX4N8egEc 
https://www.flickr.com/photos/nickpiggott/5212359135
http://p.twipple.jp/qk9sw
http://p.twipple.jp/qk9sw 
div { 
background: pink; 
}
望ましい設計のゴール 
https://www.flickr.com/photos/nickpiggott/5212959770/in/photostream/
メンテナンス 
60% 
開発 
40% 
http://d.hatena.ne.jp/asakichy/20120420/1334872770
メンテナンス 
60% 
開発 
40% 
要件変更 
60% 
移行 
23% 
バグ修正 
17% 
http://d.hatena.ne.jp/asakichy/20120420/1334872770
メンテナンス 
60% 
開発 
40% 
コードを 
理解する時間 
30% 
http://d.hatena.ne.jp/asakichy/20120420/1334872770
良いCSS設計のゴール 
メンテナンス 
60% 
開発 
40% 
コードを 
理解する時間 
30% 
http://article.enja.io/articles/css-architecture.html 
http://d.hatena.ne.jp/asakichy/20120420/1334872770 
! 予測しやすい 
! 再利用しやすい 
! 保守しやすい 
! 拡張しやすい
http://goo.gl/OnnMm
http://goo.gl/OnnMm 
設計はルーズなプロセスである 
! 問題を解決することで新たな問題を生む 
! うまくいくかどうかは試してみないとわからない 
! 要件が変われば設計も変わる(かもしれない)
メソドロジーとルール 
https://www.flickr.com/photos/bdesham/2432400623
“我々はページをデザインしているの 
ではない、コンポーネントのシステ 
ムをデザインしているのだ。 
“We're not designing pages, we're designing systems of components. ” 
- Stephen Hay 
http://bradfrostweb.com/blog/mobile/bdconf-stephen-hay-presents-responsive-design-workflow/
http://styletil.es/
http://sparkbox.github.io/style-prototype/
http://medialoot.com/item/free-flat-ui-design-kit/
http://getbootstrap.com/
https://www.polymer-project.org/
https://www.flihctktpr.c:/o/cmo/dpehpoetons.io/la/peoncuolfetaann0/50914/f3u1ll/3E2tq2r9c6/
<paper-button label="button"> 
</paper-button> 
! 
<paper-button label="button" 
raisedButton> 
</paper-button> 
https://www.polymer-project.org/docs/elements/paper-elements.html#paper-button
<paper-button label="button"> 
</paper-button> 
! 
<paper-button label="button" 
raisedButton> 
</paper-button> 
Visual Non-visual 
! <core-icon> 
! <core-list> 
! <core-overlay> 
! … 
! <core-ajax> 
! <core-media-query> 
! <core-localstorage> 
! … 
https://www.polymer-project.org/docs/elements/paper-elements.html#paper-button
https:/h/wttwpsw:/./flwicwkrw.c.opmol/ypmheort-opsr/olajeecnt.uolfrega/nto/o5l9s4/d3e1s3ig2n2e9r6/
https://www.flickr.com/photohst/tlape:/n/cuulfesatonm/5e9le4m31e3n2ts2.9io6/
http://www.bestpsdfreebies.com/freebie/appz-psd-theme/
再利用可能な 
チャンクに分離する 
- OOCSS - 
https://github.com/stubbornella/oocss/wiki
なんでCSSすぐ死んでしまうん
なんでCSSすぐ死んでしまうん
.button { ... } 
! 
.panel { ... }
なんでCSSすぐ死んでしまうん
付加要素は 
Modifierで拡張する
HTML 
<a class="button">Download</a> 
CSS 
.button { ... } 
!
HTML 
<a class="button">Download</a> 
CSS 
.button { ... } 
.button-raised { 
box-shadow: 0 1px 1px rgba(0, 0, 0, .5); 
} 
.button-large { 
font-size: 24px; 
}
HTML 
<a class="button button-raised">Download</a> 
CSS 
.button { ... } 
.button-raised { 
box-shadow: 0 1px 1px rgba(0, 0, 0, .5); 
} 
.button-large { 
font-size: 24px; 
}
HTML 
<a class="button button-large">Download</a> 
CSS 
.button { ... } 
.button-raised { 
box-shadow: 0 1px 1px rgba(0, 0, 0, .5); 
} 
.button-large { 
font-size: 24px; 
}
なんでCSSすぐ死んでしまうん
.panel { ... }
.panel { ... } 
! 
.panel-colored { ... }
.panel { ... } 
! 
.panel-colored { ... } 
ステートルール 
- SMACSS - 
https://smacss.com/book/type-state
.panel { ... } 
! 
.panel-colored { ... }
.panel { ... } 
! 
/* States */ 
.is-panel-active { ... }
.panel { ... } 
! 
/* States */ 
.panel.is-active { ... }
.panel { ... } 
! 
/* States */ 
.panel:hover, 
.panel.is-active { ... }
なんでCSSすぐ死んでしまうん
再利用しない 
ユニークな部分は?
プロジェクトレイヤー 
- MCSS - 
http://operatino.github.io/MCSS/ja/
なんでCSSすぐ死んでしまうん
.tagline { ... }
.tagline { ... } 
! 
.tagline .button { ... }
プロジェクトレイヤー 
- FLOCSS - 
https://github.com/hiloki/flocss
.p-tagline { ... } 
! 
.p-tagline .c-button { ... }
関心を分離せよ 
https://www.flickr.com/photos/clement127/9761836954
なんでCSSすぐ死んでしまうん
シナリオを立て 
汎用さに対応する
<a class="button">Download</a>
<a class="button">Download</a> 
! 
<button class="button">Download</button>
<a class="button">Download</a> 
! 
<button class="button">Download</button> 
! 
<span class="button">Download</span>
.button { 
position: relative; 
display: inline-block; 
box-sizing: border-box; 
padding: 12px 26px; 
border: none; 
background: #f12078; 
color: #fff; 
vertical-align: middle; 
text-align: center; 
text-decoration: none; 
font-size: 18px; 
cursor: pointer; 
user-select: none; 
}
.button { 
position: relative; 
display: inline-block; 
box-sizing: border-box; 
padding: 12px 26px; 
border: none; 
background: #f12078; 
color: #fff; 
vertical-align: middle; 
text-align: center; 
text-decoration: none; 
font-size: 18px; 
cursor: pointer; 
user-select: none; 
} 
ベースは後から 
変更するのが難しい
.button { 
position: relative; 
display: inline-block; 
box-sizing: border-box; 
padding: 12px 26px; 
border: none; 
background: #f12078; 
color: #fff; 
vertical-align: middle; 
text-align: center; 
text-decoration: none; 
font-size: 18px; 
cursor: pointer; 
user-select: none; 
} 
Modifierで 
拡張すべき要素か 
どうかをよく検討する
.button { 
position: relative; 
display: inline-block; 
box-sizing: border-box; 
padding: 12px 26px; 
border: none; 
background: #f12078; 
color: #fff; 
vertical-align: middle; 
text-align: center; 
text-decoration: none; 
font-size: 18px; 
cursor: pointer; 
user-select: none; 
}
なんでCSSすぐ死んでしまうん
スタイルとJSの 
フックを分離する
HTML 
<div class="panel"></div> 
JS 
$('.panel').on('click' ...);
HTML 
<div class="panel js-ui-featured"></div> 
JS 
$('.js-ui-featured').on('click' ...);
AngularJS 
https://angularjs.org/
<div class="panel" ng-click="..."> 
</div>
なんでCSSすぐ死んでしまうん
コンポーネント同士の 
関係を疎にする
.panel { ... } 
! 
.panel .heading { ... }
.panel { ... } 
! 
.heading { ... }
.panel { ... } 
! 
.heading 関{ 連...す }る 要素として 
捉えるなら 
サブコンポーネント 
として定義する
.panel { ... } 
! 
.panel-heading { ... }
.panel { ... } 
! 
.panel-heading { ... } 
もしくは命名で 
どのようなルールが 
適用されるかを伝える
http://getbootstrap.com/
http://getbootstrap.com/ 
Button groups
<Bduivtt oclna sgsr=o"butpn-sg:roup"> 
<button class="btn">Left</button> 
<button class="btn">Middle</button> 
<button class="btn">Right</button> 
</div> 
http://getbootstrap.com/
なんでCSSすぐ死んでしまうん
レイアウトを 
分離する 
- SMACSS - 
https://smacss.com/book/type-state
.panel { 
float: left; 
box-sizing: border-box; 
margin-right: 20px; 
padding: 20px; 
width: 220px; 
background: #fff; 
}
.panel { 
float: left; 
box-sizing: border-box; 
margin-right: 20px; 
padding: 20px; 
width: 220px; 
background: #fff; 
}
.l-featured .panel { 
float: left; 
margin-right: 20px; 
width: 220px; 
}
.l-featured .panel { 
float: left; 
margin-right: 20px; 
width: 220px; 
} ユーティリティで 
対応する 
- SUIT CSS - 
https://github.com/suitcss
.u-float-left { 
float: left; 
} 
! 
.u-margin-r-m { 
margin-right: 20px; 
} 
! 
...
.u-float-left { 
float: left; 
} 
! 
.u-margin-r-m { 
margin-right: 20px; 
} 
! 
... 
グリッドシステム 
を活用する 
- Kite - 
http://hiloki.github.io/kitecss/
<div class="kite kite--grid has-gutter"> 
<div class="panel kite__item is-3of12"> 
... 
</div> 
<div class="panel kite__item is-3of12"> 
... 
</div> 
<div class="panel kite__item is-3of12"> 
... 
</div> 
<div class="panel kite__item is-3of12"> 
... 
</div> 
</div>
http://hiloki.github.io/kitecss/
命名のルール 
https://www.flickr.com/photos/bfishadow/3634061465
https://bem.info/
https://bem.info/ 
block 
block_modifier 
block__element 
block__element_modifier
http://article.enja.io/articles/about-html-semantics-and-front-end-architecture.html
component 
component--modifier 
component__subcomponent 
component__subcomponent--modifier 
http://article.enja.io/articles/about-html-semantics-and-front-end-architecture.html
https://github.com/hiloki/flocss
c-component 
c-component—modifier 
c-component__subcomponent 
c-component__subcomponent—modifier 
https://github.com/hiloki/flocss
なんでCSSすぐ死んでしまうん
.button { ... } 
! 
.button-raised { ... } 
! 
.button-large { ... }
.button { ... } 
! 
.button—-raised { ... } 
! 
.button—-large { ... }
なんでCSSすぐ死んでしまうん
.panel { ... } 
! 
.panel-heading { ... }
.panel { ... } 
! 
.panel__heading { ... }
https://github.com/bjankord/CSS-Components-Modifiers-And-Subcomponents-Collection
スタイルガイドドリブン開発 
http://webuild.envato.com/blog/styleguide-driven-development/ 
https://www.flickr.com/photos/tveskov/5550625027
http://kaleistyleguide.com/
http://kaleistyleguide.com/ 
シナリオを 
可視化する
なんでCSSすぐ死んでしまうん
生きたスタイルガイド 
を持ち込む
なんでCSSすぐ死んでしまうん
https://www.flickr.com/photos/dex1138/7002850433 
Code Smells 
http://article.enja.io/articles/code-smells-in-css.html
スタイルの取り消し
.button { 
box-sizing: border-box; 
padding: 12px 26px; 
text-align: center; 
} 
! 
.button—-no-padding { 
スタイルの取り消し 
padding: 0; 
}
.button { 
box-sizing: border-box; 
padding: 12px 26px; 
text-align: center; 
} 
! 
.button—-no-padding { 
スタイルの取り消し 
padding: 0; 
}
.button { 
box-sizing: border-box; 
text-align: center; 
} 
! 
.button—-large { 
スタイルの取り消し 
padding: 12px 26px; 
}
マジックナンバー
マジックナンバー 
.bubble { 
position: absolute; 
top: -57px; 
left: 0; 
... 
}
マジックナンバー 
.bubble { 
position: absolute; 
top: -57px; 
left: 0; 
... 
}
マジックナンバー 
.bubble { 
position: absolute; 
bottom: 100%; 
left: 0; 
... 
}
受動的な詳細度
#main .button { 
margin: 20px !important; 
width: 100% !important; 
受動的な詳細度 
}
#main .button { 
margin: 20px !important; 
width: 100% !important; 
受動的な詳細度 
}
.u-margin-m { 
margin: 20px !important; 
} 
! 
.button--full { 
受動的な詳細度 
width: 100%; 
}
競合する要素に優先順位を 
! ピクセルパーフェクト or フレキシブル 
! すぐに稼働するコード or 美しいコード 
競合する要素に優先順位を 
! DRY or 保守性 
! 正しさ or 一貫性 
! 汎用性 or シンプルさ
https://github.com/pocotan001/ptan-no-css
https://github.com/pocotan001/ptan-no-css 
! ベースはFLOCSSを採用 
! 例外としてコンポーネントはプリフィックスなし 
! ユーティリティのみ略語を許容 
! CSSプリプロセッサーはなし 
! Concat, Myth, Autoprefixer, Minify
Designer ♥ Developer 
http://www.flickr.com/photos/fallentomato/11768159726
“壊れない完璧な設計を求めるのでは 
なく、壊れたときに勇気を持って修 
復できる設計を。 
- cssradar
THANK YOU 
https://www.flickr.com/photos/tveskov/3387394098

More Related Content

PDF
HTML5, きちんと。
PDF
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
PDF
ブラウザにやさしいHTML/CSS
PDF
私がドメイン駆動設計をやる理由
PPTX
PHP と SAPI と ZendEngine3 と
PDF
初心者のためのRとRStudio入門 vol.2
PDF
Leap motion.js
PDF
Proxy War
HTML5, きちんと。
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
ブラウザにやさしいHTML/CSS
私がドメイン駆動設計をやる理由
PHP と SAPI と ZendEngine3 と
初心者のためのRとRStudio入門 vol.2
Leap motion.js
Proxy War

What's hot (20)

PDF
統計ソフトRの使い方_2015.04.17
KEY
リーダブルコード
PDF
Denoで動くReactフレームワークAleph.jsでポートフォリオサイトをリプレイスした話
PDF
<Little Big Data #1> 한국어 채팅 데이터로 머신러닝 하기
PPTX
SPARQL introduction and training (130+ slides with exercices)
PDF
IT Pro のための PowerShell スクリプティング
PPTX
Androidで動かすはじめてのDeepLearning
PDF
楕円曲線入門 トーラスと楕円曲線のつながり
PDF
Atomic Architecture
PPTX
Css selectors
PPTX
良いコードとは
PDF
ゼロから始めるQ#
PDF
AtCoder Beginner Contest 023 解説
PPTX
MongoDBが遅いときの切り分け方法
PDF
ドメイン駆動設計 基本を理解する
PPTX
オフラインWebアプリケーションのつくりかた
PPT
試験にでるSpring
PDF
データベース設計徹底指南
PPTX
SIMDで整数除算
PDF
asm.jsとWebAssemblyって実際なんなの?
統計ソフトRの使い方_2015.04.17
リーダブルコード
Denoで動くReactフレームワークAleph.jsでポートフォリオサイトをリプレイスした話
<Little Big Data #1> 한국어 채팅 데이터로 머신러닝 하기
SPARQL introduction and training (130+ slides with exercices)
IT Pro のための PowerShell スクリプティング
Androidで動かすはじめてのDeepLearning
楕円曲線入門 トーラスと楕円曲線のつながり
Atomic Architecture
Css selectors
良いコードとは
ゼロから始めるQ#
AtCoder Beginner Contest 023 解説
MongoDBが遅いときの切り分け方法
ドメイン駆動設計 基本を理解する
オフラインWebアプリケーションのつくりかた
試験にでるSpring
データベース設計徹底指南
SIMDで整数除算
asm.jsとWebAssemblyって実際なんなの?
Ad

Viewers also liked (20)

PDF
悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)
PDF
大規模サイトにおける本当は怖いCSSの話
PPTX
2016年版 フロントエンド開発フォーマット
PDF
ヒューマンリーダブルな CSS 記述法(異次元編):2016年5月13日 CodeGrid 四周年記念パーティー
PDF
メンテナブルでありつづけるためのCSS設計
PDF
CSS の歩き方
PDF
モダンなCSS設計パターンを考える
PDF
Thinking about CSS Architecture
PDF
今必要なCSSアーキテクチャ
PDF
プログラマがデザインをがんばってみた
PDF
Web design
PDF
プログラマがWebデザインについて考えてみた
PDF
ノンデザイナーのためのWebデザイン講座
PDF
Webデザインのトーン&マナーを導き出す手法
PDF
デザインのためのデザイン
PDF
WordCamp Kansai 2015 デザイン初心者向けワークショップ〜 ブログデザインを実際に作ってみよう〜
PDF
ノンデザイナーのための「デザインの判断」はとりあえずコレだけおさえよう
PDF
Webデザインのセオリーを学ぼう
KEY
ノンデザイナーのための配色理論
PPT
色彩センスのいらない配色講座
悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)
大規模サイトにおける本当は怖いCSSの話
2016年版 フロントエンド開発フォーマット
ヒューマンリーダブルな CSS 記述法(異次元編):2016年5月13日 CodeGrid 四周年記念パーティー
メンテナブルでありつづけるためのCSS設計
CSS の歩き方
モダンなCSS設計パターンを考える
Thinking about CSS Architecture
今必要なCSSアーキテクチャ
プログラマがデザインをがんばってみた
Web design
プログラマがWebデザインについて考えてみた
ノンデザイナーのためのWebデザイン講座
Webデザインのトーン&マナーを導き出す手法
デザインのためのデザイン
WordCamp Kansai 2015 デザイン初心者向けワークショップ〜 ブログデザインを実際に作ってみよう〜
ノンデザイナーのための「デザインの判断」はとりあえずコレだけおさえよう
Webデザインのセオリーを学ぼう
ノンデザイナーのための配色理論
色彩センスのいらない配色講座
Ad

Similar to なんでCSSすぐ死んでしまうん (20)

PDF
CSS Design and Programming
PDF
React で CSS カプセル化の可能性を考える
PDF
「html5 boilerplate」から考える、これからのマークアップ
PPTX
Backbone.jsとSASSでモジュールをつくった話
PDF
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
PDF
Firefox OSアプリ 「ModeView」
PPTX
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
PDF
WordBech Osaka No.28
PPTX
HTML5 on ASP.NET
PDF
MTDDC Meetup TOKYO 2015 bit-part
PDF
jQuery Mobile 最新情報 & Tips
PPTX
Magento meet up Tokyo#1 for Design
PPT
アプリコンテスト
PDF
CSS3 Design Recipe
PDF
HTML5 in Firefox4
PDF
LabVIEW NXG Web Module Training Slide
PDF
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PDF
scala+liftで遊ぼう
PDF
LDD'12/Summer in KITAMI Opening Slide
CSS Design and Programming
React で CSS カプセル化の可能性を考える
「html5 boilerplate」から考える、これからのマークアップ
Backbone.jsとSASSでモジュールをつくった話
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
Firefox OSアプリ 「ModeView」
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
WordBech Osaka No.28
HTML5 on ASP.NET
MTDDC Meetup TOKYO 2015 bit-part
jQuery Mobile 最新情報 & Tips
Magento meet up Tokyo#1 for Design
アプリコンテスト
CSS3 Design Recipe
HTML5 in Firefox4
LabVIEW NXG Web Module Training Slide
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
scala+liftで遊ぼう
LDD'12/Summer in KITAMI Opening Slide

More from Hayato Mizuno (10)

PDF
レスポンシブWebデザインでうまくやるための考え方
PDF
"今" 使えるJavaScriptのトレンド
PDF
メンテナブルPSD
PDF
赤い秘密
PDF
フロントエンドの求めるデザイン
PDF
Hello jQuery - 速習jQuery +綺麗なコードを書くためのヒント -
PDF
レンダリングを意識したパフォーマンスチューニング
PDF
jQuery Performance Tips – jQueryにおける高速化 -
PDF
CoffeeScriptってなんぞ?
PDF
ノンプログラマーのためのjQuery入門
レスポンシブWebデザインでうまくやるための考え方
"今" 使えるJavaScriptのトレンド
メンテナブルPSD
赤い秘密
フロントエンドの求めるデザイン
Hello jQuery - 速習jQuery +綺麗なコードを書くためのヒント -
レンダリングを意識したパフォーマンスチューニング
jQuery Performance Tips – jQueryにおける高速化 -
CoffeeScriptってなんぞ?
ノンプログラマーのためのjQuery入門

なんでCSSすぐ死んでしまうん