ブログ
CSSフレームワークとスタイルガイド、CSS記法まとめ(2018/1/30時点)
「フロントエンド開発者」の終焉を読んでモヤモヤしているオオコシです。
早速ですが、Bootstrapのv4が正式版になったということで、他のCSSフレームワークやスタイルガイド、CSS記法なんかをまとめてみました。
※Bootstrap v4についてはコリスさんの記事が良いと思います。
フレームワーク
■Semantic UI
執筆時のバージョンは2.2.154(2018/1/29)。
gulp/LESSで、classの命名ルールは単語をクラスとして考えるタイプ。
カードのサンプルコード
<div class="ui card">
<div class="image"><img src="/images/avatar2/large/kristy.png"></div>
<div class="content">
<a class="header">Kristy</a>
<div class="meta"><span class="date">Joined in 2013</span></div>
<div class="description">Kristy is an art director living in New York.</div>
</div>
<div class="extra content">
<a><i class="user icon"></i>22 Friends</a>
</div>
</div>
※Semantic UIのトップに「Concise HTML」という見出しがあるんですが、Concise CSSというのもあるようです。line-height
に相当するlh
という単位を独自に実装しているみたいです。こちらはSASS。これはこれでちょっと気になります。
■Material Design Lite
WebStarterKitにも同梱されているMaterial DesignをベースとしたGoogle製CSSフレームワーク。SASS。接頭辞が.mdl-
のBEM記法。
現在v1.3.0(2016/12/21)。
カードのサンプルコード
<div class="demo-card-wide mdl-card mdl-shadow--2dp">
<div class="mdl-card__title">
<h2 class="mdl-card__title-text">Welcome</h2>
</div>
<div class="mdl-card__supporting-text">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Mauris sagittis pellentesque lacus eleifend lacinia...
</div>
<div class="mdl-card__actions mdl-card--border">
<a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
Get Started
</a>
</div>
<div class="mdl-card__menu">
<button class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect">
<i class="material-icons">share</i>
</button>
</div>
</div>
ちなみにWebStarterKit、開発は続いているようですがGoogleのサイトではサポート終了となっていました。
■Materialize
MDL同様Material DesignをベースとしたCSSフレームワーク。SASS。こちらは接頭辞はなく、Bootstrapのような短いclassの組み合わせ。
現在v1.0.0-alpha.3(2017/12/30)
カードのサンプルコード
<div class="row">
<div class="col s12 m6">
<div class="card blue-grey darken-1">
<div class="card-content white-text">
<span class="card-title">Card Title</span>
<p>I am a very simple card. I am good at containing small bits of information.
I am convenient because I require little markup to use effectively.</p>
</div>
<div class="card-action">
<a href="#">This is a link</a>
<a href="#">This is a link</a>
</div>
</div>
</div>
</div>
■UIkit
軽量なフレームワーク。SASS/LESSどちらも使えます。
接頭辞は.uk-
。
現在 Version 3.0.0-beta.38(2018/1/12)
カードのサンプルコード
<div class="uk-card uk-card-default uk-card-body uk-width-1-2@m">
<h3 class="uk-card-title">Default</h3>
<p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</div>
Vue.jsと組み合わせたVuikitというのもあるようです。
■ZURB Foundation
現在v6.4.3(2017/8/19)。SASSベース。
ダウンロード時にグリッドのタイプが選べます。(XY/float/Flexbox)
PaniniというHandlebars形式のテンプレートエンジンも搭載。
カードのサンプルコード
<div class="card" style="width: 300px;">
<div class="card-divider">
This is a header
</div>
<img src="assets/img/generic/rectangle-1.jpg">
<div class="card-section">
<h4>This is a card.</h4>
<p>It has an easy to override visual style, and is appropriately subdued.</p>
</div>
</div>
Foundation for EmailsというHTMLメールのテンプレートもあります。
■PureCSS
米Yahooの軽量なCSSフレームワーク。
現在v1.0.0(2017/6/17)。
カードはないのでグリッドのサンプルコード
<div class="pure-g">
<div class="pure-u-1-3"><p>Thirds</p></div>
<div class="pure-u-1-3"><p>Thirds</p></div>
<div class="pure-u-1-3"><p>Thirds</p></div>
</div>
Styleguide
■Primer
Githubのスタイルガイド。
サンプルで使っているのはStorybookですが、DevTool使う前提ならこれで十分かも。
■Google Styleguide
Googleの各種StyleGuideです。
■Airbnb
AirbnbのStyleguide(JS/CSS/Ruby)。
■Trello
TrelloのCSS Styleguide。
基本BEMだけど、Modifierは.mod-
で追加。
jsに関係するものは.js-
の接頭辞がつくタイプ。
CSS設計/命名規則
■BEM
Block Element ModifierのBEMです。
現在は公式でもMindBEMdingの __
(アンダーバー×2) --
(ハイフン×2) の記法に統一された模様。
たまーに.block__elem__elem1__elem2__elem3
みたいなElementだらけの人がいますが、BEM使う意味ないのでElementは1個でお願いします。
■FLOCSS
Foundation/Layout/Objectの3レイヤーでMindBEMdingsなどを取り入れた考えかた。
■ECSS
極端な言い方をすると共通化とか考えずに分離する!というニュアンスだと思ってます。
実案件だとこのケースが多いかも。
■APBCSS
Atomic Designの考え方に基づいたCSS設計。
設計段階からデザイナーとも考え方を共有していかないと難しい部分はあるとのこと。
日本ではAbemaTVがAtomic Design採用しているようです。
関係ないけどAtomic Designを提唱してるBrad Frostさん、This is Responsiveの作者でもあったんですね。
■RSCSS
今回調べていて新たに知ったもの。
ハイフンでつなげた2単語以上でコンポーネントを作って、BEMでいうところのElementsを1単語で子セレクタとし、Modifier相当のvariantsはハイフンを接頭辞に、Helperという上書き系はアンダーバーを接頭辞につけるというもの。
.search-form {
> .button { /* ... */ }
> .field { /* ... */ }
> .label { /* ... */ }
// variants
&.-small { /* ... */ }
&.-wide { /* ... */ }
}
- 日本語訳:RSCSS というCSS設計について
定形に収まるデザインが少ないのでフレームワーク系はあまり使ってきていないんですが、改めて見てみると、たまには使うのもいいかもなーという印象でした。使ってない方が珍しいとは思うのでこのままいくのもアリな気も…。
CSS記法についてはいろんな思想がありますが、現時点ではBEM(MindBEMding)のModifierだとHTMLコメントと干渉するので、FLOCSSとECSSを混ぜたような感じでやってます。Trelloに近いイメージ。
RSCSSはElementの単語が使いまわせるのは結構いいかもしれないです。
はたまた要素内で完結させることを考えるならPolymerみたくWeb Componentsなのか…
まだまだいろいろ模索中ですが「Webアプリ」を作る人なのか「Webサイト」を作る人なのかっていうのもポイントなのかもしれないですね。