92
Architecture for CSS 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計

悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Embed Size (px)

DESCRIPTION

CSS設計に関わるあれこれ。 基本〜実践的な内容です。 OOCSS, BEM, SMACSSとかも出てきます。

Citation preview

Page 1: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Architecture for CSS

悩まないコーディングをしよう!  

 OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計

Page 2: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ホリグチ セイト

自己紹介

Front-End-Engineer

趣味Lang-8(先週から)、漫画(いろいろ)、 宇宙とかSFとか

担当している業務html,css,jsを用いいた中規模メディアサイト, Webアプリケーションの開発

2001

!2014 2014

経歴初めてWebサイトを作る。当時最もモダンな「メモ帳」なるエディターを使い、 また「おえかき掲示板」「キリ番システム」などのリッチコンテンツを提供した。 デザイナーからフロントエンドエンジニアに転身。 カルタ大会やハッカソンなど、業務外の事で活躍し始める。

Page 3: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

はじめに

アジェンダ

CSS設計の3大メソッドOOCSS BEM SMACSS

設計で必要な3つのこと設計指針 ディレクトリ構成 スタイルガイド

業務で実践してみてわかった7つのこと

まとめ

Page 4: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

~はじめに~

CSS設計って何それ美味しいの?

Page 5: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

CSS設計とは

※引用1 『SMACSS: Scalable and Modular Architecture for CSS』

!CSSをより体系立て、より構造化させることで、 制作とメンテナンスをより容易に行うこと

Page 6: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

CSSに強い拡張性、保守性、明瞭性を持たせることが大事と、言われています

Page 7: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

というわけで、今回僕がお話しさせていただくことは3つです

Page 8: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

たくさん知ろう

いいとこだけ取ろう

自分なりの設計をしてみよう

Page 9: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

CSS設計の3大メソッド

Page 10: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

OOCSS

BEM

SMACSS

Page 11: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

OOCSS

Page 12: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

オブジェクト指向に基づいて考案された設計手法。

米Yahoo!のNicole Sullivan氏によって考案された。

! OOCSSで設計されている代表的なサイト

!!

OOCSSとは

Page 13: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

大きな特徴は以下の2つ

要素をContainerとContentsに切り離して考える

要素をStructureとSkinに切り離して考える

Page 14: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

要素をContainerとContentsに切り離して考える

Page 15: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

要素をContainerとContentsに切り離して考える

Container

Page 16: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

要素をContainerとContentsに切り離して考える

.registration

Page 17: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

要素をContainerとContentsに切り離して考える

Contents

Page 18: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

要素をContainerとContentsに切り離して考える

.text

.input

.heading

.btn

Page 19: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

要素をContainerとContentsに切り離して考える

Page 20: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

要素をContainerとContentsに切り離して考える

Page 21: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

要素をContainerとContentsに切り離して考える

.registration > button{ … } というような、依存したスタイルの充て方ではなく、

.btn{ … }というように独立させてスタイルを充てると、色々なところで使い回せる

Page 22: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ストラクチャーとスキンを切り離そう

skin

(color)

structure

(display,text-align,…etc)(width,height)

Page 23: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

structure skin

Page 24: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

   .btn{              display:  inline-­‐block;              border-­‐radius:  5px;                text-­‐align:  center;      }

   .btn-­‐green{              background:  green;      }      .btn-­‐black{              background:  black;      }      .btn-­‐pink{              background:  pink;        }      .btn-­‐blue{              background:  blue;        }

structure skin

Page 25: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

   .btn{              display:  inline-­‐block;              border-­‐radius:  5px;                text-­‐align:  center;      }

   .btn-­‐large{              width:  300px;              height:  50px;      }      .btn-­‐medium{              width:  200px;              height:  40px;      }      .btn-­‐small{              width:  100px;              height:  30px;      }

structure skin

Page 26: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

structure skin+

=<button  class="btn  btn-­‐pink  btn-­‐medium">button</button>

Page 27: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

structure skin+

=<button  class="btn  btn-­‐black  btn-­‐large">button</button>

Page 28: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

structure skin+

=<button  class="btn  btn-­‐green  btn-­‐small">button</button>

Page 29: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

BEM

Page 30: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

html構造を明確にすることに軸を置いた設計方法。厳格な命名規則が特徴。

