폼은 정보를 입력하는 영역 입니다. 로그인 화면에서 아이디와 비밀번호를 입력하는 것, 회원 가입할때 정보를 입력하는 약식 등은 모두 폼을 이용 합니다. 폼에 입력하고 제출(submit)하게 되면 데이터는 서버로 전송되고, 전송한 데이터는 웹 서버가 처리하며, 처리 후 로그인 결과 화면 같은 다른 웹페이지를 클라이언트에 전송 합니다.
CRUD란?
C : Create 생성
R : Read 읽기
U : Update 갱신
D : Delete 삭제
form의 속성의 종류
action : 입력 값을 전송할 페이지를 나타냄.
method : 폼의 데이터를 전송할 방법을 정의. method의 속성에는 get과 post 방식이 있음. get은 웹 서버에 데이터를 요청할 때 사용하며, 주소에 데이터를 입력하는 방식, post 방식은 파일을 올리거나, 보안이 필요한 데이터를 전송할 때 등 사용함. 또한, 주소에 입력 내용이 나타나지 않도록 합니다.
사용자가 다양하게 폼 태그에 입력할 수 있는 공간을 만들어 주고, 사용자에게 정보를 입력 받음.
type : 태그 모양을 다양하게 변경할 수 있음. Type에서는 text, radio, checkbox, password, button 등을 지정 가능
name : 태그 이름을 지정
readonly : 태그를 읽기 전용으로 사용
maxlength : 최대 글자 수를 지정
minlength : 최소 글자 수를 지정
required : 필수 태그로 지정. 필수 태그를 입력하지 않고, submit 버튼을 누르면 에러가 발생 데이터 전송 불가
autofocus : 웹 페이지가 로딩되면 이 속성을 지정한 태그로 포커스 됨
placeholder : 입력할 값에 대한 힌트를 줍니다.
pattern : 정규표현식을 사용하여 특정 범위 내의 유효한 값을 입력 받을 때 사용함.
text : 입력한 텍스트를 바로 표현
button : 버튼
password : 마스크 처리된 텍스트 인풋
search : 검색창
date : 날짜를 입력
time : 시간 입력
range : 슬라이드 바 형식
number : 수를 선택할 수 있게 함
color : 색을 선택
radio : 선택 항목 중 하나만 선택 가능
checkbox : 선택 항목중 0개 이성 선택 가능
file : 파일을 업로드 할 수 있음
email : 이메일 주소 입력
url : 웹 주소를 입력
tel : 전화번호 입력
단순히 인풋 태그를 설명하는 텍스트를 옆에 붙여 무엇을 입력해야 하는지 설명할 수도 있지만, 시작 장애인들도 폼을 사용할 수 있도록 시멘틱한 label 요소를 사용하도록 하자
<label>
이름 :
<input type="text" name="name">
</label>
<label for="myName">이름 : </label>
<input type="text" name="name" id="myName">
레이블이 속한 인풋과 같은 폼 컨트롤(input, select, textarea 요소들)을 의미함.
select 요소는 드롭다운 리스트 박스를 생성합니다. 이때 사용자가 선택해야하는 리스트 박스반의 아이템을 만들 때에는 옵션 태그를 사용
<form action="">
<label for="myDevice">현재 사용하고 있는 스마트폰의 제조사를 선택해주세요</label>
<select name="device" id="myDevice">
<option value="iphone">아이폰</option>
<option value="galaxy">갤럭시폰</option>
<option value="ㅜㅜ">LG폰</option>
</select>
</form>
multiple="multiple" 속성을 사용하면 사용자가 여러개의 옵션 요소를 선택할 수 있게 됨. 단, 단순 클릭으로는 선택되지 않으며 윈도우 에서는 컨트롤, osx는 커맨드 버튼을 누르고 클릭해야 여러개를 선택 가능
size 속성은 드롭다운 리스트에서 한번에 보여줄 수 있는 옵션 갯수를 조절 가능
value를 사용하여 선택값에 따라 서버에 어떤 값을 전송할지 설정
selected 속성은 페이지가 로딩되고 난 뒤 기본으로 선택되는 옵션. 사용하지 않으면 첫번째 옵션이 페이지 로드 시 선택됨, 아무것도 선택하지 않고 데이터를 서버로 전송하면 첫번째 옵션값의 벨류가 전송됨.
자식 요소로 사용되는 폼 컨트롤들을 그룹화 할 수 있음. 특히 폼 내용이 방대하여 섹션별로 나눌 필요성이 있을 경우 유용하게 사용됨. 브라우저가 기본적으로 구현하는 스타일 예시
<form action="">
<fieldset>
<legend>개인정보</legend>
<label for="myName">이름</label>
<input type="text" name="name" id="myName">
<label for="myTel">전화번호</label>
<input type="tel" name="tel" id="myTel">
<label for="myEmail">이메일</label>
<input type="email" name="email" id="myEmail">
</fieldset>
<fieldset>
<legend>개인정보 제공 동의</legend>
<label for="checkAgree">개인정보 제공에 동의하십니까?</label>
<input type="checkbox" name="agree" id="checkAgree">
</fieldset>
</form>
fieldset 태그 바로 뒤에 위치하며 폼 그룹의 목적을 나타내는 제목을 의미, 반드시 첫째 자식으로 사용해야함
클릭 가능한 버튼, 다양하게 제어하고 배누에 다른 자식 요소를 추가하고 싶을 때 사용
type은 버튼의 행동 방식을 설정하는 속성
submit - 버튼이 서버로 양식 데이터를 제출함. 지정하지 않은 경우가 기본이기 때문에 form 양식을 제출하기 위한 용도가 아니라면 반드시 type을 선언 해야함
reset - form의 모든 값을 초기화 시킴
button - 클릭 가능한 버튼. 사용자가 기능을 부여하기 전까지는 작동하지 않음.
input VS button 무엇을 써야할까?
버튼 요소는 인풋보다 스타일을 적용하기 훨씬 수월합니다. 인풋은 닫는 태그가 없기 때문에 value 특성에 텍스트 값 밖에 지정할 수 없지만, 버튼은 내부에 여러가지 자식 컨텐츠를 추가할 수 있고 여기에 더해 가상 요소 사용가능. 더 다채롭고 멋진 스타일을 적용해야 한다면 버튼요소 사용
여러줄의 text를 입력 받을 수 있음
주요속성으로 cols가 있으며 보여줄 입력창의 얿이를 뜻함. 문자의 평균적인 넓이를 기준으로 하며 양수 값만 사용, 기본은 20
rows - 기본적으로 보여줄 입력 줄 수를 의미
<textarea name="" id="" cols="40" rows="10" maxlength="10" minlength="5"></textarea>
datalist 는 select와 input을 섞어 사용할 수 있도록 함. input의 list 속성을 이용해 datalist 요소의 id 속성과 연결하여 사용함.
사용자에게 기본적으로 선택할 수 있는 옵션을 제공함과 동시에, 만약 옵션에 선택하고 싶은 값이 없는 경우 사용자가 원하는 임의의 값을 입력 받을 수 있도록 편의성을 제공함.
<label for="solasystem">원하는 행성을 선택하세요 : </label>
<input type="text" id="solasystem" list="planets" name="planets">
<datalist id="planets">
<option value="수성">수성</option>
<option value="금성">금성</option>
<option value="지구">지구</option>
<option value="화성">화성</option>
</datalist>
자주 사용되는 속성