はじめに
ゆかっしゅです。
2021年に事務職からデザイナー/コーダーにジョブチェンジをし、現在はフロントエンドエンジニアにスキルアップするべく、モダンフロントエンドを学習しています。
ReactやTypeScriptの基礎学習は終了したのに、なかなか0から自分だけでアプリを作れないので手を動かすべく「Reactアプリ100本ノック」 に挑戦してみようと思います。
Reactアプリ100本ノックルール
- 主要なライブラリやフレームワークはReactである必要がありますが、その他のツールやライブラリ(例: Redux, Next.js, Styled Componentsなど)を組み合わせて使用することは自由
- TypeScriptを利用する
- 要件をみたせばデザインなどは自由
06. Profile
問題
プロフィールカードを生成できるサービスを作成します
目的
入力フィールドの管理を行い、状態の更新と状態を使ったUIの更新を学びます
達成条件
機能的なプロフィールカード:
- ユーザーが名前、誕生日、電話番号を入力し、プロフィール写真をアップロードできる
- アップロードされた画像がプレビューとして表示される
- ユーザーが生成したプロフィールカードをPNG形式でダウンロードできる
実際に解いてみた
利用技術
React(19.0.0)
TypeScript(5.0)
Next.js(15.3.1)
Tailwindcss(4.0)
jotai(2.12.3)
Vercel
html2canvas(1.4.1)
解答時間:2時間
ボタンを押すとプロフィールCardの画像をダウンロードするところの実装がわかりませんでした。
html2canvas
というJavaScript
のライブラリを使用しました。
html2canvas
を使用すればhtml
の要素をキャンバスに描画して、画像として保存ができます。
しかしhtml2canvas
を扱う際、Tailwindcss
を併用しているとエラーが出るので注意が必要です。
(後ほど詳しく記載します)
リンク
html2canvasとTailwindcssの衝突エラー
Error:Attempting to parse an unsupported color function "oklch"
プロフィールカードの画像をダウンロードしようとボタンを押すとこのようなエラーが出ました。
oklch
がサポートされてないって雰囲気だけどそもそもoklch
ってなんぞ??と思ったので調べてみました。
oklch(オーケールチ)
2023年以降CSSに導入された新しい色指定方法の一つみたいです。
rgb
とかHSL
とかと同じやつですね。
Tailwind CSS
ではv4.0からrgb
ではなく、このoklch
でカラー指定されているようです。
html2canvas
はこのoklch
のカラー指定には対応しておらずエラーが出てしまったみたいです。
oklch
の詳細に関してはこちら
https://blog.nasbi.jp/programming/frontend/css/good-looking-color-oklch/
エラー解決方法
画像で保存する部分の色指定に関してはTailwind CSS
ではなくインラインスタイル等ほかの方法でCSSを記載するとエラーが解消されました。