ロシアのYandex社によって考案された。

! BEMで設計されている代表的なサイト

!!

BEMとは

Page 31: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

大きな特徴は以下の2つ

要素を Block, Element, Modifierの3つに分ける

.Block__Element_Modifierという命名ルールを用いる

Page 32: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Block, Element, Modifier

Page 33: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Block, Element, Modifier

Block

Page 34: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Block, Element, Modifier

.registration

Page 35: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Block, Element, Modifier

Element

Page 36: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Block, Element, Modifier

.registraion__text

.registraion__input

.registraion__heading

.registraion__btn

Page 37: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Block, Element, Modifier

Modifier

Page 38: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Block, Element, Modifier

.registraion__btn_color_bule

Page 39: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

BEMのエッセンスをとり入れつつ、命名ルールは

自分たちでカスタマイズするのもあり

MindBEMding

CSS Wizardly Harry Roberts氏 http://csswizardry.com/2013/01/mindbemding-getting-your-head -round-bem-syntax/

Page 40: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

SMACSS

Page 41: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

OOCSS,BEMの流れを汲みつつ、著者の経験や理論も交えてドキュメントに落とし

込まれたスタイルガイド(コーディングルール)。

Jonathan Snook氏によって考案された。

SMACSSとは

Page 42: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

大きな特徴

要素をBase,Layout,Module,State,Theme

の5つに分ける

Page 43: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Base

Layout

Module

State

Theme

Page 44: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Base

Layout

Module

State

Theme

!

reset.css helper.css …etc

Page 45: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Base

Layout

Module

State

Theme

Page 46: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Base

Layout

Module

State

Theme

Page 47: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Base

Layout

Module

State

Theme

.tab .is-current

Page 48: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

Base

Layout

Module

State

Theme

Page 49: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

その他にもいろいろ

マルチクラス推奨ざっくりした命名規則Sassでの実装方法

などなど

Page 50: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

設計で必要な3つのこと

Page 51: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ディレクトリ構成

スタイルガイド

設計指針

Page 52: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

設計指針

Page 53: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

設計指針

コーディングを行う際に守るべき約束事。

方針。

コーディング中に迷いが生じたら、これを

元に判断・解決する

Page 54: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

HTMLとコンテントのセマンティックな価値を向上すること

特定のHTML構造への依存を低減すること

設計指針 例

SMACSSの場合

※引用1 『SMACSS: Scalable and Modular Architecture for CSS 日本語』

Page 55: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

絶対にCSSを増やしたくない

class名で悩みたくない

設計指針 例

KOJI ISHIMOTO氏の場合

※引用2 KOJI ISHIMOTO『ぼくのかんがえたさいきょうのしーえしゅえしゅ』

完璧じゃなくてもいい

石本 光司 @t32k Front-end-engineer サイバーエージェント所属 JS Girl ファウンダー

Page 56: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ディレクトリ構成

Page 57: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ディレクトリ構成例(SMACSSベース)

scss js imagehtml

Page 58: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ディレクトリ構成例(SMACSSベース)

scss js imagehtml

Page 59: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

normlize.scss  helper.scss

header.scss  footer.scss  main.scss  side.scss

button.scss  heading.scss  table.scss  form.scss                            …etcmixin.scss  

setting.scss  common.scss

ディレクトリ構成例(SMACSSベース)

scss

base

layout

module

Page 60: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

mixin.scss  setting.scss  common.scss

ディレクトリ構成例(SMACSSベース)

scss

normlize.scss  helper.scss

header.scss  footer.scss  main.scss  side.scss

button.scss  heading.scss  table.scss  form.scss                            …etc

base

layout

module

Page 61: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ディレクトリ構成例(SMACSSベース)

common.scss

@importして1つのCSSに

@import "normlize.scss"; @import “helper.scss”; !@import "header.scss"; @import "footer.scss"; @import "main.scss"; @import "side.scss"; !@import "button.scss"; @import "heading.scss"; @import "table.scss"; @import "form.scss";

Page 62: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ディレクトリ構成 まとめ

カテゴライズして分けておくと管理しやすい

SMACSSなどのスタイルガイドを参考にしよう

(他にこんなのもあります)

Page 63: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

スタイルガイド

Page 64: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

スタイルガイド

