Skip to Content
WebHTML모던 HTML11. 문의 폼, 현대적인 입력 타입으로 다시 만들기

이번 편의 결과물: contact.html 폼의 입력이 새 타입과 모바일 최적화 속성으로 바뀌고, 자동완성이 채워집니다. 다루는 개념: email/url/tel/date/range 등 입력 타입의 실전 UX, inputmode로 모바일 키보드 제어, enterkeyhint, autocomplete 토큰 체계

이 편에서 만드는 파일

web-practice/portfolio/ └─ contact.html ~ (폼 입력에 새 타입·inputmode·autocomplete 적용, 필드 2개 추가)

개념 정리

입력 타입

전통 폼(html_fundamentals)에서는 대부분 text를 썼습니다. HTML5 이후 입력 목적에 맞는 타입을 쓰면 브라우저가 자체 검증과 UI를 대신해 줍니다.

타입용도브라우저가 해 주는 것
email이메일 주소@ 포함 여부 등 형식 검증
tel전화번호형식 검증은 없음(국가마다 달라서), 모바일에서 숫자 키패드만 도움
url웹 주소http(s):// 형식 검증
date날짜달력 UI 제공, 값은 YYYY-MM-DD
range좁은 범위의 수치슬라이더 UI, min/max/step 필요
color색상 선택색상 선택기 UI, 값은 #rrggbb

tel은 형식이 나라마다 달라 브라우저가 강제로 검증하지 않습니다. 자릿수·형식을 검사하려면 pattern 속성을 직접 지정해야 합니다.

inputmode와 enterkeyhint

type이 키보드 종류까지 항상 바꿔주지는 않습니다(text에 숫자만 받고 싶을 때 등). inputmode는 모바일 가상 키보드의 종류만 따로 지정합니다.

inputmode 값키보드
numeric숫자만
tel전화번호 키패드
email@가 강조된 키보드
url/가 강조된 키보드

enterkeyhint는 가상 키보드의 엔터 키 라벨을 바꿉니다(send, search, next, done 등). 폼의 마지막 입력에 enterkeyhint="send"를 주면 키보드 엔터 키에 “전송”이 표시됩니다.

autocomplete 토큰

autocomplete는 브라우저가 저장해 둔 값을 채워 넣을 필드를 알려줍니다. 값은 정해진 토큰을 씁니다.

토큰채우는 값
name이름
email이메일
tel전화번호
url웹 주소
off자동완성 끄기(민감한 값 등)

토큰을 정확히 쓰면 사용자가 이전에 입력한 값을 다시 타이핑하지 않아도 됩니다.

실습

1. 파일 열기

web-practice/portfolio/contact.html의 폼을 엽니다.

2. 코드 작성

기존 이름·이메일·문의 유형·메시지·동의 필드에 속성을 추가하고, tel·url 타입 필드 2개를 새로 추가합니다.

<!-- web-practice/portfolio/contact.html의 연락 폼 --> <form class="contact-form" novalidate> <div class="field"> <label for="name">이름</label> <input type="text" id="name" name="name" autocomplete="name" required /> </div> <div class="field"> <label for="email">이메일</label> <input type="email" id="email" name="email" inputmode="email" autocomplete="email" required /> <p class="help">답장을 받을 주소를 적어 주세요.</p> </div> <div class="field"> <label for="phone">전화번호(선택)</label> <input type="tel" id="phone" name="phone" inputmode="tel" autocomplete="tel" pattern="[0-9\-]{9,13}" placeholder="010-1234-5678" /> </div> <div class="field"> <label for="portfolio-url">참고 링크(선택)</label> <input type="url" id="portfolio-url" name="portfolioUrl" inputmode="url" autocomplete="url" placeholder="https://example.com" /> </div> <div class="field"> <label for="topic">문의 유형</label> <select id="topic" name="topic" autocomplete="off"> <option value="collab">협업 제안</option> <option value="hire">채용 제안</option> <option value="etc">기타</option> </select> </div> <div class="field"> <label for="message">메시지</label> <textarea id="message" name="message" minlength="10" enterkeyhint="send" required></textarea> <p class="help">프로젝트 내용이나 일정을 간단히 적어 주세요.</p> </div> <div class="field field-checkbox"> <input type="checkbox" id="agree" name="agree" required /> <label for="agree">개인정보 수집·이용에 동의합니다</label> </div> <button type="submit">보내기</button> </form>

novalidate를 폼에 추가했습니다. 다음 편에서 Constraint Validation API로 오류 메시지를 직접 그리기 전까지는 브라우저 기본 말풍선이 그대로 뜹니다. 지금 단계에서는 novalidate를 빼고 브라우저 기본 검증이 동작하는 상태로 먼저 확인합니다.

3. 실행

VS Code Live Server로 contact.html을 엽니다.

4. 확인

  • 스마트폰(또는 브라우저 개발자 도구의 기기 툴바)으로 열어 이메일·전화번호·URL 필드를 탭했을 때 각각 다른 키보드가 뜨는지 확인합니다.
  • 이름 필드에 이전에 입력한 값이 있으면 자동완성 목록에 뜨는지 확인합니다.
  • novalidate를 잠깐 지우고 이메일 필드에 abc처럼 @가 없는 값을 넣은 뒤 제출을 눌러 브라우저 기본 오류 말풍선이 뜨는지 확인합니다. 확인 후 novalidate는 다시 남겨 둡니다(다음 편에서 사용).

직접 해보기

  1. 문의 유형을 select 대신 라디오 버튼 3개로 바꾸면 autocomplete 값을 어떻게 지정해야 할지 생각해 보세요.

답 보기

문의 유형처럼 사이트마다 의미가 다른 값에는 표준 토큰이 없으므로 autocomplete="off"를 유지합니다. 라디오 버튼으로 바꿔도 각 input[type=radio]name="topic"을 공유시키고 autocomplete는 그대로 off를 둡니다.

  1. 전화번호 필드에 하이픈 없이 숫자만 11자리로 입력하게 강제하려면 pattern을 어떻게 바꿀지 써 보세요.

답 보기

pattern="[0-9]{11}"로 바꾸면 숫자만 정확히 11자리일 때만 유효합니다. 사용자에게 placeholder="01012345678"로 형식을 미리 알려주면 혼란이 줄어듭니다.

자주 하는 실수

증상원인고치는 법
모바일에서 이메일 입력에 일반 키보드가 뜸type="email"만 믿고 inputmode를 안 씀(구형 브라우저)inputmode="email"을 함께 지정
전화번호에 자유 형식이 그대로 통과됨tel은 브라우저가 형식을 검증하지 않음pattern으로 직접 형식 지정
이전에 입력한 값이 자동으로 안 채워짐autocomplete 토큰 오타 또는 off표준 토큰(name, email, tel 등) 정확히 입력
제출 시 브라우저 말풍선이 안 뜸(의도치 않게)novalidate를 실습 확인 없이 그대로 둠기본 검증 동작을 먼저 확인한 뒤 다음 편에서 커스텀 메시지로 교체

확인 문제

문제 14지선다
tel 타입 입력에 특정 자릿수 형식을 강제하려면 추가해야 하는 속성은
문제 24지선다
모바일 가상 키보드의 엔터 키에 전송이라는 라벨을 표시하려면
문제 34지선다
사이트 고유의 의미를 가진 select 필드(예: 문의 유형)에 적합한 autocomplete 값은

참고 자료

Last updated on