136
¥ F CsS ThInKiNg ARcHiTeCtUrE FRoNtReNd iN OSaKa Re:cReatEr’S kAnSaI SAtUrDaY, sEpTeMbEr 14 2013 AbOuT

Thinking about CSS Architecture

  • Upload
    -

  • View
    4.999

  • Download
    0

Embed Size (px)

DESCRIPTION

Frontrend in Osaka & Re:Creator's Kansai での講演スライド

Citation preview

Page 1: Thinking about CSS Architecture

¥F CsSThInKiNg

ARcHiTeCtUrEFRoNtReNd iN OSaKaRe:cReatEr’S kAnSaISAtUrDaY, sEpTeMbEr 14 2013

AbOuT

Page 2: Thinking about CSS Architecture

HirOkI taNiCYbEragEnT, inC.

Page 3: Thinking about CSS Architecture

タイトル

@T32K

@AhOmU

@HiLoKi@HiLoKi

Page 4: Thinking about CSS Architecture

)APp

WeB

Page 5: Thinking about CSS Architecture

¤¥

なぜ設計を学ぶべきなのか

ARcHiTeCtUrE

Page 6: Thinking about CSS Architecture

k1BRoWsEr0PsD

Page 7: Thinking about CSS Architecture

q ku

Page 8: Thinking about CSS Architecture

¤¥

Page 9: Thinking about CSS Architecture

.text { color: black;}

.catchcopy { color: red;}

#message .text { color: green;}

Page 10: Thinking about CSS Architecture

10mIn

11l129 3

Page 11: Thinking about CSS Architecture

k11l129 3

6

10mIn 60mIn...aNd MoRe

11l129 3

611l129 3

6111

11l129 3

611l129 3

611l129 3

611l129 3

6

¤¥

Page 12: Thinking about CSS Architecture

k10mIn BUgS...

1 1 1±' lll

l l l

HH

±' lll

l l l

HH

±

' llll l l

HH

11l129 3

6

¤¥

Page 13: Thinking about CSS Architecture

GL?SOmEoNe

Page 14: Thinking about CSS Architecture

GL NG

?YOu

Page 15: Thinking about CSS Architecture

k11129

63

l

30mIn

11129

63

l

30mIn

¤¥

Page 16: Thinking about CSS Architecture

1CsS

Page 17: Thinking about CSS Architecture

1HtMl1CsS1Js

Page 18: Thinking about CSS Architecture

e良いCSS設計のゴールとは

GoAl

Page 19: Thinking about CSS Architecture

®©°

®©°PHiLiP waLtOnCsS arChItEcTuRe

Page 20: Thinking about CSS Architecture

®©°

®©°PHiLiP waLtOnCsS arChItEcTuRe

Page 21: Thinking about CSS Architecture

&PReDiCtAbLe

REuSaBlE

MAiNtAiNaBlE

SCaLaBlE

Page 22: Thinking about CSS Architecture

#content article h1:first-child { ... }

Page 23: Thinking about CSS Architecture

<div id="content"> <article> <h1>Article Title</h1> </article></div>

Page 24: Thinking about CSS Architecture

<div id="content"> <section> <h1>Article Title</h1> </section></div>

Page 25: Thinking about CSS Architecture

<div id="content"> <article> <p>2013/09/13</p> <h1>Article Title</h1> </article></div>

Page 26: Thinking about CSS Architecture

Page 27: Thinking about CSS Architecture

.entry-title { ... }

Page 28: Thinking about CSS Architecture

<div id="content"> <article> <p>2013/09/13</p> <h1 class="entry-title">Article Title</h1> </article></div>

Page 29: Thinking about CSS Architecture

<div id="content"> <div> <p>2013/09/13</p> <h2 class="entry-title">Article Title</h2> </div></div>

Page 30: Thinking about CSS Architecture

POCSSは壊れやすい

CsS Is ToO FrAgIlE

Page 31: Thinking about CSS Architecture

®©°®©°OoCsSbY niCoLe suLlIvAn

Page 32: Thinking about CSS Architecture
Page 33: Thinking about CSS Architecture
Page 34: Thinking about CSS Architecture
Page 35: Thinking about CSS Architecture
Page 36: Thinking about CSS Architecture
Page 37: Thinking about CSS Architecture