モジュールの一覧表。コンポーネント一覧と

呼ばれることもしばしば。

コーディングルールやカラーコードを載せる

 となお良い。

Page 65: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

※引用3 Twitter『 Bootstrap』

Page 66: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

スタイルガイド 作り方

htmlとcssでべた書きで作る

ジェネレーター使う

Page 67: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

スタイルガイド 参考になるもの

CSS フレームワーク

コーディングルール

Page 68: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

スタイルガイド まとめ

コンポーネントの一覧があると保守しやすく、 コミュニケーションコストを減らせる

ジェネレーターを使おう

Page 69: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

業務で実践してみてわかった

7つのこと

Page 70: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

設計がオリジナルすぎると残業増える

Page 71: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

設計がオリジナルすぎると残業増える

既存の手法を取り入れつつ、厳しすぎないルールを設ける

設計者&作業者のコミュニケーションコストが増える

S

命名ルールってこの場合はどうなるの?

このデータはどこに入れるべき?

これはElement ? それともBlockかな?

oh…

Page 72: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ベストプラクティスなんてない!

Page 73: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ベストプラクティスなんてない!

時と場合による

S

メンバー 案件の内容 期限

Page 74: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ベストプラクティスなんてない!S

メンバー 案件の内容 期限

自分なりの設計をしてみよう

Page 75: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

言葉の意味はしっかり定義しとく

Page 76: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

言葉の意味はしっかり定義しとく

ContainerとContentとか、 BlockとElementtとか、 Moduleとか…言い方多すぎ?

Layoutってどこの部分?

S

Page 77: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

BEMは案外めんどくない

Page 78: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

BEMは案外めんどくないS

Dashのスニペット機能が超絶楽

PhpStormの補完機能は強力

.block{ &__element{ background: black; } }

.block__element{ background: black; }

Sass 3.3̃の使うと省略できる

Page 79: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

OOCSSとBEMは混ぜるとちょい危険

Page 80: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

OOCSSとBEMは混ぜるとちょい危険S

OOCSS

マルチクラス向きシングルクラス向き

.registration__btn_color_pink .btn .btn_pink .btn_small

Page 81: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

OOCSSとBEMは混ぜるとちょい危険S

OOCSS

.Block__Element._modifier

.registraion__btn._color_pink

Page 82: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

セマンティックに

こだわりすぎるのもよくない

Page 83: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

セマンティックにこだわりすぎるのもよくないS

.btn-blue

.btn-pink

.btn-green

.btn-default

.btn-primary

.btn-success

.btn-a

.btn-b

.btn-c

予測しやすい 予測しづらい

変更しづらい 変更しやすい

Page 84: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

オブジェクト指向を勉強すると

OOCSSが楽しくなる

Page 85: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

オブジェクト指向を勉強するとOOCSSが楽しくなる

複合オブジェクト など

スーパークラスとサブクラス

S

ITmedia エンタープライズ『5分で絶対に分かるオブジェクト指向』 URL : http://www.itmedia.co.jp/im/articles/0703/06/news125.html

オススメ

Page 86: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

まとめ

Page 87: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

たくさん知ろう

いいとこだけ取ろう

自分なりの設計をしてみよう

Page 88: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

OOCSS

たくさん知ろうS

Page 89: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

OOCSS

いいとこだけ取ろうS

Page 90: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

OOCSS

自分なりの設計をしてみようS

自分や周りの環境に合わせて、最適な設計をしよう

Page 91: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

参考文献S

※引用1 Jonathan Snook,斉藤祐也『SMACSS: Scalable and Modular Architecture for CSS』 https://smacss.com/ja

※引用3 Twitter『 Bootstrap』 http://getbootstrap.com/

※引用2 KOJI ISHIMOTO『MOL - Designing for a Mobile World!』 http://t32k.me/mol/log/the-perfect-css-i-thought/

株式会社ピクセルグリッド『Code Grid』 https://app.codegrid.net/

Harry Roberts『CSS Wizardly』 http://csswizardry.com/

谷 拓樹『Web制作者のためのCSS設計の教科書 モダンWeb開発に欠かせない「修正しやすいCSS」 の設計手法』 http://www.impressjapan.jp/books/1113101128

Page 92: 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)

ご清聴ありがとうございました!