프로젝트를 하면서 리뷰 작성 input에 아래 사진과 같이 label로 글씨를 굵게 설정하고 placeholder에 위치한 요소에 글자를 입력하는 UI 디자인을 적용하기 위해 Next UI를 적용하기로 정했다. 이 라이브러리를 선택한 이유는 react-textarea-autosize 기반으로 자동으로 입력 내용을 늘어주기 때문에 선택하게 되었다.
textarea에 padding 값을 적용하면 placeholder 위치도 오른쪽으로 치우치는 문제가 있었다. tailwind로
plceholder:p-0
으로 적용을 시도했으나, 따로 placeholder 부분만 padding 값을 적용하지 못하는 상태였다. margin 역시 값이 적용되지 않는다.
TextareaAutoSize
는 react-textarea-autosize 라이브러리로 값을 입력하면 알아서 사이즈가 늘어나는 컴포넌트이다.
<div className='relative flex flex-col'>
<h3 className='absolute left-10 top-5 text-lg font-bold'>
리뷰를 작성해 주세요
</h3>
<TextareaAutosize
{...register('content')}
className='h-[356px] border outline-none resize-none placeholder:text-sm pt-10 px-8 placeholder:-px-8'
placeholder={`
🞄 책을 읽고 나서 어떤 기분이 들었나요?
🞄 이 책에서 가장 기억에 남는 장면이나 문장이 있었나요?
🞄 다른 사람들에게 이 책을 추천하고 싶다면, 어떤 이유인가요?
🞄 책 속에서 가장 공감한 내용은 무엇인가요?
🞄 아쉬웠던 점이 있다면 간단히 적어주세요.`}
minRows={13}
/>
</div>
실제로 값을 입력하면 입력되는 글자 배치가 맞지 않는 것을 확인할 수 있다.
next-ui에서 제공하는 Textarea
컴포넌트는 classNames를 통해 스타일링을 구체적으로 설정할 수 있다. 우선 제공하는 slot에 대해 알아보자.
- base: 정렬, 배치, 일반적인 모양을 처리하는 용도
- label: 텍스트 영역의 위, 안쪽 또는 왼쪽에 표시되는 레이블이다.
- inputWrapper: label (내부에 있는 경우)과 내부 래퍼(
innterWrapper
)를 감싸주는 용도- input: textarea 입력 요소
- description: 텍스트 영역에 대한 설명
- errorMessage: 텍스트 영역에 대한 오류 메세지
- headerWrapper: label과 clearButton을 감싸는 용도
AutoSize를 적용하려면 minRows
또는 maxRows
를 적용해주면 된다. input
에 padding을 적용하면 placeholder와 텍스트가 입력되는 위치와 동일해서 쉽게 해결할 수 있었다.
<Textarea
{...register('content')}
className='border outline-none placeholder:text-sm'
classNames={{
base: 'min-h-[356px] resize-y',
inputWrapper: 'min-h-[356px] p-5',
input: 'min-h-[208px] resize-none',
label: 'text-lg font-bold mb-4',
}}
label='리뷰를 작성해 주세요'
placeholder={` 🞄 책을 읽고 나서 어떤 기분이 들었나요?
🞄 이 책에서 가장 기억에 남는 장면이나 문장이 있었나요?
🞄 다른 사람들에게 이 책을 추천하고 싶다면, 어떤 이유인가요?
🞄 책 속에서 가장 공감한 내용은 무엇인가요?
🞄 아쉬웠던 점이 있다면 간단히 적어주세요.`}
minRows={13}
/>
textarea가 자동으로 사이즈가 늘어나면서 스크롤 바 스타일을 global.css를 통해 스타일을 적용해 주었다.
textarea::-webkit-scrollbar {
@apply w-2;
}
textarea::-webkit-scrollbar-track {
@apply bg-customGrey-100 rounded-sm;
}
textarea::-webkit-scrollbar-thumb {
@apply bg-customGrey-400 rounded-sm cursor-auto;
}
textarea::-webkit-scrollbar-thumb:hover {
@apply bg-customGrey-600;
}
원하던 리뷰 작성 UI로 수정이 된 모습이다.
리뷰를 작성할 때도 원하는 위치에 글씨가 보이는 것을 확인할 수 있다.
커스텀한 스크롤 바도 잘 적용된 모습이다.
🔗 Reference
NextUI-Textarea 공식문서