
우리는 웹에서 폼을 자주 볼 수 있다. 한 페이지 안에서도 여러 가지 폼이 사용된다. 아이디나 비밀번호를 입력하거나 로그인 버튼, 회원 가입 창 등 사용자가 웹 사이트로 정보를 보낼 수 있는 요소들을 폼이라고 한다.
사용자가 아이디와 비밀번호 정보를 입력하고 [로그인] 버튼을 클릭하면 사용자가 입력한 내용이 웹 서버로 보내진다. 그럼 서버는 자신이 가지고 있는 사용자 데이터베이스를 뒤져 사용자가 보내 온 아이디와 비밀번호가 서로 일치하는 정보가 무엇인지 여부를 확인하고 그 결과를 브라우저에게 보낸다. 이런 폼과 관련된 대부분의 작업은 모두 데이터베이스를 기반으로 한다. 따라서 텍스트 상자나 버튼 같은 폼의 형태를 만드는 것은 HTML 태그를 사용하고 그 폼에 입력된 정보들을 처리하는 것은 서버 프로그래밍을 사용한다.
우리는 프론트엔드 개발자가 되어 볼 것이기 때문에 서버 프로그래밍에 대해선 다뤄보지 않을 것이다. 우리는 폼을 만드는 태그들에 대해 살펴보자.
<form> 태그는 폼을 만드는 가장 기본적인 태그로 <form> 태그와 </form> 태그 사이에 여러 폼 요소와 관련된 태그를 넣습니다.
<form action="server.php" method="post"> 여러 폼 요소 </form>
<input> 태그를 사용하여 만들 수 있는 폼 요소가 상당히 많은데 그것은 type 속성을 이용해 구분한다.
<input type="text">
<input type="checkbox">
type 속성에 text 유형을 넣었을 경우 한 줄짜리 텍스트를 입력하는 필드가 만들어지고, checkbox 속성을 넣었을 경우 체크박스가 삽입된다.
폼을 만들다 보면 똑같은 폼 요소가 여러 번 사용된다.
이렇게 여러 번 사용된 폼 요소를 구분하기 위해 사용하는 것이 id 속성이다.
id를 지정해 놓으면 <label> 태그를 이용해 캡션을 붙일 수 있을 뿐만 아니라 나중에 배울 CSS를 이용해 각 요소마다 다른 형태로 꾸밀 수도 있다.
<input type="text" id="user-name" size="10">
<input type="text" id="address" size="60">
<input type="hidden" name="이름" value="서버로 넘길 값">
<input type="text">
<input type="search">
<input type="submit" value="버튼 이름">
<input type="tel">
<input type="url">
<input type="email">
<input type="password">
<input type="number" min="최솟값" max="최댓값" value="몇 개씩 증감?">
<input type="range" min="최솟값" max="최댓값" value="몇 개씩 증감?">
<input type="color">
<input type="checkbox" name="이름" value="선택한 값을 서버로 알려줄 때 넘길 값, 필수 속성">
<input type="radio" name="이름" value="선택한 값을 서버로 알려줄 때 넘길 값, 필수 속성">
<input type="file">
<input type="submit">
<input type="image" src="경로" alt="대체 택스트">
<input type="reset">
<input type="button">
<label> 태그는 폼 요소에 레이블을 붙이기 위한 것이다. 레이블이란 입력 창 옆에 '아이디'나 '비밀번호'처럼 붙여 놓은 텍스트를 말한다. <label> 태그를 사용하면 폼 요소와 레이블 텍스트가 서로 연결되어 있다는 것을 브라우저가 알 수 있다.
<label> 레이블 <input ...> </label>
<label for="id 이름">
<input id="id 이름">
</label>
스마트폰처럼 화면이 작인 기기에서 라디어 보튼이나 체크박스를 정확하게 터치하는 것은 여간 쉬운 일이 아니다.
그럴 때 <label> 태그를 이용해 라디오 버튼이나 체크박스에 라벨을 연결해 놓았다면 텍스트만 터치해도 라디오 버튼이나 체크 박스가 선택되도록 할 수 있다. 물론 이 방법은 작은 버튼이나 박스를 정확히 누르지 않아도 되므로 마우스를 사용하는 PC에서도 편리하다.
폼 요소를 그룹으로 묶을 때 사용하는 태그들이다.
하나의 폼 안에서 여러 구역을 나누어 표시하려고 할 때 이 두 태그를 사용한다.
<fieldset> 태그는 <fieldset>과 </fieldset> 태그 사이의 폼들을 하나의 영역으로 묶고 외곽선을 그려준다.
<legend> 태그는 <fieldset> 태그로 묶은 그룹에 제목을 붙여준다.
<fieldset>
<legend> 그룹 제목 </legend>
<ul>
<li>
<label ...> ... </label>
<input ...>
</li>
<li>
<label ...> ... </label>
<input ...>
</li>
</ul>
</fieldset>
사용자가 내용을 입력하는 것이 아니라 여러 옵션 중에서 선택하도록 하고 싶을 때 드롭다운 목록을 사용한다.
드롭다운 목록은 <select>와 <option>을 사용해서 표시한다. <select>로 드롭다운의 목록의 시작과 끝을 표시하고 그 안에 <option> 태그를 사용해 원하는 항목들을 추가한다. <option> 태그의 value 속성을 이용하여 서버로 넘겨주기 위한 값을 지정한다.
<select>
<option value="선택한 값을 서버로 알려줄 때 넘길 값"> 내용 </option>
<option value="선택한 값을 서버로 알려줄 때 넘길 값"> 내용 </option>
<option value="선택한 값을 서버로 알려줄 때 넘길 값"> 내용 </option>
</select>
드롭다운 목록에서 여러 항목들을 몇 가지 그룹으로 묶어야 할 경우 이 태그를 사용한다.
<optgroup> 태그를 사용할 때에는 label 속성을 사용해 그룹의 제목을 붙인다.
<select id="아이디">
<optgroup label="제목1">
<option value="선택한 값을 서버로 알려줄 때 넘길 값"> 내용 </option>
<option value="선택한 값을 서버로 알려줄 때 넘길 값"> 내용 </option>
<option value="선택한 값을 서버로 알려줄 때 넘길 값"> 내용 </option>
</optgroup>
<optgroup label="제목2">
<option value="선택한 값을 서버로 알려줄 때 넘길 값"> 내용 </option>
<option value="선택한 값을 서버로 알려줄 때 넘길 값"> 내용 </option>
<option value="선택한 값을 서버로 알려줄 때 넘길 값"> 내용 </option>
<option value="선택한 값을 서버로 알려줄 때 넘길 값"> 내용 </option>
<option value="선택한 값을 서버로 알려줄 때 넘길 값"> 내용 </option>
</optgroup>
</select>
여러 줄 입력하는 텍스트 영역을 만들 때 사용하는 태그이다.
<textarea> 태그에서는 너비 크기를 지정하는 cols 속성과 화면에 몇 줄을 표시할지 지정하는 rows 속성을 사용한다.
<textarea name="text" cols="60" rows="5" placeholder="테스트용">