107
事例: パフォーマンスから考える Sass/Compass 導入・運用 アメーバ事業本部 コミュニティ部門 第3コミュニティ事業部 Webディベロッパー 石本 光司 2013.01.12 @CSS Nite LP, Disk 26「CSS Preprocessor Shootout」

パフォーマンスから考えるSass/Compassの導入・運用

  • Upload
    t32k

  • View
    9.662

  • Download
    13

Embed Size (px)

DESCRIPTION

2013年1月12日(土) 、ベルサール半蔵門で開催したCSS Nite LP, Disk 26「CSS Preprocessor Shootout」のフォローアップとして、石本 光司さん(サイバーエージェント) の『パフォーマンスから考えるSass/Compassの導入・運用』のスライドなどを公開します。 http://cssnite.jp/archives/post_2498.html

Citation preview

Page 1: パフォーマンスから考えるSass/Compassの導入・運用

事例:

パフォーマンスから考えるSass/Compass 導入・運用

アメーバ事業本部 コミュニティ部門 第3コミュニティ事業部 Webディベロッパー 石本 光司2013.01.12 @CSS Nite LP, Disk 26「CSS Preprocessor Shootout」

Page 3: パフォーマンスから考えるSass/Compassの導入・運用

デザインから考えるハイパフォーマンスWebサイト

Webパフォーマンス最適化のためのコーディング手法 心理学から考えるWebパフォーマンス

Page 5: パフォーマンスから考えるSass/Compassの導入・運用

今日のながれ- 私のバックグラウンド

- Sass/Compassの導入・運用- 序:Syntax/@import- 破:Nesting/@mixin/@extend- 急:Compass/Styleguide

- 成果とまとめ

Page 6: パフォーマンスから考えるSass/Compassの導入・運用

私のバックグラウンド

Page 7: パフォーマンスから考えるSass/Compassの導入・運用

2012.06.01

Page 8: パフォーマンスから考えるSass/Compassの導入・運用

2012.06.01

Page 9: パフォーマンスから考えるSass/Compassの導入・運用

Eコマース

大規模

レガシー

PCサイト

Page 10: パフォーマンスから考えるSass/Compassの導入・運用

Web Director?

大規模サイトにおけるGoogleアナリティクス導入から成果まで ¦ CSS Nite LP, Disk 19

Page 11: パフォーマンスから考えるSass/Compassの導入・運用

アクセス解析あきたわー (・ 石・)Koji Ishimoto @t32k 9, April, 2012

Page 12: パフォーマンスから考えるSass/Compassの導入・運用

コミュニティ・ゲーム

小・中規模

エッジ

スマホアプリ

Page 13: パフォーマンスから考えるSass/Compassの導入・運用

Web Developer!

Measuring⦆Web Perf.⦆-⦆自己満足で終わらないためのパフォーマンス計測⦆- ¦ CSS Nite LP, Disk 23

Page 14: パフォーマンスから考えるSass/Compassの導入・運用

俺いちからやり直すわー (・ 石・)Koji Ishimoto @t32k 1, June, 2012

Page 15: パフォーマンスから考えるSass/Compassの導入・運用

Start a web develop

Page 16: パフォーマンスから考えるSass/Compassの導入・運用

Sass/Compassの導入・運用

Page 17: パフォーマンスから考えるSass/Compassの導入・運用
Page 18: パフォーマンスから考えるSass/Compassの導入・運用

2012.06.04Assign

2012.08.09Release!

2012.06.01Join

Page 19: パフォーマンスから考えるSass/Compassの導入・運用

2012.06.04Assign

2012.08.09Release!

2ヶ月2012.06.01

Join

Page 20: パフォーマンスから考えるSass/Compassの導入・運用

それなんて無理ゲーよ (・ 石・)?Koji Ishimoto @t32k 4, June, 2012

Page 21: パフォーマンスから考えるSass/Compassの導入・運用

UI Designer

JavaScript

HTML/CSS

Producer

iOS/AndroidEngineer

System Engineer

System Engineer

System Engineer

Page 22: パフォーマンスから考えるSass/Compassの導入・運用

Speed!

Page 23: パフォーマンスから考えるSass/Compassの導入・運用

Page Speed

Development Speed

Page 24: パフォーマンスから考えるSass/Compassの導入・運用

(((( ;゚ д )゚)))アワワワワ

Page 28: パフォーマンスから考えるSass/Compassの導入・運用

�introduction

Page 29: パフォーマンスから考えるSass/Compassの導入・運用

$ gem install sass

Page 30: パフォーマンスから考えるSass/Compassの導入・運用

Syntax

Page 31: パフォーマンスから考えるSass/Compassの導入・運用

.scss Sassy CSS

