CSS-in-JS - styled vs css prop by Glen Maddern (styled-components)
CSS-in-JS の styled と css prop の記法について、styled-components の作者である Glen Maddern 氏による説明が行われた。
https://dev.to/a_sandrina_p/css-in-js-styled-vs-css-prop-229e#comment-1351o
コメントの内容を箇条書きでメモした。
-
最初に styled のアプローチが人気を博したのは styled-components だと思う。
-
最初期 Glamor が持っていた css prop が要求されたが、当時は強く反対した。
- Glamor との差別化
- styled-components は Glamor をベースに開発していた。
- Runtime only のライブラリとして設計されていた。
- Webpack と連携していた CSS Modules とは意図的に異なり、Babel 変換は不可。
- css prop を実装できなかった。
- Webpack と連携していた CSS Modules とは意図的に異なり、Babel 変換は不可。
- 1 つだけの方法を望んでいた。
- 他の選択肢を望むなら Glamor や Emotion を使うべき。
- Glamor との差別化
-
現在は css prop をサポートしている。
-
React コンポーネントのマークアップからできるだけ多くを削除し、構造とコンテンツだけにしたかった。
- = 多くのファイル/ディレクトリ、ローカル名を導入すること。
- これが気に入っていた、誰もがそうではない。
- 文脈に応じた名前を付けることを目指していた。
jsxreturn ( <Wrapper> <Prompt>What is Delicious?</Prompt> <Answer>Pizza!</Answer> </Wrapper> );- css prop は避けたいノイズが多い
jsxreturn ( <div css={{ display: "flex", alignItems: "center", }} > <h2 css={{ ...typography.h2, ...borders.rounded.black, }} > What is Delicious? </h2> <p css={{ ...typography.p.grey90.lh14, paddingTop: "1rem", }} > Pizza! </p> </div> );<div css={Styles.item}>Pizza</div>のようなケースでは、HTML 要素が明示的であり、CSS とマークアップ(構造とコンテンツ)が分離されおり素晴らしい。
- = 多くのファイル/ディレクトリ、ローカル名を導入すること。