SEpArAtE CoNtAiNeR AnD CoNtEnT

SEpArAtE StRuCtUrE AnD SkIn

Page 38: Thinking about CSS Architecture

SEpArAtE CoNtAiNeR AnD CoNtEnT

SEpArAtE StRuCtUrE AnD SkIn

Page 39: Thinking about CSS Architecture

®©°

MEdIa obJeCt

Page 40: Thinking about CSS Architecture

<div class="media"> <div class="media-image"> <img src="/img/seminar/15/tani.jpg"> </div> <div class="media-body"> <p>...</p> <ul> <li><a>...</a></li> </ul> <p>...</p> </div></div>

Page 41: Thinking about CSS Architecture

<div class="media"> <div class="media-image"> <img src="/img/seminar/15/tani.jpg"> </div> <div class="media-body"> <p>...</p> <ul> <li><a>...</a></li> </ul> <p>...</p> </div></div>

Page 42: Thinking about CSS Architecture

<div class="media"> <div class="media-image"> <img src="/img/seminar/15/tani.jpg"> </div> <div class="media-body"> <p>...</p> <ul> <li><a>...</a></li> </ul> <p>...</p> </div></div>

Page 43: Thinking about CSS Architecture

.media { overflow: hidden; // Clearfix *zoom: 1; // Clearfix}.media-image { float: left; margin-right: 10px;}.media-image > img { display: block;}.media-body { overflow: hidden;}

Page 44: Thinking about CSS Architecture

<div class="media skin-a"> <div class="media-image"> <img src="/img/seminar/15/tani.jpg"> </div> <div class="media-body"> <p>...</p> <ul> <li><a>...</a></li> </ul> <p>...</p> </div></div>

Page 45: Thinking about CSS Architecture

<div class="media skin-b"> <div class="media-image"> <img src="/img/seminar/15/tani.jpg"> </div> <div class="media-body"> <p>...</p> <ul> <li><a>...</a></li> </ul> <p>...</p> </div></div>

Page 46: Thinking about CSS Architecture

SEpArAtE CoNtAiNeR AnD CoNtEnT

SEpArAtE StRuCtUrE AnD SkIn

Page 47: Thinking about CSS Architecture

h2 { font-weight: bold; font-size: 16px;}

#news h2 { border-bottom: 1px solid black; padding-bottom: 0.5em;}

Page 48: Thinking about CSS Architecture

h2 { font-weight: bold; font-size: 16px;}

#news h2,#speakers h2 { border-bottom: 1px solid black; padding-bottom: 0.5em;}

Page 49: Thinking about CSS Architecture

<div id="speakers"> <h1>Hiroki Tani</h1> <h2>Session Title</h2> <div> <p>Summary</p> </div></div>

Page 50: Thinking about CSS Architecture

®©°

Page 51: Thinking about CSS Architecture

<div id="speakers"> <h1>Hiroki Tani</h1> <h2>Session Title</h2> <div> <p>...</p> </div> <div> <h2>Books</h2> <ul> <li>...</li> </ul> </div></div>

Page 52: Thinking about CSS Architecture

<div id="speakers"> <h1>Hiroki Tani</h1> <h2>Session Title</h2> <div> <p>...</p> </div> <div> <h2>Books</h2> <ul> <li>...</li> </ul> </div></div>

Page 53: Thinking about CSS Architecture

<div id="speakers"> <h1>Hiroki Tani</h1> <h2>Session Title</h2> <div> <p>...</p> </div> <div> <h2>Books</h2> <ul> <li>...</li> </ul> </div></div>

Page 54: Thinking about CSS Architecture

Page 55: Thinking about CSS Architecture

h2 { font-weight: bold; font-size: 16px;}

.headline { border-bottom: 1px solid black; padding-bottom: 0.5em;}

Page 56: Thinking about CSS Architecture

<div id="speakers"> <h1>Hiroki Tani</h1> <h2 class="headline">Session Title</h2> <div> <p>...</p> </div> <div> <h2>Books</h2> <ul> <li>...</li> </ul> </div></div>

Page 57: Thinking about CSS Architecture

.heading { font-weight: bold; font-size: 16px;}

.headline { border-bottom: 1px solid black; padding-bottom: 0.5em;}

Page 58: Thinking about CSS Architecture

<div id="speakers"> <h1>Hiroki Tani</h1> <h2 class="heading headline">Session Title</h2> <div> <p>...</p> </div> <div> <h2 class="heading">Books</h2> <ul> <li>...</li> </ul> </div></div>

Page 59: Thinking about CSS Architecture

®©°=DoN’t uSe iD!

*

Page 60: Thinking about CSS Architecture

®©°3SHoUlDn'T uSe iD seLeCtOr

o1

1

Page 61: Thinking about CSS Architecture

®©°=.colorRed { color: red;}

*

Page 62: Thinking about CSS Architecture

®©°3o11

.note { color: red;}

Page 63: Thinking about CSS Architecture

®©°3iF YoU NeEd It.

o1

1

Page 64: Thinking about CSS Architecture

®©°

®©°SmAcSsBY joNaThAn snOoK

Page 65: Thinking about CSS Architecture

cAtEgOrIzAtIoN

nAmInG CoNvEnTiOn

dEcOuPlInG CsS FrOm HtMl

Page 66: Thinking about CSS Architecture

cAtEgOrIzAtIoN

BAsE MOdUlE THeMeSTaTeLAyOuT

Page 67: Thinking about CSS Architecture

/* # Base */body, form { margin: 0; padding: 0;}

a { color: #039;}

a:hover { color: #03F; }

Page 68: Thinking about CSS Architecture

/* # Layout */.l-header, l-article, l-footer { width: 960px; margin: auto;}

.l-article { border: solid #CCC; border-width: 1px 0 0;}

.l-grid { margin: 0; padding: 0; list-style-type: none;}

.l-grid > li { display: inline-block; margin: 0 0 10px 10px; }

Page 69: Thinking about CSS Architecture

/* # Layout */#header, #article, #footer { width: 960px; margin: auto;}

.l-article { border: solid #CCC; border-width: 1px 0 0;}

.l-grid { margin: 0; padding: 0; list-style-type: none;}

.l-grid > li { display: inline-block; margin: 0 0 10px 10px; }

Page 70: Thinking about CSS Architecture

/* # Layout */.l-container { width: 960px; margin: auto;}

.l-article { border: solid #CCC; border-width: 1px 0 0;}

.l-grid { margin: 0; padding: 0; list-style-type: none;}

.l-grid > li { display: inline-block; margin: 0 0 10px 10px; }

Page 71: Thinking about CSS Architecture

/* # State */.is-hidden { display: none;}

.is-error { font-weight: bold; color: red;}

.is-tab-active { border-bottom-color: transparent;}

Page 72: Thinking about CSS Architecture

/* # Theme *//* ## Pink Theme CSS */.theme-header { background-image: url("/theme/pink/header.png");}.theme-border { 1px solid pink;}

Page 73: Thinking about CSS Architecture

/* # Module *//* ## Button */.btn { ... }.btn-primary { ... }.btn-small { ... }

/* ## UIlist */.uilist { ... }.uilist-item { ... }.uilist-item-icon { ... }

/* ## Widget */.widget { ... }.widget-title { ... }.widget-body { ... }

Page 74: Thinking about CSS Architecture

<button class="btn btn-primary">Submit</button>

<a href="/help" class="btn btn-small">Help</a>

<button class="btn btn-success btn-large"> Complete!</button>

Page 75: Thinking about CSS Architecture

<div class="widget"> <h2>Title</h2> <p>Text</p></div>

Page 76: Thinking about CSS Architecture

.widget { ... }

.widget p { margin-top: 10px; margin-bottom: 10px;}

Page 77: Thinking about CSS Architecture

<div class="widget"> <h2>Title</h2> <ul> <li>ListItem</li> <li>ListItem</li> <li>ListItem</li> </ul></div>

Page 78: Thinking about CSS Architecture

.widget { ... }

.widget p,

.widget ul { margin-top: 10px; margin-bottom: 10px;}

Page 79: Thinking about CSS Architecture

<div class="widget"> <h2>Title</h2> <ul class="widget-body"> <li>ListItem</li> <li>ListItem</li> <li>ListItem</li> </ul></div>

Page 80: Thinking about CSS Architecture

.widget { ... }

.widget-body { margin-top: 10px; margin-bottom: 10px;}

Page 81: Thinking about CSS Architecture

®©°>

Page 82: Thinking about CSS Architecture

®©°,‘RUlE Of ThReE’

Page 83: Thinking about CSS Architecture

®©°3, 6, 9, 12, 15

,‘RUlE Of ThReE’

Page 84: Thinking about CSS Architecture

®©°3, 6, 9, 12, 15

,‘RUlE Of ThReE’

Page 85: Thinking about CSS Architecture

®©°3, 6, 12, 24, 48

,‘RUlE Of ThReE’

Page 86: Thinking about CSS Architecture

®©°3, 6, 9, 12, 15

,‘RUlE Of ThReE’

Page 87: Thinking about CSS Architecture

®©°,‘RUlE Of ThReE’

3, 6, 9, 12, 15

Page 88: Thinking about CSS Architecture

®©°DOnAlD e, knUtH

時期尚早な最適化は諸悪の根源である。... PrEmAtUrE OpTiMiZaTiOn Is ThE RoOt Of AlL EvIl.

Page 89: Thinking about CSS Architecture

®©°

Page 90: Thinking about CSS Architecture

®©°=NOt SeMaNtIcS!

*

Page 91: Thinking about CSS Architecture

®©°

すべてのセマンティックがコンテンツ派生である必要はない。

... NoT AlL SeMaNtIcS NeEd To Be CoNtEnT-DeRiVeD.

NIcOlAs gaLlAgHeR

Page 92: Thinking about CSS Architecture

<div class="review"> <h1>CSS Architecture</h1> <p class="reviewer">Review: <span>Hiroki Tani</span></p> <time datetime="2013-09-14">2013/09/14</time> <p class="review-summary">CSS Bible!</p> <p class="review-description">...</p> Rating: <span class="rating">4.5</span></div>

Page 93: Thinking about CSS Architecture

<div itemscope itemtype="http://data-vocabulary.org/Review"> <h1 itemprop="itemreviewed">CSS Architecture</h1> <p>Review: <span itemprop="reviewer">Hiroki Tani</span></p> <time itemprop="dtreviewed" datetime="2013-09-14">2013/09/14</time> <p itemprop="summary">CSS Bible!</p> <p itemprop="description">...</p> Rating: <span itemprop="rating">4.5</span></div>

Page 94: Thinking about CSS Architecture

®©°=*ClAsS! ClAsS! ClAsS! ...

Page 95: Thinking about CSS Architecture

®©°3o11

Page 96: Thinking about CSS Architecture

/* Sass(.scss) */%btn { border-radius: 6px; padding: 0.5em 1em; background-color: #CCC;}

.btn-primary { @extend %btn; background-image: linear-gradient(...); color: #FFF;}

Page 97: Thinking about CSS Architecture

/* CSS */.btn-primary { border-radius: 6px; adding: 0.5em 1em; background-color: #CCC; background-image: linear-gradient(...); color: #FFF;}

Page 98: Thinking about CSS Architecture

<button class="btn-primary">Save</button>

Page 99: Thinking about CSS Architecture

/* Sass(.scss) */%btn { border-radius: 6px; padding: 0.5em 1em; background-color: #CCC;}%btn-primary { border-radius: 6px; padding: 0.5em 1em; background-color: #CCC;}%btn-large { font-size: 18px;}

.save { @extend %btn; @extend %btn-primary; @extend %btn-large;}

Page 100: Thinking about CSS Architecture

/* CSS */.save { border-radius: 6px; adding: 0.5em 1em; background-color: #CCC; background-image: linear-gradient(...); color: #FFF; font-size: 18px;}

Page 101: Thinking about CSS Architecture

<button class="save">Submit</button>

Page 102: Thinking about CSS Architecture

.clearfix:after,.btn_type2_A:after,.bnavi ul:after,.box_3col:after,.userData dl:after,.likeTool:after,.likeUser ul:after,.commentUser ul:after,.userData:after,.circleList li a:after,.time_count:after,.paging ul:after,.myData:after,.status:after,.bar:after,.month:after,.month2:after,.about:after,.sort:after,.mainList ul:after,.mainList2 li ul:after,.bnr_2col:after,.likeTool_lp:after,.flow:after,.radio:after,.btn_entry_2col:after,.sort2:after,ul#popup_message:after,.sort3:after,.f_circleList:after,.f_circleList a:after,.mainList3 dl:after,.mainList3 ul:after,.box_2col:after,.frame_desc dl:after { content: ""; display: block; clear: both; height: 0;}

Page 103: Thinking about CSS Architecture

®©°®©°BEmbY yaNdEx

Page 104: Thinking about CSS Architecture

/* # Module *//* ## Button */.btn { ... }.btn-primary { ... }.btn-small { ... }

/* ## Widget */.widget { ... }.widget-title { ... }.widget-body { ... }

Page 105: Thinking about CSS Architecture

v vk.btn .btn-primary

MOdIfIeR

Page 106: Thinking about CSS Architecture

00.widget

.widget-body

SUb-CoMpOnEnT

Page 107: Thinking about CSS Architecture

BLoCk,elEmEnT,moDiFiEr

Page 108: Thinking about CSS Architecture

BlOcK,ElEmEnT,MoDiFiEr

Page 109: Thinking about CSS Architecture
Page 110: Thinking about CSS Architecture
Page 111: Thinking about CSS Architecture
Page 112: Thinking about CSS Architecture
Page 113: Thinking about CSS Architecture

.ranking { ... }

.ranking__thumbnail { ... }

.ranking__item { ... }

.nav-line { ... }

.nav-line__item { ... }

.nav-line_separated { ... }

.nav-line_separated__item { ... }

Page 114: Thinking about CSS Architecture

/* # Module *//* ## Button */.btn { ... }.btn_primary { ... }.btn_small { ... }

/* ## Widget */.widget { ... }.widget__title { ... }.widget__body { ... }

Page 115: Thinking about CSS Architecture

/* # Module *//* ## Button */.btn { ... }.btn--primary { ... }.btn--small { ... }

/* ## Widget */.widget { ... }.widget__title { ... }.widget__body { ... }

Page 116: Thinking about CSS Architecture
Page 117: Thinking about CSS Architecture
Page 118: Thinking about CSS Architecture

®©°=*UUuUgLy!

Page 119: Thinking about CSS Architecture

®©°=o

AgReEeE!

Page 120: Thinking about CSS Architecture

h;

パターンライブラリ/CSSスタイルガイド/テスト

TOoL

Page 121: Thinking about CSS Architecture
Page 122: Thinking about CSS Architecture
Page 123: Thinking about CSS Architecture
Page 124: Thinking about CSS Architecture

®©©°

Page 125: Thinking about CSS Architecture

®©°KsSSTyLeGuIdE geNeRaToR

Page 126: Thinking about CSS Architecture

®©°®©°STyLedoCcOSTyLeGuIdE geNeRaToR

Page 127: Thinking about CSS Architecture

/*A button suitable for giving stars to someone.

:hover - Subtle hover highlight..stars-given - A highlight indicating you've already given a star..stars-given:hover - Subtle hover highlight on top of stars-given styling..disabled - Dims the button to indicate it cannot be used.

Styleguide 2.1.3.*/a.button.star{ ...}a.button.star.stars-given{ ...}a.button.star.disabled{ ...}

Page 128: Thinking about CSS Architecture

COmPoNeNt

&&&&&

Page 129: Thinking about CSS Architecture

COmPoNeNt

&&&&&

WeB

Page 130: Thinking about CSS Architecture
Page 131: Thinking about CSS Architecture
Page 132: Thinking about CSS Architecture

¤+BeSt pRaCtIcE

Page 133: Thinking about CSS Architecture

¤+BeSt pRaCtIcES

Page 134: Thinking about CSS Architecture

®©°

どんなに多くの人が貢献したとしても、

どのコードも一人で書いたようにする。

ALl CoDe In AnY CoDe-BaSe ShOuLd LoOk LiKe A SiNgLe PeRsOn tYpEd It, EvEn WhEn MaNy PeOpLe ArE CoNtRiBuTiNg To It.

NIcOlAs gaLlAgHeR

Page 135: Thinking about CSS Architecture

THaNkS@HiLoKi

iNkDeSiGn.Jp

¥C