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

Preview:

DESCRIPTION

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

Citation preview

Architecture for CSS

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

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

ホリグチ セイト

自己紹介

Front-End-Engineer

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

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

2001

!2014 2014

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

はじめに

アジェンダ

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

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

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

まとめ

~はじめに~

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

CSS設計とは

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

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

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

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

たくさん知ろう

いいとこだけ取ろう

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

CSS設計の3大メソッド

OOCSS

BEM

SMACSS

OOCSS

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

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

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

!!

OOCSSとは

大きな特徴は以下の2つ

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

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

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

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

Container

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

.registration

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

Contents

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

.text

.input

.heading

.btn

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

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

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

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

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

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

skin

(color)

structure

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

structure skin

   .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

   .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

structure skin+

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

structure skin+

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

structure skin+

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

BEM

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

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

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

!!

BEMとは

大きな特徴は以下の2つ

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

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

Block, Element, Modifier

Block, Element, Modifier

Block

Block, Element, Modifier

.registration

Block, Element, Modifier

Element

Block, Element, Modifier

.registraion__text

.registraion__input

.registraion__heading

.registraion__btn

Block, Element, Modifier

Modifier

Block, Element, Modifier

.registraion__btn_color_bule

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

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

MindBEMding

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

SMACSS

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

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

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

SMACSSとは

大きな特徴

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

の5つに分ける

Base

Layout

Module

State

Theme

Base

Layout

Module

State

Theme

!

reset.css helper.css …etc

Base

Layout

Module

State

Theme

Base

Layout

Module

State

Theme

Base

Layout

Module

State

Theme

.tab .is-current

Base

Layout

Module

State

Theme

その他にもいろいろ

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

などなど

設計で必要な3つのこと

ディレクトリ構成

スタイルガイド

設計指針

設計指針

設計指針

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

方針。

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

元に判断・解決する

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

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

設計指針 例

SMACSSの場合

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

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

class名で悩みたくない

設計指針 例

KOJI ISHIMOTO氏の場合

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

完璧じゃなくてもいい

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

ディレクトリ構成

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

scss js imagehtml

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

scss js imagehtml

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

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

ディレクトリ構成例(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";

ディレクトリ構成 まとめ

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

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

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

スタイルガイド

スタイルガイド

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

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

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

 となお良い。

※引用3 Twitter『 Bootstrap』

スタイルガイド 作り方

htmlとcssでべた書きで作る

ジェネレーター使う

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

CSS フレームワーク

コーディングルール

スタイルガイド まとめ

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

ジェネレーターを使おう

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

7つのこと

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

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

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

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

S

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

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

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

oh…

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

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

時と場合による

S

メンバー 案件の内容 期限

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

メンバー 案件の内容 期限

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

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

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

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

Layoutってどこの部分?

S

BEMは案外めんどくない

BEMは案外めんどくないS

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

PhpStormの補完機能は強力

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

.block__element{ background: black; }

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

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

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

OOCSS

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

.registration__btn_color_pink .btn .btn_pink .btn_small

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

OOCSS

.Block__Element._modifier

.registraion__btn._color_pink

セマンティックに

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

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

.btn-blue

.btn-pink

.btn-green

.btn-default

.btn-primary

.btn-success

.btn-a

.btn-b

.btn-c

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

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

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

OOCSSが楽しくなる

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

複合オブジェクト など

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

S

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

オススメ

まとめ

たくさん知ろう

いいとこだけ取ろう

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

OOCSS

たくさん知ろうS

OOCSS

いいとこだけ取ろうS

OOCSS

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

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

参考文献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

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

Recommended