.sass Indented Syntax

Page 32: パフォーマンスから考えるSass/Compassの導入・運用

.scss.sass

=table-base th text-align: center font-weight: bold td, th padding: 2px

=left($dist) float: left margin-left: $dist

#data +left(10px) +table-base

@mixin table-base { th { text-align: center; font-weight: bold; } td, th {padding: 2px}}

@mixin left($dist) { float: left; margin-left: $dist;}

#data { @include left(10px); @include table-base;}

Page 33: パフォーマンスから考えるSass/Compassの導入・運用

output.css

#data { float: left; margin-left: 10px;}#data th { text-align: center; font-weight: bold;}#data td, #data th { padding: 2px;}

Page 34: パフォーマンスから考えるSass/Compassの導入・運用

.scss.sass

=table-base th text-align: center font-weight: bold td, th padding: 2px

=left($dist) float: left margin-left: $dist

#data +left(10px) +table-base

@mixin table-base { th { text-align: center; font-weight: bold; } td, th {padding: 2px}}

@mixin left($dist) { float: left; margin-left: $dist;}

#data { @include left(10px); @include table-base;}

Page 35: パフォーマンスから考えるSass/Compassの導入・運用
Page 36: パフォーマンスから考えるSass/Compassの導入・運用
Page 37: パフォーマンスから考えるSass/Compassの導入・運用

LoveSassyCSS

Page 38: パフォーマンスから考えるSass/Compassの導入・運用

@import

Page 40: パフォーマンスから考えるSass/Compassの導入・運用

box-modal.css header.css

list.cssmypage.cssnav_global.css nav_category.css

jser.css

Page 41: パフォーマンスから考えるSass/Compassの導入・運用

box-modal.css header.css

list.cssmypage.cssnav_global.css nav_category.css

jser.css

app.cssCompiled!

Page 42: パフォーマンスから考えるSass/Compassの導入・運用

app.scss

@import "compass";@include global-reset;@import "_config";@import "_common";@import "_header";@import "_nav-global";@import "_nav-category";@import "_list";@import "_list-nest";@import "_box-modal";@import "_entrance";@import "_mypage";@import "_enquete";@import "_advice";@import "_katoken";

Page 43: パフォーマンスから考えるSass/Compassの導入・運用

app.scss

@import "compass";@include global-reset;@import "_config";@import "_common";@import "_header";@import "_nav-global";@import "_nav-category";@import "_list";@import "_list-nest";@import "_box-modal";@import "_entrance";@import "_mypage";@import "_enquete";@import "_advice";@import "_katoken";

app.css

Page 44: パフォーマンスから考えるSass/Compassの導入・運用

�development

Page 45: パフォーマンスから考えるSass/Compassの導入・運用

Sass is powerful and dangerous.

Jon Rohan @johnrohan 05, December, 2012

Page 46: パフォーマンスから考えるSass/Compassの導入・運用

Nesting

Page 47: パフォーマンスから考えるSass/Compassの導入・運用

.css.scss

