Menu

HTML textarea: rows, 크기 조절, maxlength, 기본 텍스트

<textarea>로 여러 줄 텍스트 필드를 만드는 방법이에요. rows와 cols, 태그 사이의 기본 텍스트, 크기 조절과 자동으로 늘어나기, 글자 수 카운터와 maxlength, 제출된 텍스트의 줄바꿈, 스타일 꾸미기를 알아봐요.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

textarea 만드는 법

<textarea>는 여러 줄을 입력하는 텍스트 필드예요. 메시지, 댓글, 설명 같은 데 써요. rows는 보이는 높이를 줄 수로 정해요. 몇 줄 입력하고 Send를 눌러 보세요.

<input>과 다른 점이 두 가지예요. textarea는 닫는 태그가 필요하고, 시작 텍스트는 value 속성이 아니라 태그 사이에 들어가요. name과 함께 텍스트가 값으로 전송되고, 줄바꿈도 포함돼요.

textarea 속성

속성하는 일
name텍스트를 보낼 때 쓰는 키
rows보이는 높이(줄 수, 기본값 2)
cols보이는 너비(글자 수, 기본값 20). 보통 CSS width가 더 나아요
placeholder비어 있을 때 보이는 힌트
maxlength, minlength글자 수 제한
required비어 있으면 안 됨
readonly선택하고 복사할 수는 있지만 편집은 안 됨. 여전히 전송됨
disabled쓸 수 없고 전송되지 않음
wrapsoft(기본값) 또는 hard, 아래 참고
spellchecktrue 또는 false

기본 텍스트는 태그 사이에 들어가요

<textarea>와 </textarea> 사이의 모든 것이 쓴 그대로 시작 텍스트가 돼요. 공백, 탭, 줄바꿈까지 포함해서요. 여는 태그 바로 뒤의 줄바꿈 하나만 무시돼요. 그래서 들여쓰기가 함정이 돼요.

두 번째 textarea는 공백 네 칸으로 시작하고 줄바꿈과 공백 두 칸으로 끝나서, 독자가 모두 지워야 해요. 기본 텍스트는 태그에 딱 붙여 쓰세요.

textarea 안의 HTML은 렌더링되지 않아요. 태그 사이의 <b>hi</b>는 글자 그대로 보여요.

너비, 크기 조절, 자동으로 늘어나기

브라우저는 독자가 모서리를 끌어 textarea 크기를 바꿀 수 있게 해요. CSS resize로 이걸 제한하고, box-sizing: border-box와 함께 쓴 width: 100%로 컨테이너를 정확히 채울 수 있어요.

마지막 textarea는 키를 누를 때마다 높이를 초기화한 뒤 scrollHeight(내용과 padding의 높이)에 테두리를 더한 값으로 설정해요. 여러 줄을 입력해 보세요. 스크롤바가 절대 나타나지 않아요. resize: vertical이 가장 친절한 기본값이에요. 긴 답변에는 공간이 생기고, 누구도 필드를 레이아웃보다 넓게 끌 수 없어요.

Chromium 계열 브라우저는 field-sizing: content로 CSS만으로도 자동으로 늘어나게 할 수 있어요. 지원하지 않는 브라우저는 그 줄을 무시하고 원래 크기를 유지하니 추가해도 안전하지만, 모든 독자에게 늘어나는 상자를 주려면 스크립트를 남겨 두세요.

maxlength와 글자 수 카운터

maxlength는 정해진 글자 수에서 입력을 멈춰요. 그것만으로는 아무 경고도 없어서, 독자는 입력이 안 될 때에야 알아채요. 카운터가 그걸 해결해요.

aria-describedby는 스크린 리더가 필드와 함께 카운터를 읽게 하고, aria-live="polite"는 키 입력 사이에 카운터의 변화를 알려 줘요. maxlength는 브라우저에서만 강제되니 서버에서도 길이를 확인해야 해요.

제출된 텍스트의 줄바꿈

독자가 넣은 줄바꿈은 텍스트와 함께 전송돼요. 제출 데이터에서 각 줄바꿈은 캐리지 리턴과 라인 피드 쌍(URL 인코딩된 폼에서는 %0D%0A)이 되는데, 대부분의 서버가 기대하는 형태예요. 나중에 페이지에서 줄바꿈과 함께 보여 주려면 출력할 때 <br>로 바꾸거나 요소에 white-space: pre-line을 주세요.

wrap="hard"(cols가 필요해요)는 한발 더 나아가, 화면에서 텍스트가 줄바꿈된 곳에도 줄바꿈을 넣어서 서버가 cols 글자보다 길지 않은 줄을 받게 해요. 기본값 wrap="soft"는 독자가 입력한 줄바꿈만 보내요.

textarea 꾸미기

Chrome과 Firefox는 textarea에 약 13px의 고정폭 글꼴을 줘서 textarea가 어색해 보이는 경우가 많아요. font: inherit로 고치세요. 테두리를 바꾼다면 포커스 스타일도 보이게 유지하세요.

placeholder 텍스트도 읽을 수 있는 명암비를 갖춰야 해요. 많은 디자인에서 쓰는 연한 회색은 읽기 어려워요. 그리고 다른 필드와 마찬가지로 placeholder는 라벨이 아니에요. 독자가 입력하는 순간 사라져요. 라벨은 HTML label에서 다뤄요.

자주 하는 실수

  • <textarea value="...">. value 속성은 없어요. 텍스트를 태그 사이에 넣으세요.
  • HTML과 함께 기본 텍스트도 들여씀. 공백이 값의 일부가 돼요.
  • 스스로 닫는 <textarea />를 씀. 빈 요소가 아니라서, </textarea>가 없으면 페이지의 나머지가 텍스트로 그 안에 삼켜져요.
  • font: inherit가 없음. 필드가 작은 고정폭 글꼴을 써요.
  • 작은 고정 높이에 resize: none을 줌. 긴 답변이 조그만 스크롤 상자에 갇혀요.
  • maxlength에만 의존함. 서버에서도 길이를 검사하세요.

자주 묻는 질문

HTML에서 textarea는 어떻게 만드나요?

폼 안에 <label>과 함께 <textarea name="message" rows="4"></textarea>를 쓰세요. <input>과 달리 닫는 태그가 있고, 태그 사이의 내용이 시작 텍스트가 돼요.

textarea의 기본값은 어떻게 정하나요?

태그 사이에 텍스트를 넣으세요. <textarea name="bio">Hello</textarea>처럼요. HTML에서 textarea에는 value 속성이 없어요. JavaScript에서는 textarea.value를 읽고 설정하세요.

textarea 크기 조절을 막으려면 어떻게 하나요?

CSS에서 resize: none을 지정하세요. 보통은 resize: vertical이 더 친절해요. 긴 글을 쓸 때 높이는 늘릴 수 있지만, 옆으로 끌어서 레이아웃을 깨뜨릴 수는 없어요.

textarea의 글자 수를 제한하려면 어떻게 하나요?

maxlength="280"을 추가하세요. 그 길이에서 브라우저가 입력을 더 받지 않아요. 남은 글자 수를 알 수 있도록 input 이벤트로 업데이트되는 카운터를 옆에 보여 주고, 서버에서도 길이를 확인하세요.

textarea는 왜 글꼴이 다르게 나오나요?

Chrome과 Firefox는 textarea에 기본으로 약 13px의 고정폭 글꼴을 줘요. 페이지의 나머지 부분과 맞추려면 font: inherit를 추가하세요.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기