52
リファクタリング HTML/CSS ヤフー株式会社 マーケティングソリューションカンパニー 開発本部エクスペリエンスデザイン部 テクニカルデザイン ヒラヤ ナオコ ~レガシー世界を超えて~

リファクタリングHTML/CSS ~レガシー世界を超えて~ #scripty03

  • Upload
    yahoo

  • View
    1.601

  • Download
    1

Embed Size (px)

Citation preview

リファクタリングHTML/CSS

ヤフー株式会社マーケティングソリューションカンパニー

開発本部エクスペリエンスデザイン部テクニカルデザイン

ヒラヤ ナオコ

~レガシー世界を超えて~

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

ふんわり自己紹介

美術史出身のエクストリーム文系

アプリデザインや大規模サイト運用を経てペライチとか作る係

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

広告管理ツール

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

掘れば何か出てくる超巨大遺跡(現役)

もともと大規模なシステム 度重なる仕様・機能追加 設計担当者も実装担当者も変わる

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

掘れば何か出てくる超巨大遺跡(現役)

もともと大規模なシステム 度重なる仕様・機能追加 設計担当者も実装担当者も変わる

カオス!!

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

見た目は同じはず?ひとつのスタイルを当てるのに、機能をクラス名にしてしまうとこうなる。

.myModule .orenoBtn,

.myModule .omaenoBtn,

.myModule .oreToOmaenoBtn,

.myModule .kiminoBtn,

.myModule .anatanoBtn,

.myModule .kimitachinoBtn,

.myModule .oregaOmaedeOmaegaOredeBtn,

.myModule .oregaOretachigaBtn,

.myModule .darekanoBtn,

.myModule .karenoBtn,

.myModule .kanojonoBtn,

.myModule .anoBtn,

.myModule .konoBtn,

.myModule .sonoBtn,

.myModule .donoBtn,

.myModule .yabaiBtn,

.myModule .sugoiBtn,

.myModule .choberibaBtn,

.myModule .mk5Btn,

.myModule .kaeruBtn { display:inline-block; width:15px; height:15px; background:no-repeat url(icon.gif) 0 4px; text-decoration:none; overflow:hidden; margin:0 0.2em 0 0; cursor:pointer; }

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

その親要素、要るの?親要素が違う場合はどうなるんだろうと不安になるセレクタ群。yellowIconという同名で異なる画像を使用するパターンがあるのだろうか……。

.myModule .yellowIcon, span .yellowIcon, p .yellowIcon { display:inline-block; width: 15px; height: 15px;     background:no-repeat url(icon.gif) 0 4px; } 

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

遺跡の修繕、リファクタしよう

の、HTML/CSS編

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

迷路状態

ドキュメント:なし 構造、記法のルール:なし パーツごとの標準的な仕様:なし

作ろう決めよう

見直そう

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

ドキュメント

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

スタイルガイド(KSS)

KSS 様々な言語でジェネレータがある 導入コストは高いが柔軟で、比較的記述しやすい

無駄なCSSの増殖を抑制…できるといいな

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

その他スタイルガイドStyleDocco

導入は簡単(gulp,grunt,etc) Modifierまでマークアップするのが面倒

DSS Javadoc風の記法 多くのプリプロセッサに対応 コメント補助Sublimeプラグインがある

node,grunt環境ならオススメ

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

その他ドキュメント

構造やルールの説明 GithubのWikiに記載

mixinやfunctionの説明 必要に応じてSassDocを利用予定 mixinに頼る設計ではないため現状ナシ

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

構造、記法

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

BEM

コンポーネントの使い回しが多い 複雑化しても詳細度が上がらない※改造してModifierは詳細度上がる

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

.Block__element

.m-odifier

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

.Block __element .m-odifiermodifierだけ別クラス化。ただしmodifier単体のルールセットは存在しない。

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

粒度をそろえる

基本的な考え方はBEM Block, element, modifier

でもコンポーネントの粒度は捉え方次第

粒度の考え方をルール化してしまう

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

粒度のルール(の一例)

elementは1階層まででネストはしない

1つのBlockが持つことができるelementは基本4種類+リンク

機能や見た目ではなく、このルールが適用できる粒度に分解する

.Block__element__elementino

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

基本4種類+リンクhead body item foot link

body

item

item

item

head

foot

link

Block

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

例Block

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

例Blockhead

body

foot

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

head

body

foot

