UIライブラリめも

スタイルエンジン
# styled-components
return (
<BaseText>基本のスタイリング</BaseText>
)
const BaseText = styled.p`
background-color: #eee;
font-size: 20px;
padding: 15px;
`;
# emotion
return (
<p css={base}>CSS Props(オブジェクト記法)</p>
);
const base = css({
backgroundColor: "#eee",
fontSize: "20px",
padding: "15px"
});
styled-cpmponents: おそらく一番使われている CSS in JS のライブラリで、情報量が多い

参照元: https://tayori.com/blog/material-design/
マテリアルデザイン
2014年にGoogleが提唱したデザインのこと。明確なガイドラインが定められたデザインであり、「見やすく、直感的に操作できるWebページ・サービス」を作ることを目的としています。
5つの特徴
- 現実世界の物理的法則を取り入れる
- 紙とインクの要素で組み立てる
- 色の数を少なく配色する
- 影を活用して立体感を作る
- 連続性のあるアニメーション

css-in-js
ゼロランタイムCSS-in-JS vs インラインスタイルで処理されるCSS-in-JS
だとどっちが良さそうなのだろうか(TPOによるだろうけど)

インラインスタイル
<p style="color: blue; font-size: 16px;">このテキストは青色で、フォントサイズが16pxです。</p>

css modules
/* styles.module.css */
.button {
background-color: #3498db;
color: white;
padding: 10px 20px;
}
// MyComponent.js
import React from 'react';
import styles from './styles.module.css';
const MyComponent = () => {
return (
<button className={styles.button}>Click Me</button>
);
}
export default MyComponent;
コンポーネントぽい、部品化されたcss

chakra, mantinなど、reactに依存したcss フレームワークはreactが何か変更が起きた時に弱い。
一方でtailwindはchakraやmantineなどと比較してreactに依存しておらず、reactが大きな変更を行った時に影響を受けにくいため、フレームワークとして息が長い可能性が高い。
tailwindを採用する2パターン
- デザインにこだわりがなく、最低限整っていればいい場合。デザイナー不在のプロジェクトなど、デザイン上の細かな要求が無いがとりあえず整えておきたいという場合は採用してもよいかもしれません。Bootstrap的な立ち位置のものが欲しい場合です。
- 逆に、デザインシステムをしっかりと整備しそれからの逸脱を防ぎたい場合。ただデザインがあるだけでなく、フロントエンドエンジニアまで巻き込んでデザインシステムを整備したいということが重要です。このようなユースケースではTailwind CSSのアプローチが適している可能性があります。
tailwindでcssつけられるようにしてコンポーネント欲しいならtailwind component framework的なの使えばいい説
tailwindがデザインシステム作ってガッツリやる時に使われるとあるけど、そういう時でもコンポーネントがあった方が楽だなあと思う時ありそうだけどなあ
逆にchakraやmantineが採用されるのはなあぜなあぜ?

ワシはUtility Propsが好きっぽい
Utility Propsという考え方
上記問題を解決したUIコンポーネントライブラリの1つにChakra UIがあります。
Chakra UIではスタイリングをUtility Propsとして直接渡すことができます。例えば先ほど例に挙げた> MenuBoxは以下の様に書くことができます。
<Box
display="flex"
flexDir="column"
justifyContent="center"
w={["340px", "600px"]}
/>
これであればいちいちコンポーネントの定義元に移動することなくスタイリングを確認することができるので快適に開発を進めることができます。Tailwind CSSにおけるUtility-Firstな思想と同じ様なものですね。

デザインシステム

utility first
.text-center { text-align: center;}みたいなクラスを用いてhtml書くこと
BEMぽくセマンティックなクラスつけるのではなくutility classつけて開発して、同じutility classがついたらコンポーネント化する。つまり、utility first, component second with no semantic class的な

css in js、cssをjsで書ける=変数が埋め込めたりプログラマブルになる