Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FLOCSSの知見と独自解釈

 FLOCSSの知見と独自解釈

Avatar for TakuyaTaniguchi

TakuyaTaniguchi

August 29, 2019

Other Decks in Programming

Transcript

  1. FLOCSS とは FLOCSS とは BEM,SMACSS などを取り⼊れつつ, モジュラーなアプローチのためのCSS 構成案 です。 アイデア集的な要素もあり、FLOCSS

    の考え⽅を基本としながらも、 開発現場によって独⾃に拡張しやすいのが特徴です。 コーポレートサイトやLP などデザインパーツが多彩なプロジェクトに適して いると感じています。 github 書籍 https://github.com/hiloki/flocss https://mamehiko.booth.pm/items/1033385
  2. Project Project Project レイヤー FLOCSS に置いてもっとも重要で、判断が難しいデザインパーツです。 component が集まって構成されるパーツや、プロダクト固有のものを定義しま す。 恐らく、ファイル数がもっとも増えるレイヤーになります。

    ファイル名もあえて、汎⽤性を意識しないことが多く、たとえ似通ったデザイ ンであっても, ⽤途が違えばファイルごと複製する事が多いです。 少しイメージしにくかもしれませんが、component は必要最低限のパーツであ り、project はcomponent が複数集まった塊です。 ただし、project ⼀つのレイヤーで完結する場合もあります。
  3. <div class='p-event'> <div class='p-event_item'> <div class='p-event_title c-title'>EVENT</div> </div> </div> <div

    class='p-news'> <div class='p-news_item'> <div class='c-title'>NEWS</div> </div> </div> <div class='p-banner'> <p class='p-banner_text'>売 出 中!!!</p> </div>
  4. /* p-event.scss */ .p-event{ &_item{} &_title{} } /* p-news.scss */

    .p-news{ &_item{} } /* p-banner.scss */ .p-banner{ &_text{} }
  5. <div class='c-card'> <div class='c-card_item'> <div class='c-card_title'> <p> </p> </div> </div>

    <div class='c-card_item'> <div class='c-card_title'> <p> </p> </div> </div> </div> <button class='c-button'>CLICK</button>
  6. FLOCSS の設計ルール FLOCSS の設計ルール FLOCSS を使⽤する上で、もっとも重要な部分になります。 提唱されているルールを守ることで, 堅牢かつ変更に耐えやすい設計になりま す。 FLOCSS

    の主な設計ルール ・ファイル名とクラス名は統⼀する ・⼀つのCSS ファイルに対して、⼆つ以上のクラスを追加しない。 ・モジュール同⼠のネストは禁⽌ ・Object レイヤーは Project Compoent Utilty の順番に追記する。 ・同レイヤーのクラスの重ねがけは禁⽌
  7. Object レイヤーは Project Compoent Utilty の順番に Object レイヤーは Project Compoent

    Utilty の順番に 記載します。 記載します。 別レイヤー同⼠で、クラス名を追記する時は P > C > U の順番で書くと 視認性が⾼まります。( より左あるクラスの⽅が詳細度が⾼い) ※ 公式の書き⽅は逆になります。
  8. <!-- NG --> <div class='l-contents l-header'> <div class='l-contents_inner'> <div class='p-news

    p-event'> <div class='p-news_title p-titleStrong'>TITLE</d </div> </div> </div>
  9. layout か project か layout か project か ヘッダーなどをlayout レイヤーで作成する際に、付随するロゴやナビゲーショ

    ンをlayout レイヤーにするのか、puroject レイヤーで作成するのか、悩みどこ ろです。 ここは、個⼈的な解釈になりますが、project で作成する⽅が管理がしやすいと 思います。 layout にまとめると、⼀つのCSS ファイルが肥⼤化してしまいFLOCSS の利点が 薄れてしまいます。 あくまでlayout は" サイト構造のCSS" を記述するだけに留め、" 装飾を⽬的とし たCSS" はporoject レイヤーに担ってもらうべきという考えです。
  10. <!--GOOD--> <div class='l-header'> <div class='l-header_inner'> <div class='p-logo'> <img class='p-logo_img' src='/src/hoge.png'

    alt= </div> </div> </div> <!--NG--> <div class='l-header'> <div class='l-header_inner'> <div class='l-header_logo'> <img class='l-header_logo_img' src='/src/hoge.pn </div> </div>
  11. project か component か project か component か project を"

    プロダクト固有のものを定義" 、component を" プロジェクト内で複 数使われるデザイン" と書きましたが 実際に書き始めると⼆つのレイヤーの区別に悩んでしまうものです。 この場合の解決策として、最初は" 迷ったらproject レイヤー" にする。という⽅ 針で進めていました。 FLOCSS は常にリファクタリングしながら構築する必要があり、project レイヤ ーに同じCSS を書き続けている事があれば、都度抜き出して、component レイ ヤーに書き出す⽅法が⼀番無難かと思います。
  12. /* NG */ /* c-card.scss */ .c-card{ &_inner{ &.-is-block{ /*

    付与 必要 */ .c-card_title{} .c-card_desc{} } } &_title{} &_desc{} } /* OK */