??

Block

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

Block

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

Block headitemitemitem

foot

item.m-thumb

item

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

TopixList TopixBox

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

例.css

こんな感じに。

/* ボックス全体 */ .TopixBox { width: 300px; border: 1px solid #9eb4db; } .TopixBox__head { padding: 0; }.TopixBox__body { padding: 3px 7px; } .TopixBox__foot { padding: 10px 5px; } !/* タイトルの一覧 */ .TopixList { width: 100%; } .TopixList__head { font-size: 11px; padding-bottom: 5px; } .TopixList__item { padding: 3px 0; } .TopixList__item.m-thumb { position: absolute; }

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

例2

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

例2.scss

Sass3.4なら記述もスッキリ。

head, body, footはそれぞれ、hd, bd, ftと省略。

.PageInfo { padding-top: 10px; padding-bottom: 20px; ! &__hd { font-weight: bold; } &__bd { color: #777; } } .RegisterGroup { padding-left: 1.5em; ! &__hd { border-bottom: 1px solid #E8E8E8; } &__bd { padding-bottom: 1.5em; } &__item { padding: 0.8em 0; } } .RegisterUnit { @include clearfix; ! &__hd { float: left; width: 13em; text-align: right; } &__bd { padding-left: 13.5em; } }

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

でも柔軟に

名前は一例 もちろん例外もある

__inputとか、__btnとか 1つのBlockが抱えられるelementの種類の上限を定めると良さそう

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

ルールの分けかた

.A…エラー表示用、別パターンなし

.B…お知らせ用、色・アイコンパターンあり

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

やり方色々

.iconLabel

共通のスタイルにはO.O的な細かい汎用クラスを作成。

.panel.m-typeDenger

.closeButton

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

やり方色々Block, elementごとに記述

.ErrorPanel { 赤枠、赤背景、アイコン付き太赤字 }

.NotePanel { 赤枠、赤背景 }

.NotePanel__hd { アイコン付き赤太字、下点線 }

.NotePanel__ft { 閉じるボタン }

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

ルールを明確に

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

ルールを明確に

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

ルールを明確に

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

BEMコンポーネント +汎用パーツ

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

構成

base/ elements/ modules/ pages/ stickers/ style.scss

. ├── base │   ├── _layouts.scss │   ├── _reset.scss │   ├── _variables.scss │   └── mixins ├── elements │   ├── _buttons.scss │   └── _labels.scss ├── modules │   ├── _noticePanel.scss │   ├── _searchBox.scss │   └── common │   └── _header.scss ├── pages │   ├── _confirm.scss │   └── _create.scss ├── stickers │   └── _spacers.scss └── style.scss

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

base

ノーマライズやリセット、レイアウト 変数、関数、mixin 基本的にプロジェクト開始時に整備し、あとはあまり弄らない

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

elements

MCSSでいうベースレイヤー

ボタン、ラベルなどの汎用パーツ

階層構造を持たず、それ自体で完結

.lowerCamel(.button, .iconLabel, …)

外部に影響するレイアウト情報は持たない(margin, floatなど)

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

modules

MCSSでいうプロジェクトレイヤー

複数要素からなるBEMコンポーネント群

.UpperCamel (.NotePanel, .SearchBox)

内側に対してのみレイアウトを変更できる(paddingを持ってよい、elementはmarginも持ってよい)

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

pages

ページ固有のスタイルを記述

上書き用ではない

ページ名に関連付いた接頭辞などで名前をユニークに

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

stickers

一時的なレイアウト変更など

シングルルールのクラス

.s-sticker

ここでのみ!importを利用する

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

style.scss

全てのパーシャルを読み込む

ディレクトリはアルファベット順なのでそのままの順番でOK

pagesレイヤーが重くなってきたら、pagesだけ別に出力してもOK

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

UI仕様

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

UI仕様もソースから

同機能でもUI仕様がブレブレ配置、サイズ、色…… 似た名前やモディファイアが大量発生 ソースの肥大化・複雑化を招く

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

.VerticalList__link

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

UI仕様もソースから

ソースを読めばルールがわかる 新規モジュールを作るときはスタイルガイド+該当ルールセットを参照 ソースの肥大化・複雑化を抑止!!したい!!

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

まとめ

まずはドキュメント環境をつくる

リファクタしながらルールを作る

仕様のブレはソースから直す

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

ご静聴ありがとうございました。