家計簿アプリを作る #16:UI全体の見直し
家計簡アプリ作成シリーズの第16回です。機能実装が一通り完了したので、全ページの UI を見直します。
方針
UI はこだわり始めると際限がないため、機能実装をすべて終えてからまとめて見直す方針としていました。今回はその仕上げです。対象ページは以下の5つです。
- ログインページ(
/login) - サインアップページ(
/signup) - 一覧ページ(
/) - 登録フォーム(
/transactions/new) - 編集フォーム(
/transactions/[id]/edit)
ログイン・サインアップページ
修正内容
- ラベル・ボタン・リンクを日本語化
- placeholder をサンプル値から適切な値に変更
- 画面中央に配置
画面中央に配置する方法
外側の <div> に min-h-screen・items-center・justify-center を追加します。
<div class="flex flex-col items-center justify-center min-h-screen px-6 py-12">
min-h-screen で画面の高さいっぱいにコンテナを広げ、justify-center で縦方向の中央に配置されます。
サインアップページのバグ修正
名前フィールドの <label> の for 属性が "email" になっていました。"name" に修正します。
<!-- ❌ -->
<label for="email">名前</label>
<input id="name" name="name" ... />
<!-- ✅ -->
<label for="name">名前</label>
<input id="name" name="name" ... />
また type="name" は HTML の正式な属性値ではないため、type="text" に修正しました。
一覧ページ
修正内容
typeの表示をincome/expenseから「収入」/「支出」に変更- 金額にカンマ区切りを追加(
toLocaleString()) - 削除・編集ボタンにスタイルを適用
- 登録リンクを
<button>の中に<a>を入れる形から<a>に直接スタイルを適用する形に修正 - 登録・ログアウトボタンのレイアウトを改善
type の日本語表示
{transaction.type === "income" ? "収入" : "支出"}
<button> の中に <a> を入れるのは NG
<!-- ❌ HTML 的に不正 -->
<button type="button">
<a href="...">登録</a>
</button>
<!-- ✅ <a> に直接スタイルを適用する -->
<a href="..." class="text-white bg-brand ...">登録</a>
登録・ログアウトボタンのレイアウト
justify-between で登録ボタンを左、ログアウトボタンを右に配置しました。
<div class="flex justify-between items-center w-full">
<a href="...">登録</a>
<form method="POST" action="?/logout" use:enhance>
<button type="submit">ログアウト</button>
</form>
</div>
登録・編集フォーム
- Submit ボタンのラベルを「登録」に変更(編集フォームはすでに「更新」になっていた)
- スタイルは他ページと統一済みのため変更なし
まとめ
| ページ | 主な修正内容 |
|---|---|
| ログイン | 日本語化・中央配置 |
| サインアップ | 日本語化・中央配置・for 属性バグ修正・type="text" 修正 |
| 一覧 | type 日本語化・金額カンマ区切り・ボタンスタイル・レイアウト改善 |
| 登録フォーム | ボタンラベル日本語化 |
| 編集フォーム | 変更なし(スタイル統一済み) |