Master architecture for_css
Upcoming SlideShare
Loading in...5
×
 

Master architecture for_css

on

  • 176 views

CSS設計に関わる

CSS設計に関わる

Statistics

Views

Total Views
176
Views on SlideShare
172
Embed Views
4

Actions

Likes
2
Downloads
0
Comments
0

1 Embed 4

https://twitter.com 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Master architecture for_css Master architecture for_css Presentation Transcript

  • Architecture for CSS 悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計
  • ホリグチ セイト 自己紹介 Front-End-Engineer 担当している業務 html,css,jsを用いいた中規模メディアサイト, Webアプリケーションの開発 趣味 Lang-8(先週から)、漫画(いろいろ)、 宇宙とかSFとか 経歴 2001 ! 2014 2014 初めてWebサイトを作る。当時最もモダンな「メモ帳」なるエディターを使い、 また「おえかき掲示板」「キリ番システム」などのリッチコンテンツを提供した。 デザイナーからフロントエンドエンジニアに転身。 カルタ大会やハッカソンなど、業務外の事で活躍し始める。
  • アジェンダ はじめに CSS設計の3大メソッド OOCSS BEM SMACSS 設計で必要な3つのこと 設計指針 ディレクトリ構成 スタイルガイド 業務で実践してみてわかった7つのこと まとめ
  • ~はじめに~ CSS設計って何それ美味しいの?
  • CSS設計とは ! CSSをより体系立て、より構造化させることで、 制作とメンテナンスをより容易に行うこと ※引用1 『SMACSS: Scalable and Modular Architecture for 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{ … }というように独立させてスタイルを充てると、色々なところで使い回せる
  • ストラクチャーとスキンを切り離そう (color) skin (display,text-align,…etc) structure (width,height)
  • structure skin
  • 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 = <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__heading .registraion__text .registraion__input .registraion__btn
  • Block, Element, Modifier Modifier
  • Block, Element, Modifier .registraion__btn_color_bule
  • MindBEMding BEMのエッセンスをとり入れつつ、命名ルールは 自分たちでカスタマイズするのもあり CSS Wizardly Harry Roberts氏 http://csswizardry.com/2013/01/mindbemding-getting-your-head -round-bem-syntax/
  • SMACSS
  • SMACSSとは OOCSS,BEMの流れを汲みつつ、著者の経験や理論も交えてドキュメントに落とし 込まれたスタイルガイド(コーディングルール)。 Jonathan Snook氏によって考案された。
  • 大きな特徴 要素を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つのこと
  • 設計指針 ディレクトリ構成 スタイルガイド
  • 設計指針
  • 設計指針 コーディングを行う際に守るべき約束事。 方針。 コーディング中に迷いが生じたら、これを 元に判断・解決する
  • 設計指針 例 SMACSSの場合 HTMLとコンテントのセマンティックな価値を向上すること 特定のHTML構造への依存を低減すること ※引用1 『SMACSS: Scalable and Modular Architecture for CSS 日 本語』
  • 設計指針 例 KOJI ISHIMOTO氏の場合 絶対にCSSを増やしたくない class名で悩みたくない 完璧じゃなくてもいい 石本 光司 @t32k Front-end-engineer サイバーエージェント所属 JS Girl ファウンダー ※引用2 KOJI ISHIMOTO『ぼくのかんがえたさいきょうのしーえしゅえしゅ』
  • ディレクトリ構成
  • ディレクトリ構成例(SMACSSベース) html scss js image
  • ディレクトリ構成例(SMACSSベース) html scss js image
  • ディレクトリ構成例(SMACSSベース) normlize.scss helper.scss header.scss footer.scss main.scss side.scss button.scss heading.scss table.scss form.scss scss mixin.scss …etc setting.scss common.scss base layout module
  • ディレクトリ構成例(SMACSSベース) scss mixin.scss setting.scss common.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は案外めんどくない
  • S BEMは案外めんどくない Dashのスニペット機能が超絶楽 PhpStormの補完機能は強力 .block{ &__element{ background: black; } } Sass 3.3̃の使うと省略できる .block__element{ background: black; }
  • OOCSSとBEMは混ぜるとちょい危険
  • S OOCSSとBEMは混ぜるとちょい危険 OOCSS シングルクラス向きマルチクラス向き .registration__btn_color_pink .btn .btn_pink .btn_small
  • S OOCSSとBEMは混ぜるとちょい危険 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
  • まとめ
  • たくさん知ろう いいとこだけ取ろう 自分なりの設計をしてみよう
  • S たくさん知ろう OOCSS
  • S いいとこだけ取ろう OOCSS
  • OOCSS S 自分なりの設計をしてみよう 自分や周りの環境に合わせて、最適な設計をしよう
  • S 参考文献 ※引用1 Jonathan Snook,斉藤祐也『SMACSS: Scalable and Modular Architecture for CSS』 https://smacss.com/ja ※引用2 KOJI ISHIMOTO『MOL - Designing for a Mobile World!』 http://t32k.me/mol/log/the-perfect-css-i-thought/ ※引用3 Twitter『 Bootstrap』 http://getbootstrap.com/ 谷 拓樹『Web制作者のためのCSS設計の教科書 モダンWeb開発に欠かせない「修正しやすいCSS」 の設計手法』 http://www.impressjapan.jp/books/1113101128 株式会社ピクセルグリッド『Code Grid』 https://app.codegrid.net/ Harry Roberts『CSS Wizardly』 http://csswizardry.com/
  • ご清聴ありがとうございました!