HTML・CSS

CSSを複数人で管理しやすく! FLOCSSの紹介

CSS を扱う際、地味に悩むのが class の名前を決めることだと思います。
・どんな class 名にすればいいかわからなかったり…
・class 名がいつの間にか重複してしまったり…
同じ CSSの記述を何箇所も書いてしまい、おかげで何箇所も修正しなきゃいけない!なんてことも。

そういった悩みを解決してくれるのが【 FLOCSS(フロックス)
CSSファイルの構成と命名規則を共通認識にすることで、CSSの管理がしやすくなるということです。

「個人が管理するWebサイトで、CSSの修正も自分1人。」という場合は必要ありません。
ですが、管理する人が複数人の場合は何かしらの共通ルールが欲しいところ。

つまり、
思いやりのある CSS記述、それが FLOCSS !

出来るだけ簡単に FLOCSS を紹介します。

目次

FLOCSS 覚える前に…

CSSファイルを分割して管理できる、SCSSを使える環境であることが望ましいです。
class名ごとにファイルが分割できることで、視認性の良さが変わってきます。

SCSSの記事も書いているので、よろしければどーぞ。

以下では 、SCSSありきで FLOCSSの説明をしていきます。

FLOCSS(フロックス)とは

Foundation → ファンデーション、基礎
Layout → レイアウト、枠組
Object → オブジェクト、内容物

で構成された CSSのこと。
頭文字をとって FLOCSS です。

階層構造(例)

命名規則 FLOCSS の階層構造の例

foundation フォルダ(基礎)

Foundation フォルダ内

Webサイトの基礎となる SCSSファイルを入れる場所。
_reset.scss → ブラウザ特有の CSSを解除する
_base.scss → Webサイト共通の CSS
_font-face.scss → @font-face の記述
_mixins.scss → @mixin の記述
_variable.scss → Webサイト共通の変数入れ

layout フォルダ(枠組)

Layout フォルダ内

Webサイトを構成する枠組みとなる SCSSファイルを入れる場所。
_l-site-wrapper.scss → サイト崩れを防ぐ記述
_l-header.scss → ヘッダー用
_l-nav.scss → Gナビゲーション用
_l-main.scss → メイン用
_l-article.scss → アーティクル用
_l-section.scss → セクション用
_l-footer.scss → フッター用

library フォルダ(JSライブラリ用|お好みで)

Library フォルダ内

JSライブラリに使っている SCSSファイルを入れる場所。
( splide.scss, swiper.scss など )

object フォルダ(内容物)

Webサイトの内容物(コンテンツ)に使う SCSSファイルを入れる場所。
Objectフォルダの中には、さらにフォルダがあり、
・component フォルダ
・project フォルダ
とあるのですが、
人それぞれの解釈違いでファイルが少し変わるためご注意を。

component フォルダ

Component フォルダ内

繰り返し使う SCSSファイルを入れる場所。
_c-anime.scss → アニメーションに関する CSS
_c-button.scss → ボタンに関する CSS
_c-card.scss → カード型のレイアウト用
_c-heading.scss → 見出し用
_c-img.scss → 画像用
_c-list.scss → ul, ol 用
など。

project フォルダ

Project フォルダ内

1つのまとまり(ページごと等)に使う SCSSファイルを入れる場所

_p-bread-crumb.scss → パンくず用
_p-contact.scss → コンタクトページ用
_p-loading.scss → ローディング画面用
_p-main-visual.scss → メインビジュアル用
_p-news.scss → お知らせページ用
_p-product.scss → 製品ページ用
_p-top.scss → トップページ用
など。

utility フォルダ(お好みで)

調整用に使う SCSS ファイルを入れる場所

_u-utility.scss ___ スマホ時に非表示や改行させる CSSを記述

接頭辞(prefix)について

接頭辞とは簡単にいうと「推測させる」ために付けるものです。

各ファイル名の頭に、
l-〇〇.scss → Layout の L
c-〇〇.scss → Component の C
p-〇〇.scss → Project の P
と付けることによって「どのファイルが、どこに属する」かハッキリさせます。
これは、class名にも付けます。(後述)

FLOCSS の構成に関する説明は以上です。

classの命名規則について

FLOCSS における classの命名規則は【 BEM 】を軸に使っています。
Block → ブロック、外枠
Element → エレメント、Block より内側の要素
Modifier → モディファー、異なる状態やバージョンを表す
頭文字をとって BEM です。

書き方のルールは【 MindBEMding 】が採用されています。

class名の決め方

基本的には、
Block の名前を Block-name のように ハイフン で繋げたり、
__Element(アンダースコア 2つ エレメント)または __Element-name を Block名に繋げたり、
--Modifier(ハイフン 2つ モディファー)を Block名 や Element名 に繋げる感じです。
(例)
・Block__Element
・Block-name__Element-name
・Block--Modifier
など。

こういった使い方はしません。
・Block__Element__Element
・Block--Modifier--Modifier

(例1)header

<!-- ヘッダー -->
  <header class="l-header c-anime--header">
    <div class="l-header__inner">
      <h1 class="l-header__logo">
        <a class="l-header__logo-link" href="〜〜〜〜〜">
          Webサイト名
        </a>
      </h1>
    </div>

    <nav class="l-nav">
      〜略〜
    </nav>

  </header>

こちらは headerの例です。
headerの CSSは【 layout フォルダ 】に属しているため、class名に接頭辞の[ l- ]を付けます。

