Get startedFoundationsComponentsPatternsRules

Textfield

텍스트 필드는 한 줄짜리 텍스트를 입력하거나 고칠 수 있는 입력 요소예요.

설치

pnpm dlx shadcn@latest add https://rebar.conmarket-landing.workers.dev/r/steel/textfield.json

Examples

Appearance

standard 가 기본이에요. subtle 은 평소에는 투명하다가 마우스를 올리거나 포커스하면 테두리와 배경이 나타나요. none 은 필드 스타일을 모두 없애므로 접근 가능한 상호작용을 직접 챙겨야 해요.

Appearance기본HoverFocus
standardborder.input 테두리 + background.inputbackground.input.hoveredborder.focused 2px + background.input.pressed
subtle투명border.input + background.input.hoveredstandard 와 같아요
none투명, 테두리 없음변화 없음변화 없음

Compact

isCompact 를 주면 높이가 40px 에서 32px 로 줄어요. 표나 툴바처럼 정보 밀도가 높은 곳에 써요.

States

비활성(isDisabled), 읽기 전용(isReadOnly), 오류(isInvalid), 고정폭 글꼴(isMonospaced) 상태가 있어요. 오류 상태는 border.danger 테두리로 보여주고, 포커스하면 다시 border.focused 로 바뀌어요. placeholder 는 대비를 높인 text.subtle 색이고, 비활성이면 text.disabled 예요. 테두리·배경 색은 150ms(motion.input) 동안 부드럽게 바뀌는데, 비활성·읽기 전용 필드에는 전환이 없어요.

Elements before and after input

elemBeforeInput, elemAfterInput 으로 입력 앞뒤에 아이콘이나 단위를 붙여요. 컨테이너 어디를 눌러도 입력에 포커스가 가요.

Width

width 로 최대 너비를 정해요. xsmall(80px) · small(160px) · medium(240px) · large(320px) · xlarge(480px) 또는 숫자(px)를 쓸 수 있고, 주지 않으면 부모 너비를 채워요.

Text field in a form

Form 의 Field 안에 넣으면 라벨·도움말·오류 메시지와 id, aria-* 가 자동으로 연결돼요.

Validation

Field 의 validate 로 포커스를 벗어날 때 값을 검사하고, 결과에 따라 오류 메시지나 확인 메시지를 보여줘요.

Usage guidelines

텍스트 필드는 사용자 이름, 이메일, URL, 짧은 설명처럼 한 줄로 끝나는 텍스트를 입력받을 때 써요. 주로 폼 안에 두지만 모달, 검색, 카드에서도 써요. 여러 줄이 필요하면 Text area 를 써요.

필드는 세 부분으로 이뤄져요.

  1. 라벨 — 어떤 정보를 넣어야 하는지 알려줘요. 입력 영역 바로 위, 왼쪽에 둬요.
  2. 입력 영역 — 사용자가 텍스트를 입력하는 곳이에요.
  3. 도움말 (선택) — 추가 설명이나 입력 형식을 알려줘요.
Do· 중요한 정보는 라벨과 도움말에
예시나 형식 안내는 도움말에 두어 입력한 뒤에도 계속 보이게 해요.
Don't· placeholder 로 안내하기
placeholder 는 입력을 시작하면 사라지고 스크린 리더가 읽지 않을 수 있어요. 검색 아이콘과 접근 가능한 라벨이 있는 검색 필드만 예외예요.
Do· 앞뒤에는 정적인 요소
elemBeforeInput/elemAfterInput 에는 아이콘·단위처럼 상호작용 없는 요소를 둬요.
Don't· 필드 안에 상호작용 요소 넣기
필드 안에 링크나 여러 버튼을 넣으면 포커스 흐름이 꼬여요.
  • 라벨은 짧고 분명하게 써요. 도움말은 꼭 필요할 때만 써요.
  • 글자 수 제한이 있으면 Form 의 CharacterCounter 로 남은 글자 수를 실시간으로 보여줘요.
  • 비활성 필드는 이유를 알기 어려워요. 가능하면 검증과 오류 메시지로 안내해요.

Accessibility

  • 모든 필드에는 눈에 보이는 라벨이 있어야 해요. Field 밖에서 쓴다면 Label 의 htmlFor 와 입력의 id 를 맞춰요.
  • 오류 상태는 aria-invalid 로 전달돼요. 직접 검증한다면 포커스를 벗어날 때(blur) 검사하고 aria-live 영역으로 오류를 알려줘요. Field 는 이 처리를 대신해 줘요.
  • 비활성 필드는 탭 순서에서 빠져요. 읽기 전용 필드는 포커스할 수 있고 값을 읽을 수 있어요.
  • 포커스하면 border.focused 색 2px 테두리(테두리 1px + 안쪽 그림자 1px)가 보여요.
  • 터치 기기의 좁은 화면(30rem 이하)에서는 iOS 자동 확대를 막으려고 글자 크기가 16px 로 커져요.

Props

Prop

Type

On this page