이름:
```method
속성**enctype**
속성**application/x-www-form-urlencoded**
: 기본값**multipart/form-data**
: <input **type="file"**>
이 존재하는 경우 사용<form
action="http://localhost:8000/"
method="post"
**enctype="multipart/form-data"**
>
<input type="text" name="myTextField">
<input type="checkbox" name="myCheckBox">Check</input>
**<input type="file" name="myFile">**
<button>Send the file</button>
</form>
post방식은 비유하자면 포스트잇으로 정보를 딱 전달하고 온다 정도로 생각해보면 어떨까?<form **method="get"** action="http://naver.com">
<div>
<label for="user-name">이름</label>
<input id="user-name" type="text" name="name">
</div>
<div>
<label for="user-age">나이</label>
<input id="user-age" type="number" name="age">
</div>
<button type="submit">버튼</button>
</form>
get 방식은 쉽게 설명하면 정보를 목소리로 외쳐서 표현한다고 비유해보자!
"야~ 데이터 보낸다~!" 처럼? 암호화하지않고 데이터를 그냥 요청하는거지.
https://example.com**?name=홍길동&age=20**
POST | GET | |
---|---|---|
전송 | 양식 데이터를 요청 본문으로 전송 | https://example.com?name=홍길동&age=20 |
캐시 | X | O |
길이제한 | X | O |
보안 | GET 방식보다 높음 | 취약 |
action
속성autocomplete
속성-
off
자동입력 X
-
on
자동입력 O(기본값)
<label **for="user-id"**>아이디</label>
<input **id="user-id"** type="text">
<label>
아이디
<input type="text">
</label>
💡 label 안에 제목요소를 배치 하지 말 것!
- form에 제목이 필요한 경우 `fieldset` `legend` 사용하기
💡 `type="button"`선언과 유효한 `value` 속성을 가진 input 요소에는 레이블이 필요하지 않습니다.
<input type="button" value="button">
<button type="button">button</button>
**button**
: 기본 행동이 없습니다. 클릭했을 때 아무것도 하지 않습니다. JavaScript와 연결하여 사용합니다**submit**
: 서버로 양식 데이터를 제출합니다.**reset**
: 초깃값으로 되돌립니다.<a>
vs <button>
두개는 어떤 차이가 있을까요?a
vs button
a의 경우 오른쪽 마우스 버튼을 클릭하면, 링크를 새 탭에서 열거나, 링크를 저장하는 등의 추가 옵션이 있는 컨텍스트 메뉴가 표시됩니다.
shift + click, cmd + click 와 같은 사용시 특수한 기능을 합니다.
마우스오버, 포커스가 되었을 때 이동할 url 주소를 브라우저 창 하단에 노출합니다.
a | button | |
---|---|---|
역할 | 하이퍼링크 | 사용자의 동작 실행을 위한 트리거 |
기능 | 다른 페이지 혹은 페이지 내의 특정 영역으로 이동 | 브라우저 기본동작 없음. |
JS를 이용하여 동작 추가
(submit: form 전송 / reset: form 초기화) |
| 키보드 | 엔터 | 스페이스, 엔터 |
| 주의 | href 값 없이 JS로 동작하게 하면 안됨! | JS로 동작 |
type | input 양식 컨트롤의 유형 (button, text, email, file…) |
---|---|
name | input 양식 컨트롤의 이름 |
value | input 양식 컨트롤의 값 |
autocomplete | on/off 양식 자동완성 기능에 대한 힌트(check, radio 제외) |
placeholder | 양식 컨트롤이 비어있을 때 나타나는 내용 |
- 입력에 대한 힌트 제공 ex) 숫자, 문자 조합의 6자 이상 | |
required | 양식 전송을 위해 필수로 입력해야하는 값 |
disabled | 비활성화 |
readonly | 수정불가(읽기전용) |
button | 버튼. 기본행동 없음. value로 버튼 텍스트 표시 |
---|---|
submit | 양식 전송 |
reset | form 내용을 기본값으로 초기화 |
text | 텍스트 입력 |
password | 비밀번호 입력(값이 가려짐) |
이메일 입력 | |
search | 검색 문자열 입력(삭제 아이콘 포함) |
tel | 전화번호 입력 |
url | 웹페이지 주소 입력 |
number | 숫자 입력 |
checkbox | 단일 값을 선택하거나 선택 해제 |
radio | 선택 항목중 하나만 선택 |
file | 파일 업로드 |
date | 날짜 입력(년,월,일) - 시간 없음 |
datetime-local | 날짜와 시간을 지정 |
month | 연과 월 입력 |
time | 시간 입력 |
color | 색 선택 |
range | 슬라이드 바 형태 |
hidden | 보이지 않지만 값은 서버로 전송하는 컨트롤 |
참고!
그렇다면 현직에서는 버튼을 만들 때, button은 input을 자주 쓸까 button을 자주쓸까? 정답은 button태그를 더 많이 쓴다.
이유는? 닫힘태그가 button은 존재하기때문에 더 많은 커스터마이징에 용이하다. 또한 가상태그를 쓰는데에 버튼태그가 더욱 용이하다
<**button** type=”___”>
태그와 동일한 기능을 수행합니다.버튼
초기화
전송
**maxlength**
: 문자수 최대 길이**minlength**
: 문자수 최소 길이**checkbox**
: 단일 값을 선택하거나 선택 해제할 수 있는 체크박스<fieldset>
<legend>사용 기술</legend>
<input **type="checkbox"** name="html" ****id="html">
<label for="html">HTML</label>
<input **type="checkbox"** name="css" id="css">
<label for="css">CSS</label>
<input **type="checkbox"** name="js" id="js">
<label for="js">JavaScript</label>
<input **type="checkbox"** name="python" id="python">
<label for="python">Python</label>
<input **type="checkbox"** name="django" id="django">
<label for="django">Django</label>
</fieldset>
**raido**
: 같은 name 값을 가진 여러개의 선택중에서 하나의 값을 선택<fieldset>
<legend>성별</legend>
<input **type="radio"** **name="gender"** value="male" id="male">
<label for="male">남성</label>
<input **type="radio"** **name="gender"** value="females" id="female">
<label for="female">여성</label>
<input **type="radio"** **name="gender"** value="no" id="no">
<label for="no">선택 안함</label>
</fieldset>
**checked**
: 체크 여부**accept**
: 허용하는 파일 유형을 지정할 수 있습니다.**multiple**
: 지정할 경우 사용자가 여러개의 파일을 선택할 수 있습니다.<label for="profile">프로필 이미지</label>
<input
type="file"
id="profile"
name="profile"
**accept="image/png, image/jpeg"**
>
```## number
- 숫자 입력. 화살표 컨트롤 제공
- `max`: 최대값
- `min`: 최소값
- `step`: 증가값
```html
<label for="num">숫자입력 (10-100):</label>
<input type="number" id="num" name="number"
min="10" max="100" step="10">
multiple
: 여러개의 항목을 동시에 선택할 수 있습니다.size
: 한번에 노출되는 항목의 수를 조절합니다.required
: 선택 필수disabled
: 선택 불가option
은 자신이 선택됐을 때의 값으로 사용할 value 속성이 필요합니다.option
요소를 optgroup
요소 안에 배치하면 드롭다운 내에서 옵션그룹을 나눌 수 있습니다.<label for="animals">동물을 선택하세요: </label>
<select id="animals">
<optgroup label="포유류">
<option>원숭이</option>
<option>개</option>
<option>고양이</option>
</optgroup>
<optgroup label="파충류">
<option>도마뱀</option>
<option>뱀</option>
</optgroup>
</select>
disabled
를 사용할 경우 모든 자손 컨트롤을 비활성화합니다.cols
: 입력창의 너비. 문자의 평균적인 넓이를 기준으로 합니다.(기본값 20)rows
: 기본적으로 보여줄 입력 줄 수 를 의미합니다.maxlength
: 사용자가 입력할 수 있는 문자 최대 길이입니다.minlength
: 사용자가 입력해야 할 문자 최소 길이입니다.placeholder
: 컨트롤에 무엇을 입력해야하는지 알려주는 힌트<textarea
rows="10"
cols="50"
minlength="10"
maxlength="100"
placeholder="10자 이상 100자 이하로 내용을 입력해주세요"></textarea>
textarea{
resize:none;
}