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

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

Apr 16, 2017

Download

Design

Kenji Karahashi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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という開発手法

おわり