폰 기본 키보드는 아이한테 불편하다.
- 숫자 키보드로 전환해야 함
- 키가 작음
- 불필요한 버튼 많음
직접 키패드 만들자.
레이아웃
전화기 스타일 3x4:
[1] [2] [3]
[4] [5] [6]
[7] [8] [9]
[⌫] [0] [제출]
구현
<div className="grid grid-cols-3 gap-2 max-w-64 mx-auto">
{[1, 2, 3, 4, 5, 6, 7, 8, 9].map(num => (
<button
key={num}
onClick={() => setUserAnswer(prev => String(prev) + num)}
className="py-4 text-2xl font-bold bg-white border-2 border-gray-200 rounded-xl btn-3d"
>
{num}
</button>
))}
{/* 지우기 */}
<button
onClick={() => setUserAnswer(prev => String(prev).slice(0, -1))}
className="py-4 text-xl font-bold bg-rose-50 border-2 border-rose-200 text-rose-500 rounded-xl btn-3d"
>
⌫
</button>
{/* 0 */}
<button
onClick={() => setUserAnswer(prev => String(prev) + '0')}
className="py-4 text-2xl font-bold bg-white border-2 border-gray-200 rounded-xl btn-3d"
>
0
</button>
{/* 제출 */}
<button
onClick={checkAnswer}
disabled={!userAnswer}
className="py-4 text-sm font-bold bg-gradient-to-r from-emerald-400 to-green-500 text-white rounded-xl btn-3d disabled:opacity-50"
>
제출
</button>
</div>
터치 최적화
버튼 크기 충분히 크게:
py-4 /* padding-y: 1rem = 16px */
손가락으로 누르기 편함.
시각적 피드백
누르면 반응:
.btn-3d {
box-shadow: 0 4px 0 rgba(0,0,0,0.2);
transition: all 0.1s ease;
}
.btn-3d:active {
transform: translateY(3px);
box-shadow: 0 1px 0 rgba(0,0,0,0.2);
}
입력 표시
세로 계산식처럼:
<div className="bg-amber-50 border-4 border-amber-200 rounded-2xl p-4">
<div className="text-right font-mono">
<div className="text-4xl font-bold">
{String(problem.num1).padStart(4, '\u00A0')}
</div>
<div className="text-4xl font-bold flex items-center justify-end">
<span className="text-orange-500 mr-2">{problem.op}</span>
{String(problem.num2).padStart(4, '\u00A0')}
</div>
<div className="border-t-4 border-gray-800 mt-2 pt-2">
<div className="text-4xl font-bold text-blue-500">
{userAnswer ? String(userAnswer).padStart(4, '\u00A0') : '\u00A0\u00A0\u00A0?'}
</div>
</div>
</div>
</div>
7
+ 8
───
15 ← 내 답
학교에서 배운 방식 그대로.
숫자 스피너 제거
input type=“number” 쓰면 스피너 나옴. 거슬림.
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
input[type="number"] {
-moz-appearance: textfield;
}
근데 우린 input 안 쓰고 키패드로 직접 입력해서 상관없음.
다음 글에서 타이머 구현.