27
モダンCSS設計と BEMという開発手法 kenji karahashi

モダンCSS設計と BEMという開発手法

Embed Size (px)

Citation preview

Page 1: モダンCSS設計と BEMという開発手法

モダンCSS設計と BEMという開発手法

kenji karahashi

Page 2: モダンCSS設計と BEMという開発手法

あとで困るコードを 書いてませんか?

Page 3: モダンCSS設計と BEMという開発手法

よりよいCSSのゴール

• 予測しやすい

• 再利用しやすい

• 保守しやすい

• 拡張しやすい

Page 4: モダンCSS設計と BEMという開発手法

破綻しやすいCSS

• HTMLの構造に依存している

• スタイルを取り消している

• 絶対値を多様している

Page 5: モダンCSS設計と BEMという開発手法

モダンサイト構築の ワークフロー

• 近年はHTMLで動的なデザインを確認しながら進めるのが主流。

• そこでCSSもある程度の変更に耐えうる、または変更に改修できる設計であることが求められる。(例えば左右のカラムを入れ替えるなど。)

• このような入れ替えをしやすくする基本設計として、要素を部品=モジュール、コンポーネントと考える設計が求められている。

Page 6: モダンCSS設計と BEMという開発手法

–斉藤裕也氏

壊れない完璧なCSS設計を求めるのではなく、 壊れたときに勇気をもって修復できる設計を

Page 7: モダンCSS設計と BEMという開発手法

素直にセレクタを書いていくと、セレクタの数が多く、複雑になる。

その結果、セレクタの詳細度を高めてメンテナンス効率を下げます。

Page 8: モダンCSS設計と BEMという開発手法

セレクタの 4つの

リファクタリングの考え方

Page 9: モダンCSS設計と BEMという開発手法

1 要素セレクタを 省略する

Page 10: モダンCSS設計と BEMという開発手法

2 セレクタを短くする

Page 11: モダンCSS設計と BEMという開発手法

3 セレクタを限定的にする

Page 12: モダンCSS設計と BEMという開発手法

4 クラスセレクタを活用する

Page 13: モダンCSS設計と BEMという開発手法

命名規則をもっと 深堀りしてみよう

Page 14: モダンCSS設計と BEMという開発手法

BEM https://bem.info/

Page 15: モダンCSS設計と BEMという開発手法

BEM?• Block

• Element

• Modifier

• ロシアのYandexのフロントエンド開発シームが考えた開発手法。

Page 16: モダンCSS設計と BEMという開発手法
Page 17: モダンCSS設計と BEMという開発手法

bootestrapの場合.alert { … }

.alert-success { … }

.alert-warrning { … }

Page 18: モダンCSS設計と BEMという開発手法

Block

.alert { … }

Page 19: モダンCSS設計と BEMという開発手法

Element.alert-successの部分がElement

.alert-title{ … }

.alert_ _ title{ … }

一般的 BEM

Page 20: モダンCSS設計と BEMという開発手法

Modifier

<div class=“alert alert_warning”> <h2 class=“alert_ _ title”> … </div> <h2 class=“alert_ _ body”> … </div>

</div>

Page 21: モダンCSS設計と BEMという開発手法

Modifier.alert { … }

.alert_warning{ … }

• ModiferはBlock、またはElementのバージョン違いである

• Bootstrapなどではいずれのクラス名もalert-という命名規則になる。その名前だけではクラスの持つ機能の区別ができない。

• アンダーバー1個はモディファイ(パターン)

• アンダーバー2個はエレメント(エレメント)

Page 22: モダンCSS設計と BEMという開発手法

メリット

• 先頭にaleat-と命名することで、どれがコンポーネントを構成する要素であるか明らかに出来る

• 通常よりユニークなので、スタイルの汚染するリスクを抑えられる

Page 23: モダンCSS設計と BEMという開発手法

ここで重要なこと• ElementとModiferのを明確にすること

• クラス名にアンダースコアを使うかどうかは重要ではない

• BEMのエッセンスを取り入れ、再定義してもよい

• 重要なのは、定義したルールが全体を通して一貫しているかどうか

Page 24: モダンCSS設計と BEMという開発手法

例えば

Element ◎◎◎ _ _ △△△

Modifer ◎◎◎ - - △△△

Page 25: モダンCSS設計と BEMという開発手法

ハイフンの役割は?

.search-box { … }

.search-box - - warning{ … }

.search-box _ _ title { … }

• ハイフン一つは、コンポーネントの関係を示すこと以外の用途に活用

Page 26: モダンCSS設計と BEMという開発手法

• 他にもキャメルケースなど活用して、より汎用的なルールセットが世界中で開発されている

Page 27: モダンCSS設計と BEMという開発手法

おわり