3行目からは Elementを繋げる

l-headerという枠( Block )の中に、
__inner__logo__logo-link という要素( Element )がある。といった具合です。

2行目の c-anime--header

anime用CSSは【 objectフォルダ → componentフォルダ 】に属しているため、接頭辞の[ c- ]を付けて c-animeと命名。
アニメ用CSSを headerで使いたいから、
異なる状態を表すModifierを繋げたclass名、--header を記述。といった具合です。

(例2)main

<!-- メイン -->
  <main class="l-main">
    <section id="activity" class="l-section p-activity">
      <div class="l-inner">

        <div class="l-inner__heading p-activity__heading">
          <h2 class="c-heading__primary c-heading__primary--activity">
            活動内容
          </h2>
        </div>

        <div class="l-inner__body p-activity__body">
          <div class="p-activity__content p-activity__content--hoge">
            <div class="p-activity__text-wrap">
              <h3 class="c-heading__secondary">
                ほげほげ
              </h3>
              <div class="p-activity__text">
                <p>吾輩は猫である。名前はまだ無い。</p>
              </div>
            </div>
            <div class="c-img__wrap c-img__wrap--p-activity">
              <img class="c-img" src="〜〜〜.png" alt="〜〜〜" width="400" height="400">
            </div>
          </div>

          <div class="p-activity__content p-activity__content--geho">
            <div class="p-activity__text-wrap">
              <h3 class="c-heading__secondary">
                げほげほ
              </h3>
              <div class="p-activity__text">
                <p>吾輩は猫である。名前はまだ無い。</p>
              </div>
            </div>
            <div class="c-img__wrap c-img__wrap--p-activity">
              <img class="c-img" src="〜〜〜.png" alt="〜〜〜" width="400" height="400">
            </div>
          </div>
        </div>

        <div class="l-inner__link p-activity__link">
          <div class="c-button__wrap">
            <button class="c-button">
              活動内容ページへのリンクボタン
            </button>
          </div>
        </div>

      </div>
    </section>
    <section>〜略〜</section>
    <section>〜略〜</section>
  </main>

こちらは main内にある sectionの例です。
sectionも、内枠にある innerも【 layout フォルダ 】に属しているため、class名に接頭辞の[ l- ]を付けています。

l-inner内は
6行目、l-inner__heading ___ 見出しの枠
12行目、l-inner__body ___ 内容物の枠
42行目、l-inner__link ___ ページ遷移する枠
という構成になっています。

3行目、p-activity

この sectionは「活動内容」をまとめているため【 objectフォルダ → projectフォルダ 】に属する activityとして、p-activityと命名しています。

p-activityという枠( Block )の中に、
__heading__body__content という要素( Element )などがある。といった具合です。

必要であれば、
異なる状態を表すModifierを繋げたclass名、--hoge などを記述します。(13行目・27行目のように)

共通のCSS

共通で使いまわせそうな所には、
・c-heading__primary → h1見出し用
・c-img → 画像用
・c-button → ボタン用
と、あらかじめ用意しているCSSを適用することで、保守性の高い記述ができます。

(例3)footer

<!-- フッター -->
  <footer class="l-footer">
    <div class="l-footer__inner">
      <aside class="l-footer__contact-address">
        <p class="l-footer__contact-text">テキストテキスト</p>
        <h3>株式会社〇〇〇〇</h3>
        <div class="c-button__wrap">
          <a class="c-button c-button--tel" href="tel:+81-xxx-xxx-xxxx">電話番号:555-555-5555</a>
        </div>
        <div class="c-button__wrap">
          <a class="c-button c-button--email" href="mailto:xxxxxxx@xxx.xx" target="_blank" rel="noopener noreferrer">メールはこちらをクリック</a>
        </div>
      </aside>
    </div>

    <!-- コピーライト -->
    <a href="〜〜〜"><small class="u-c-w">©pazfinder</small></a>

  </footer>

こちらは footerの例です。説明は繰り返しになるので省略します。

SCSS記述の注意点

ファイル名に沿った class名しか書かないこと!

/* ダメな例 ------------------------------- */

// p-activityファイルに、異なるclass名が混在している
.p-activity.l-section {
  margin-top: 20px;
  margin-bottom: 20px;

  // p-activityファイルに .l-innerが書かれている
  .l-inner {
    padding: 20px;
  }

  // p-activityファイルに .c-heading__primaryが書かれている
  .p-activity__heading .c-heading__primary {
    font-size: 24px;
  }
}

p-activity.scssファイルには、class名 .p-activityの Elementや Modifierしか書いてはいけません。

/* 良い例 ------------------------------- */

.p-activity {
  margin-top: 20px;
  margin-bottom: 20px;
}

.p-activity__body {

  &__text-wrap {
    display: flex;
    flex-direction: column;
  }

  // .p-activity__body内の p 要素にCSS
  & p {
    font-size: 16px;
  }
}

class名をまたぐようなことはせず【 .p-activity内の p要素にCSSを適用する 】などは大丈夫です。

FLOCSS の命名規則に関する説明は以上です。

参考サイト

クラス名に悩む場合

FLOCSSを詳しく

保守力を上げたい

最後まで読んでいただきありがとうございました。

シェアしてもいいかも…と、思ったら

記事 一覧へ

コメントを書いてみる

CAPTCHA