2021年6月7日
デザイン
FLOCSSとBEMを理解する


はじめに
本記事では、FLOCSSとBEMについて整理して学んでいきます!
私はマークアップをする際に、CSS/Sassのクラス名の命名に悩んでしまうことがあります。
一緒にFLOCSSとBEMをマスターして、より分かりやすい記述ができるようになりましょう!
FLOCSSとは
FLOCSS(Foundation Layout Object CSS)は、ファイルやディレクトリの構成だけでなく、命名のルールもMindBEMding(BEM)を用いて決められている設計思想で、導入することで混乱の少ない記述になるとされています。
FLOCSSの構造
- Foundation
- Layout
- Object
デフォルトとなるスタイルのファイル(reset.scssやfont.scssなど)
サイト全体のレイアウトに関わる要素のファイル(header.scssやfooter.scssなど)
使い回す要素のファイル
ComponentとProjectに分かれる
Utility(細かい調整のためのスタイルをまとめたファイル)も含む
Objectの構成
- Object
– Component:最低限の機能を持ったもの(button.scssやtxt.scssなど)
… 接頭辞にc-がつく
– Project:プロジェクト固有の塊(about.scssやlogin.scssなど)
… 接頭辞にp-がつく
– Utility:細かい調整のためのスタイル
… 接頭辞にu-がつく
Componentの最低限の機能の定義が人によって異なり、Componentなのか、Projectなのかどちらに分類されるべきか混乱が生じる可能性があるとされています。チーム作業する際は共通の認識が必要です。
例えば、inputなどの入力フォームのスタイルをまとめたものをform.scssとしてComponentに入れるのは規則に沿ったものと言えるでしょうか。
入力フォームは同じスタイルを使い回すことが多いという点で、Project(プロジェクト固有の塊)に当てはまらないものですが、様々なスタイルをまとめているという点ではComponent(最低限の機能を持ったもの)にも当てはまっていないような気がします。
今回の例の場合は、form全体の構成はProjectに分類し、inputやcheckboxなど個々のパーツはComponentに分類するのが良さそうですね!
BEMとは
BEMはクラス名の命名規則の一つです。
BEMに基づいて、CSSのクラス名の規則として作られた「MindBEMding」をBEMと呼ぶことがあり、今回もMindBEMdingをBEMとしています。
参考
CSSBEMの方法論とMindBEMdingという記法
具体的なBEMの書き方
具体的なBEMの書き方は、以下となります。
Block(1つのコンポーネント)__Element(子要素)--Modifier(バリエーション)
アンダースコアとハイフンの数は2個がMindBEMdingのルールです。
ハイフンを1つにしない理由は、要素の名前にケバブケース/チェインケース(例:hoge-hoge)が使われることがあり、それと区別するためです。
共通認識として、ケバブケースは使用しないことを前提にすればハイフンを1つにしても良さそうですね!
【componentの具体例】
【projectの具体例】
elementをネストするのはNG
Element(子要素)のネストは複雑になってしまうためNGとされています。
HTMLで見た時に入れ子関係だったとしても、常にブロック直下のエレメントであるように書くべきとされています。
【elementのネスト回避の具体例】
elementの中にelementを入れるのはOKとされています。少し複雑ですね。
アンダースコアが2回連続で続かないように気をつけましょう。
x block__element__element
○ block__element--element
まとめ
今回はFLOCSSとBEMについて改めて整理しました。
原則から発展したより細かい規則については、チームで共通認識を作れるようになると混乱の少ない設計にすることができそうです!
紹介にあたって参考にした公式のドキュメントも合わせて確認してみてください!
ドキュメント
FLOCSSとBEMを用いて別の人が見てもわかりやすい記述を書きましょう!
CSSのお仕事に関するご相談
Bageleeの運営会社、palanではCSSに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。
この記事は
参考になりましたか?
3
2
関連記事

2021年12月5日
【CSS】CSSだけでアコーディオンを作る方法

2021年11月29日
Tailwind CSSの概要と導入のメリット

2021年6月7日
FLOCSSとBEMを理解する

2020年12月24日
【CSS】:not否定擬似クラスの使い方とできること

2020年12月21日
デザイン制作・コーディングツール「Hadron」を使ってみた

2018年12月9日
【CSS】3D transformsでコロッとなるエフェクトを作る
簡単に自分で作れるWebAR
「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。
palanARへ
palanでは一緒に働く仲間を募集しています
正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。
運営メンバー

Eishi Saito 総務
SIerやスタートアップ、フリーランスを経て2016年11月にpalan(旧eishis)を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。
sasakki デザイナー
アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。

やまかわたかし デザイナー
フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。
Sayaka Osanai デザイナー
Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。

はらた エンジニア
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

こぼり ともろう エンジニア
サーバーサイドエンジニア。SIerを経て2019年7月に入社。日々学習しながらRuby on Railsを使った開発を行っています。

ささい エンジニア
フロントエンドエンジニア WebGLとReactが強みと言えるように頑張ってます。

Damien
WebAR/VRの企画・開発をやっています。森に住んでいます。

ゲスト bagelee

かっきー

まりな

suzuki
miyagi

ogawa
雑食デザイナー。UI/UXデザインやコーディング、時々フロントエンドやってます。最近はARも。

いわもと
デザイナーをしています。 好きな食べ物はラーメンです。

taishi kobari
フロントエンドの開発を主に担当してます。Blitz.js好きです。

kubota shogo
サーバーサイドエンジニア。Ruby on Railsを使った開発を行いつつ月500kmほど走っています!
nishi tomoya

aihara
グラフィックデザイナーから、フロントエンドエンジニアになりました。最近はWebAR/VRの開発や、Blender、Unityを触っています。モノづくりとワンコが好きです。
nagao
SIerを経てアプリのエンジニアに。xR業界に興味があり、unityを使って開発をしたりしています。

Kainuma
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

sugimoto
asama
ando
iwasawa ayane

oshimo
異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!