どうもこんばんわ。
最近ずっとこれ聞いてる
「偶然」で片付けたくない 運命にしたい
ゲームやってないけどCDだけ買った。!!!
本題
Material-UI
をやめて、Tailwind CSS
にしようと思います...
最近のAndroid
というか、Material 3
というかを真似てみました。
角を結構丸くしたり、リストとか。
移行前
移行前のmain ブランチ
のコードをmaterial_ui
ブランチに切ってあります。
https://github.com/takusan23/ziyuutyou-next/tree/material_ui
引き続き参照可能です。
Tailwind CSS
賛否両論。わたしはすき、
というかWebフロント
よく知らないので、Next.js
に入ってるやつ(いつの間にか選択できるようになったらしい)を大人しく使う。
なんで
時代はRSC ( React Server Components )
に突入したらしい。ブラウザ側で実行されるJavaScript
を減らす時代がやってきた!!!
理由ですが...
CSS
絶対書きたくないからMaterial-UI
入れたんだけど、Tailwind CSS
が結構良さそうだった
- これなら書きたい
- なんか
.css
書きたくないし...
scoped
なcss
とかvue ?
にあった気がするけどあんまり使いこなせなかった...(私のせい
- よく使うやつがすぐ使える
flex-row
/flex-col
とか
- コンポーネントごとに区切ってるのでそんなに
class
長くてもそこまで、、、って感じな気がする
- ダークモードや、レスポンシブデザイン、テーマ機能がある
- 現状使っているので必要
- この辺も
CSS
をそのまま書くのは、、、うーんやりたくないかなあ
- 賛否両論あるけど特に困ってない!!!
以上です。
あと、Tailwind CSS
関係なく、ブログ(静的サイト)なので、リッチな UI より読み込みが早いほうが良いかなあってのもあります。
(ゼロランタイム CSS
とかいうやつ)
ただ、ここでRSC
やTailwind CSS
に賭けて良いのかは分からない、、、Webフロントエンド
ってなんか流行の移り変わりが早すぎる。
ちなみにApp Router
で動くMaterial-UI
のサポートは入ったらしい。これでひたすら"use client"
しなくても済むのかな?
https://github.com/mui/material-ui/releases/tag/v5.14.0
あとは、移行したときに良いなと思ったこととかをつらつらと...
良かった点
サーバーコンポーネント、クライアントコンポーネント どっちでも書ける
(最終的にはCSS
が吐き出される?)のが良さそう
クライアントコンポーネント
しか無いなら他のスタイリングを選んだほうがいいのか・・・も?
ただ、ぶっちゃけサーバーコンポーネント
もよくわからない、、、けど面白そうだし試している
リセット CSS
https://tailwindcss.com/docs/preflight
これ、h1
、h2
、、の大きさはすべて同じ大きさに揃えられます。
ul
やp
にmargin
がデフォルトでかかっていません。
aタグ
の色もかかってません!!!
aタグ
だけはリセットされないようにするため、なんか初期値に戻せ!みたいなCSS
を書きました。
大人しくスタイリングしても良かったかもしれない。
VSCode に Tailwind CSS 拡張機能を入れよう
これです
https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss
快適すぎて草、クラス名の補充や、自前で定義したプライマリカラーとかの色まで見れるの強すぎやろ
最終的なCSS
も見れる。すごい
peer-checked が便利
マテリアルコンポーネントにもあるSwitch()
を作ろうと思います。
スイッチを押したらつまみ(Thumb
)を右側へ移動するためのJavaScript
を書こうと思ってたんですけど、これJS
なしで再現できるんですね!!
以下が該当のコードですが、チェック状態を保持しておくための<input>
をユーザーに見えない形で置いておきます。
<label>
で囲っているので、囲っている<div>
や<span>
を押したときにも、<input>
にチェックが入ります(上記の通り見えませんが)
で、ここからです。
<input>
の後の要素のクラス名にpeer-checked:
を先頭につけると、その<input>
にチェックが付いたかどうかでスタイルを切り替えることが出来ます。
この方法を使い、チェックがついてないときは左へjustify-start
、<input>
にチェックが入ったら右へpeer-checked:justify-end
することが出来ます。CSS
だけで完結!!!
いや、公式の説明のがわかりやすかったわ、JS
なしで表示・非表示を切り替えてる
https://tailwindcss.com/docs/hover-focus-and-other-states#styling-based-on-sibling-state
つまずく点
動的な値はできない
つまり、こういう文字列に変数を埋め込むとかは出来ないです。
もし、状態によって切り替えたい場合は、完全なクラス名としてソースコードに記述する必要があります。
というのも、Tailwind CSS
は文字列を探してCSS
を生成する、結構シンプルな仕組みで動いているらしい?ので、文字列として存在しないといけないんですよね。
https://tailwindcss.com/docs/content-configuration#class-detection-in-depth
動的な値は取れないので、あらかじめいくつかパターンを用意しておく必要があるわけですね。
(Kotlin
のwhen
というか式ほしい...このためだけにlet
にするのなんか負けた感あってくやしい)
Material-UIみたいに Ripple Effect みたいなのはなくなっちゃった
押してる!!!感はなくなっちゃった
アイコン
マテリアルアイコンは自分でsvg
を持ってくる必要があります、もしくはnpm
からよしなにライブラリを入れるかです。
そのほか
Mastodon / Misskey シェアボタン を置いた
Twitter
の代わりにMastodon / Misskey
でシェアできるボタンを置きました。
TweetDeck
なくなってからTwitter
あんまり見なくなっちゃった、、、
Misskey
もMastodon
も以下のようなURL
でそれぞれのインスタンスの共有画面を出せるので、それを使っています。
https://{serverName}/share?text={シェアしたい文字}
TypeScript / JavaScript
でやる場合はこんな感じです多分
Nuxt.js
のときは置いてたんですが、、、、Next.js
に移行した際にTwitter
に置き換えちゃったんですよね。
Twitter
改悪によりMastodon / Misskey シェア
再実装です
(奇跡的にNuxt.js
のときのビルド成果物が残ってたので起動してみた)
本番に投入する
きたきた
今回も差分大きいというか影響大きいのでPull Request
作ってみました。
https://github.com/takusan23/ziyuutyou-next/pull/2
差分ですが、npm install
した時とかに自動で更新されるpackage-lock.json
とかも差分に入ってしまったので、私が書き足したのはそこまでではないと思う・・・
まーじします!うおおおお!
GitHub Actions
が終わるのを見守ります
Material-UI → Tailwind CSS
ま、まぁ、、あんまりMaterial-UI
のコンポーネント使ってたわけじゃないので、もっといろんなコンポーネントを使ってればもっと増えてたのかも
Material-UI
Tailwind CSS
おわりに
Netlify
だと日本からのアクセスが遅いので、つぎはホスティングサービスを移行したい・・!