.component-A { .head { color: #fff; } .body { color: #ccc; } .foot { color: #000; }}

.component-B { .head { color: #000; } .body { color: #fff; } .foot { color: #ccc; }}

.component-A .head { color: #fff;}.component-A .body { color: #ccc;}.component-A .foot { color: #000;}

.component-B .head { color: #000;}.component-B .body { color: #fff;}.component-B .foot { color: #ccc;}

Page 49: パフォーマンスから考えるSass/Compassの導入・運用
Page 50: パフォーマンスから考えるSass/Compassの導入・運用

/(^o^)\

Page 51: パフォーマンスから考えるSass/Compassの導入・運用

Sass を使おうが LESS を使おうが、カジュアルにセレクタを増やしてはいけない。セレクタは詩である。

Kokubo Kotarao @kotarok 25, February, 2012

Page 52: パフォーマンスから考えるSass/Compassの導入・運用

Don’t go more than four levels deep.

Page 53: パフォーマンスから考えるSass/Compassの導入・運用

@mixin/@extend

Page 54: パフォーマンスから考えるSass/Compassの導入・運用

mixin.cssmixin.scss

@mixin boxshadow {-webkit-box-shadow: 0 1px 0 0 #fff;box-shadow: 0 1px 0 0 #fff;}

.mixinA { @include boxshadow;}.mixinB { @include boxshadow;}.mixinC { @include boxshadow;}

.mixinA {-webkit-box-shadow: 0 1px 0 0 #fff;box-shadow: 0 1px 0 0 #fff;}.mixinB {-webkit-box-shadow: 0 1px 0 0 #fff;box-shadow: 0 1px 0 0 #fff;}.mixinC {-webkit-box-shadow: 0 1px 0 0 #fff;box-shadow: 0 1px 0 0 #fff;}

Page 55: パフォーマンスから考えるSass/Compassの導入・運用

extend.cssextend.scss

.boxshadow {-webkit-box-shadow: 0 1px 0 0 #fff;box-shadow: 0 1px 0 0 #fff;}

.extendA { @extend .boxshadow;}.extendB { @extend .boxshadow;}.extendC { @extend .boxshadow;}

.boxshadow, .extendA,

.extendB, .extendC {-webkit-box-shadow: 0 1px 0 0 #fff;box-shadow: 0 1px 0 0 #fff;}

Page 56: パフォーマンスから考えるSass/Compassの導入・運用

mixin2.cssmixin2.scss

@mixin boxshadow($color:#fff) {-webkit-box-shadow: 0 1px 0 0 $color;box-shadow: 0 1px 0 0 $color;}

.mixinA { @include boxshadow;}.mixinB { @include boxshadow(#ccc);}.mixinC { @include boxshadow(#000);}

.mixinA {-webkit-box-shadow: 0 1px 0 0 #fff;box-shadow: 0 1px 0 0 #fff;}

.mixinB {-webkit-box-shadow: 0 1px 0 0 #ccc;box-shadow: 0 1px 0 0 #ccc;}

.mixinC {-webkit-box-shadow: 0 1px 0 0 #000;box-shadow: 0 1px 0 0 #000;}

Page 57: パフォーマンスから考えるSass/Compassの導入・運用

extend2.cssextend2.scss

%boxshadow {-webkit-box-shadow: 0 1px 0 0 #fff;box-shadow: 0 1px 0 0 #fff;}

.extendA { @extend %boxshadow;}.extendB { @extend %boxshadow;}.extendC { @extend %boxshadow;}

.extendA, .extendB, .extendC {-webkit-box-shadow: 0 1px 0 0 #fff;box-shadow: 0 1px 0 0 #fff;}

Page 58: パフォーマンスから考えるSass/Compassの導入・運用

@extendエクステンドかわいいよエクステンド(́ Д`;)(;́ Д )`ハァハァ

Page 59: パフォーマンスから考えるSass/Compassの導入・運用
Page 60: パフォーマンスから考えるSass/Compassの導入・運用
Page 61: パフォーマンスから考えるSass/Compassの導入・運用
Page 62: パフォーマンスから考えるSass/Compassの導入・運用

// Pseudo element initialization%_pe { display: block; content: "";}.back-page a { display: block; position: relative; padding: 10px 10px 10px 25px; &:after { @extend %_pe; position: absolute; width: 7px; height: 10px; top: 13px; right: 11px; background: ( .............. ); }}

ex1.scss

Page 63: パフォーマンスから考えるSass/Compassの導入・運用

.ad-area:after, .detail .comment:after, .comment .expand:before, .comment .child:before, .comment .child:after, .thread-notify:before, .line:before, .box-rel .thread:after, .box-rel .right a:after, .cate-new .list-view > li:after, .cate-new .list-view > li > a:after, .cate-new .list-view .c-new > a:after, .cate-new .list-child li:before, .cate-new .list-child a:after, .cate-new .thread:after, .cate-new .thread.new:before, .cate-new.archive .line-text:after, .list-nested .child li:after, .posted-talk .headline:before, .posted-talk li:before, .posted-talk .right a:after, .profile .activity a:after, .wall .wrapper-child:before, .enquete .list-opt input:checked ~ label:after, .enquete .list-opt label.active:after, .enquete .list-qa .talk:after, .enquete .right a:after, .enquete .box-pager .btn:after { display: block; content: "";}

output.css

Page 64: パフォーマンスから考えるSass/Compassの導入・運用

/(^o^)\

Page 65: パフォーマンスから考えるSass/Compassの導入・運用

.has-fake { position: relative;}.has-fake:after { position: absolute; display: inline-block; content: "";}

<div class="back-page"> <a href="#" class="has-fake">トークへ戻る</a></div>

ex2.html

ex2.css

Page 66: パフォーマンスから考えるSass/Compassの導入・運用

However, not all semantics need to be content-derived.

Nicolas Gallagher @necolas 02, August, 2012

Page 67: パフォーマンスから考えるSass/Compassの導入・運用

�climax

Page 68: パフォーマンスから考えるSass/Compassの導入・運用

Compass

Page 70: パフォーマンスから考えるSass/Compassの導入・運用

$ gem install compass

Page 71: パフォーマンスから考えるSass/Compassの導入・運用

CSS Sprite

Page 72: パフォーマンスから考えるSass/Compassの導入・運用

CSS Sprite

Page 73: パフォーマンスから考えるSass/Compassの導入・運用

CSS Sprite

Page 74: パフォーマンスから考えるSass/Compassの導入・運用

ico_category.png

Page 75: パフォーマンスから考えるSass/Compassの導入・運用

ico_category_v2.png

Page 76: パフォーマンスから考えるSass/Compassの導入・運用

ico_category_v3.png

Page 77: パフォーマンスから考えるSass/Compassの導入・運用

ico_category_v4.png

Page 78: パフォーマンスから考えるSass/Compassの導入・運用

ico_category_v5.png

Page 79: パフォーマンスから考えるSass/Compassの導入・運用

ico_category_v6.png

Page 80: パフォーマンスから考えるSass/Compassの導入・運用

/(^o^)\

Page 81: パフォーマンスから考えるSass/Compassの導入・運用

CSS Sprite Compass

Page 82: パフォーマンスから考えるSass/Compassの導入・運用

Generate Image

Generate Code (Calculate background-position)

Page 83: パフォーマンスから考えるSass/Compassの導入・運用

// Define Spriting Mixin@mixin sprites($map, $map-item, $isCommon:false) { @if $isCommon { background-image: sprite-url($map); background-size: round(image-width(sprite-path($map)) / 2) round(image-height(sprite-path($map)) / 2); background-repeat: no-repeat; } @else { $pos-y: round(nth(sprite-position($map, $map-item), 2) / 2); width: round(image-width(sprite-file($map, $map-item)) / 2); height: round(image-height(sprite-file($map, $map-item)) / 2); background-position: 0 $pos-y; }}

Page 84: パフォーマンスから考えるSass/Compassの導入・運用

// Define Map Variable$map-tabs: sprite-map("/files/img/sprites/tabs/*.png");

%tabs { @include sprites($map-tabs, common, true); }

.nav-global { i { @extend %tabs; display: block; } .tab-new i { @include sprites($map-tabs, new, false); } .tab-fav i { @include sprites($map-tabs, fav, false); } .tab-hist i { @include sprites($map-tabs, hist, false); } .tab-mypage i { @include sprites($map-tabs, my, false); } }}

Page 85: パフォーマンスから考えるSass/Compassの導入・運用
Page 86: パフォーマンスから考えるSass/Compassの導入・運用
Page 87: パフォーマンスから考えるSass/Compassの導入・運用

categories-s99406a96f7.png

/files/img/sprites/categories/*.png

Page 88: パフォーマンスから考えるSass/Compassの導入・運用

Styleguide

Page 89: パフォーマンスから考えるSass/Compassの導入・運用

Not “Create Page” ,But “Create System”.

Jina Bolton @jina 02, August, 2012

Page 92: パフォーマンスから考えるSass/Compassの導入・運用

$ npm install -fg styledocco

Page 93: パフォーマンスから考えるSass/Compassの導入・運用
Page 94: パフォーマンスから考えるSass/Compassの導入・運用

成果とまとめ

Page 95: パフォーマンスから考えるSass/Compassの導入・運用

Released!2012.08.09

Page 96: パフォーマンスから考えるSass/Compassの導入・運用

ガールズトークの改善が早くて感心藤田晋 @susumu_fujita 19, August, 2012

Page 97: パフォーマンスから考えるSass/Compassの導入・運用

0

2,000,000

4,000,000

6,000,000

8,000,000

10,000,000

1week

2week

3week

4week

5week

6week

7week

8week

9week

10week

11week

12week

13week

14week

15week

16week

GIRL’S TALK Weekly PageviewsP

V

Page 98: パフォーマンスから考えるSass/Compassの導入・運用

0

2,000,000

4,000,000

6,000,000

8,000,000

10,000,000

1week

2week

3week

4week

5week

6week

7week

8week

9week

10week

11week

12week

13week

14week

15week

16week

GIRL’S TALK Weekly PageviewsP

V 4000万PV

Page 99: パフォーマンスから考えるSass/Compassの導入・運用

俺やったったわー (・ 石・)Koji Ishimoto @t32k 12, January, 2013

Page 100: パフォーマンスから考えるSass/Compassの導入・運用

Baby Steps

Page 102: パフォーマンスから考えるSass/Compassの導入・運用

I think CSS is awesome!But it could be even better.

Nicole Sullivan @stubbornella 09, November, 2009

Page 103: パフォーマンスから考えるSass/Compassの導入・運用

Try & Error

Page 104: パフォーマンスから考えるSass/Compassの導入・運用

Sass doesn't create bad code. Bad coders do.

Roy Tomeji @roy 02, February, 2012

Page 106: パフォーマンスから考えるSass/Compassの導入・運用

ちゃんとCSSを書け!Yuya Saito @cssradar 15, October, 2012