Closed3
styled-componentsとCSS Modulesの比較
- pureCSSからの移行を想定
- 両方ともちょこちょこっと触ったくらい
- あくまで個人の感想
比較
O, Xの2択評価
styled-components | CSS Modules | |
---|---|---|
規約・実装方針の 決めやすさ |
O | X CSS設計色がより強い |
実装の単純性 | O | X 同上 |
実装の工数 | X 1.3倍くらいはかかりそう (肌感覚) |
O |
保守性 | O | X |
可読性 | O | X |
学習コスト | X 少しだけ |
O ほぼなし |
市民権/開発状況 | O 最近の流行 | X メンテナンスオンリー? (頻繁にアップデートされているが。。) |
全般的な参考
styled-components
諸々
- 実装してみた所感
- 規約をある程度決めてから実装しないと、結局保守性・可読性は悪くなりそう
- スタイルを後付けするのではなく、スタイルを持ったUIの構築ができるのは好き
- 一方で膨大な数のstyled-componentが出来上がるので、管理しきれるかは運用してみないとわからない
- ローカルスコープだから気にならない?
- スパゲッティCSSよりはマシか
- 汎用コンポーネントを作る時は、基本的にprops渡しで良さそう
- themeの有効性
- propsが増えてきて可読性を下げる場合、あるいは、複数DOMのpropsを渡したい場合に有効そう
- Theming
- styled-components の theme型定義
- 辛い点
- ただただ1つ1つstyled-componentsに変換していくのが面倒くさい
- 変換ツールある?
- ただただ1つ1つstyled-componentsに変換していくのが面倒くさい
- 懸念・検討が必要な事項
- Globalスコープでのスタイル(resetCSS, 汎用クラス)
- createGlobalStyleを使うと良い
-
index.css
でもOK?
- classNameの使用方針
- 子要素へのスタイルの当て方
- 食べログでは子要素へのスタイルは禁止してるらしい
-
SassからCSS Modules、そしてstyled-componentsに乗り換えた話
-
なんらかのセレクタを使って別のAtomic Designコンポーネントのスタイルを上書きすることは禁止しています。
-
- styled-componentsの命名
- styleは別ファイルに分けた方が良いか?さすがにデザインの記述量が多い
- template literal内のlint/format
- Globalスコープでのスタイル(resetCSS, 汎用クラス)
参考リンク
概念理解
導入&やってみた
-
styled-components を試す
- 導入方法がまとまっていた
-
Using styled-components in TypeScript: A tutorial with examples
- 他のやってみた系より実装ボリュームがありわかりやすい
- 解説も丁寧
CSS Modules
諸々
- 実装してみた所感
- styled-componentsより関連記事が少ない気がした
- コンポーネント単位でCSSファイル分けるだけだし、そんな書くことない?人口が少ない?廃れてる?
- 公式読めば細かい記法はわかる、そもそもそんなに種類ないけど
- styled-componentsよりもCSSを一括でコピペして持ってこれる
- 色んなセレクタの継ぎはぎになることもありそう
- ただ継ぎはぎにするのではなく、適宜リファクタリングは必要
- ローカルスコープとはいえ、最初は良くても、メンテしていくうちにスパゲッティになりかねない
- styled-componentsより関連記事が少ない気がした
- 懸念・検討が必要な事項
- resetCSS, タグにスタイルを当てている箇所の移植
-
index.css
に書けばよい - ローカルスコープに閉じてるとはいえ、SCSSってごちゃっとしがち(PureCSSつらつら記述するのもそうだけど)
-
- マイナーなFeatureを使いたい時に
webpack.config.js
の編集が必要そう?- そもそも使わなそう
- Reactのためのwebpack環境整備
- resetCSS, タグにスタイルを当てている箇所の移植
- 辛い点
- セレクタがhtmlタグの場合、クラス名を当てる必要がある
- クラス名なしでも、SCSS形式で入れ子になっているhtmlタグにスタイルを当てることはできるのでそこまで問題ではなさそう
参考
概念理解
- 公式
- GitHub
-
css-modules/css-modules
- 概念
- ドキュメントのみ
-
webpack-contrib/css-loader
- 概念の実装
-
css-modules/css-modules
- CSSモジュール ― 明るい未来へようこそ
- "CSS Module" をめぐる混乱
- webpack css-loader と style-loader の違いについて学んだ
導入&やってみた
CSS ModulesはCreate React Appでは標準装備になっているようだ!
Create React AppではCSSファイルのファイル名に「hoge.module.css」とファイル名と拡張子の間に「.module」を挟めばCSS Modulesと認識されるようだ。
このスクラップは2021/08/19にクローズされました