[HTML] 04 HTML5 입력 양식 태그와 구조화 태그

    반응형
    SMALL
    반응형
    SMALL

    입력 양식 태그

     입력 양식 개요

    - form 태그로 영역을 생성하고, form 태그 내부에 input 태그를 넣음. 데이터 입력 후 submit 버튼을 누르면 지정된 방식으로 지정된 장소에 데이터를 전달

     

    <input>

    <body>
      <form>
        <input type="text" name="search" />
        <input type="submit" />
      </form>
    </body>

     

    <output>

    속성 내용
    method
    <form method="get|post">
    입력 양식에 입력한 데이터를 전달하는 방식,

    폼 데이터(form data)가 서버로 제출될 때 사용되는 HTTP 메소드를 명시
    action
    <form action="URL">
    입력 양식에 입력한 데이터를 전달하는 장소,

    폼 데이터(form data)를 서버로 보낼 때 해당 데이터가 도착할 URL을 명시

     

     

    -  전송 방식으로 GET , POST 방식 사용

    > GET 방식 : 주소에 데이터를 입력해서 전달, 크기가 한정됨

    > POST 방식 : 주소를 변경하지 않고 비밀스럽게 데이터를 전달, 용량 제한X

    ** GET 방식은 문자열만 표현 가능하며 한 줄로 작성 + url로 표현되어 비교적 노출이 쉬움

     

     입력 양식 종류

    태그 속성 <~ type=" " ~> 설명
    form   입력 양식의 시작과 끝 표시
    input text 글자 입력 양식 생성
    button 버튼 생성
    radio 라디오 버튼  생성 (다중 선택)
    checkbox 체크박스 생성 (단일 선택)
    file 파일 입력 양식  생성
    hidden 해당 내용 표시 안함 (데이터만 넣는 용도)
    image 이미지 형태  생성
    password 비밀번호 입력 양식 생성
    input reset 초기화 버튼 생성
    submit 제출 버튼  생성
    textarea cols/rows 여러 행의 글자 입력 양식 생성 (화면의 크기),
    cols : 너비 지정
    rows : 높이 지정
    select   선택 양식 생성
    optgroup 옵션 그룹화
    option 옵션 생성
    fieldset   입력 양식의 그룹 지정
    legend 입력 양식 그룹의 이름 지정

     

    + number, email, date, time, color, ...

     

    ** checkbox, radio 는 체크하지 않으면 해당 데이터가 없으므로 추출 안됨 !!

    <!-- 체크 전 -->
    ?text=text&password=password&file=&hidden=hidden&submit=submit
    
    <!-- 체크 후 -->
    ?text=text&password=password&file=&checkbox=checkbox&radio=radio&hidden=hidden&submit=submit



     

    <form_basic.html>

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
      </head>
      <body>
        <form>
          <!-- 사용자가 입력하는 입력 양식 -->
          <input type="text" name="text" value="text" /><br />
          <input type="password" name="password" value="password" /><br />
          <input type="file" name="file" value="file" /><br />
          <input type="checkbox" name="checkbox" value="checkbox" /><br />
          <input type="radio" name="radio" value="radio" /><br />
    
          <!-- 보이지 않는 입력 양식 -->
          <input type="hidden" name="hidden" value="hidden" />
          <br />
          <!-- 버튼 -->
          <input type="button" name="button" value="button" /><br />
          <input type="reset" name="reset" value="reset" /><br />
          <input type="submit" name="submit" value="submit" /><br />
          <input type="image" src="http://placehold.co/100x100" />
        </form>
      </body>
    </html>

     

    <출력 화면>

     

     label 태그

    - 사용자 인터페이스(UI) 요소의 라벨(label)을 정의할 때 사용

    - label 태그의 for 속성에 input 태그의 id 속성을 입력해 input 태그를 설명

    - for 속성을 연결하면, label 태그를 클릭했을 때 input 태그에 포커스가 감

     

    [ o 남성 ] <- 이 경우 label태그를 해야 '남성' 글자 클릭 시에도 라디오 버튼 체크가 가능 !!

                        label 태그 안할 시 글자 클릭 불가

     

    **<label> 요소를 사용할 수 있는 요소는 다음과 같다

    - <button>, <input>, <meter>, <output>, <progress>, <select>, <textarea>

     

    <form>
    	<label for="name">이름</label>
    	<input id="name" type="text">
        ... (생략) ...
    </form>

     

     라디오 버튼

    <input type="radio" name="그룹명" value="값">

    - 여러 대상 중 하나만 선택하는 형태

    - name 속성으로 선택 대산 그룹 지정

    - 여러 개의 버튼 구성 시 그룹명이 동일해야 함

     

    <form_basic2.html>

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
      </head>
      <body>
        <form>
          <table>
            <tr>
              <td><label for="username">이름</label></td>
              <td><input type="text" name="username" id="username" /></td>
            </tr>
            <tr>
              <td>성별</td>
              <td>
                <input id="man" type="radio" name="gender" value="m" />
                <label for="man">남자</label>
                <input id="woman" type="radio" name="gender" value="w" />
                <label for="woman">여자</label>
              </td>
            </tr>
          </table>
          <input type="submit" value="가입" />
        </form>
      </body>
    </html>

     

    <출력 화면>

     

     select

    - 목록의 항목 중 하나 또는 여러 개를 선택할 때 사용, 단일 선택이 default 값

    - option 하위 태그 : select 태그 내부에 넣으면 옵션 선택 요소가 생성됨 

     

    ** select - option 관계 ≒ ul / ol - li

     

    1) 단일 선택 코드

    ** option 태그에 value 속성을 지정하지 않으면 레이블이 value가 됨

    <form_select.html>

    <body>
      <select>
        <option>김밥</option>
        <option>떡볶이</option>
        <option>순대</option>
        <option>어묵</option>
      </select>
    </body>

     

    <출력 화면>

     

    2) 다중 선택 코드

     

    <form_selectMultiple.html>

    <body>
      <select name="test" multiple="multiple">
        <option>김밥</option>
        <option>떡볶이</option>
        <option>순대</option>
        <option>어묵</option>
      </select>
      <input type="submit" />
    </body>

     

    <출력 화면>

     


    HTTP 프로토콜에서 클라이언트가 서버로 데이터를 전송할 때, 텍스트 형식으로 데이터를 표현하는 두 가지 주요 방법


    1. Form Encoding (application/x-www-form-urlencoded)
    • 특징:
      • 전통적인 HTML 폼 데이터 전송 방식
      • 키-값 쌍의 문자열을 & 문자로 연결하고, 각 키-값 쌍은 = 문자로 구분
      • 공백은 + 또는 %20으로, 특수문자는 퍼센트 인코딩(%HH)으로 처리됨
      • Content-Type 헤더는 application/x-www-form-urlencoded로 설정
    • 배열 표현:
      • 같은 이름의 키를 여러 번 사용하여 배열을 표현
      • 예시: test=값1&test=값2&test=값3
    • 장점:
      • 구현이 간단하고 널리 지원됨
      • 웹 브라우저에서 기본적으로 지원
    • 단점:
      • 복잡한 데이터 구조를 표현하기 어려움
      • 문자열 데이터만 처리 가능
      • 퍼센트 인코딩으로 인해서 가독성이 떨어짐
    2. JSON Encoding (application/json)
    • 특징:
      • JavaScript Object Notation의 약자로, 구조화된 데이터를 표현하는 데 적합
      • 중괄호 {}를 사용하여 객체를, 대괄호 []를 사용해 배열을 표현
      • 키-값 쌍은 콜론 :으로 구분하고, 쉼표 ,로 항목을 구분
      • Content-Type 헤더는 application/json으로 설정됨
    • 배열 표현:
      • 대괄호 [] 안에 값을 쉼표로 구분하여 나열
      • 예시: {"test": [값1, 값2, 값3]}
    • 장점:
      • 다양한 데이터 타입(문자열, 숫자, 불리언, 객체, 배열)을 표현할 수 있음
      • 가독성이 높고 파싱하기 용이
      • 대부분의 프로그래밍 언어에서 JSON을 지원
    • 단점:
      • form encoding 보다 상대적으로 처리하는 코드가 복잡함
    3. 서버에서의 처리
    • Form Encoding:
      • 서버 측에서는 쿼리 문자열 파싱 라이브러리 또는 프레임워크를 사용하여 데이터를 파싱
      • 대부분의 웹 프레임워크는 폼 데이터를 배열 또는 리스트 형태로 제공
      • 예시(Python Flask): request.form.getlist('test')
    • JSON Encoding:
      • 서버 측에서는 JSON 파싱 라이브러리 또는 프레임워크를 사용하여 데이터를 파싱
      • 파싱된 JSON 데이터는 객체 또는 딕셔너리 형태로 제공되며, 배열은 리스트 형태로 접근할 수 있음
      • 예시(Python Flask): request.get_json()['test']
    선택 기준:
    • 단순한 폼 데이터 전송에는 Form Encoding이 적합
    • 복잡한 데이터 구조 또는 다양한 데이터 타입 전송에는 JSON Encoding이 적합
    • 최근 API 통신에서는 JSON Encoding이 많이 사용됨
    요약:
    클라이언트에서 HTTP 프로토콜을 사용하여 데이터를 전송할 때, Form Encoding은 전통적인 방식이며 JSON Encoding은 현대적인 API 통신에 더 적합

    서버에서는 각 인코딩 방식에 맞는 파싱 라이브러리를 사용하여 데이터를 처리

     

     

    3) 카테고리별 그룹핑 - option으로 레이블 지정

     

    <form_selectGroup.html>

    <body>
      <select>
        <optgroup label="HTML5">
          <option>Mutimedia Tag</option>
          <option>Connectivity</option>
          <option>Device Access</option>
        </optgroup>
        <optgroup label="CSS3">
          <option>Animation</option>
          <option>3D Transform</option>
        </optgroup>
      </select>
    </body>

     

    <출력 화면>

     

     

    ▶ fieldset

    - 입력 양식을 그룹으로 묶고 이름을 지정해서 타이틀 출력

    - <legend> 하위 태그로 이름 지정

     

    <form_fieldset.html>

    <body>
      <form>
        <fieldset>
           <legend>입력 양식</legend>
           <table>
               <tr>
                    <td><label for="name">이름</label></td>
                    <td><input type="text" id="name"></td>
               </tr>
                    <td><label for="mail">이메일</label></td>
                    <td><input type="email" id="mail"></td>
               </tr>
            </table>
            <input type="submit">
        </fieldset>
       </form>
    </body>

     

    <출력 화면>

    ▶ textarea

    - 여러 줄을 입력 받는 요소

    - 주의 !! 화이트 스페이스(엔터, 탭, 스페이스)가 그대로 출력됨

     

    1) placeholder

    > 입력 필드에 사용자가 적절한 값을 입력할 수 있도록 도와주는 짧은 힌트, 실제값x

    > 입력 예시 : <input placeholder="내용을 입력해주세요.">

     

    2) required

    > 폼 데이터(form data)가 서버로 제출되기 전 반드시 채워져 있어야 하는 입력 필드를 명시

    > 제출 버튼 클릭 시 정보 누락 알림창 뜸

    > 입력 예시 : <input required>

     

    3) disabled

    > 해당 <input> 요소가 비활성화됨을 명시

    > 불리언(boolean) 속성으로, 해당 속성을 명시하지 않으면 속성값이 자동으로 false 값을 가지게 되며, 명시하면 자동으로 true 값을 가지게 됨

    > 주로 submit 버튼에 포함되며 required이 붙은 곳의 모든 정보가 입력되면 submit 버튼이 활성화됨, 이것을 disabled property로 조정 !!

    > 입력 예시 : <input disabled>

     

    4) checked

    > 라디오 버튼, 체크박스에 넣어 초기에 체크되어 있게끔 하는 property (불리언 속성)

    > 입력 예시 : <input type="checkbox|radio" checked>

     

    ▶ 공간 분할 태그

    - 영역(범위) 지정을 위한 태그

    - 어떻게 보여줄지는 CSS로 결정

    태그 설명
    div - 블록 형식으로 공간 분할
    - 전체 행
    - (아래로) 수직으로 쌓임
    - 조정 가능
    - 줄이 바뀌면 div
    부모 영역의 width = 해당 div의 width
    span -  인라인 형식으로 공간 분할
    - 컨텐츠의 크기
    - (오른쪽으로) 옆으로 쌓임
    - 조정 불가, width는 contents에 의해 결정

     

    1. 블록 형식 태그

    - 한 행을 모두 차지하며 끝 태그 이후 줄바꿈

    - 종류(default며 css에서 inline 형식으로 변경 가능) : div, h1 ~ h6, p, 목록, 테이블 태그

     

    2. 인라인 형식 태그

    - 자신의 내용 만큼만 영역을 차지. 끝 태그 이후 줄바꿈하지 않고 다음 내용이 출력

    - 종류 (default며 css에서 inline 형식으로 변경 가능) : span, a, input, 글자 형식, 입력 양식 태그

     

    3. 인라인 - 블록 형식 태그

    - 기본적으로 인라인 형식(줄바꿈x)이며, 블록 형식과 같이 width와 height 조정 가능

    - 종류 : img 태그

     

    <space_blockandinline.html>

    <body>
      <div>div태그 - block형식</div>
      <div>div태그 - block형식</div>
      <div>div태그 - block형식</div>
      <div>div태그 - block형식</div>
      <div>div태그 - block형식</div>
      <span>span태그 - inline형식</span>
      <span>span태그 - inline형식</span>
      <span>span태그 - inline형식</span>
      <span>span태그 - inline형식</span>
      <span>span태그 - inline형식</span>
    </body>

     

    <출력 화면>

    시맨틱 태그

    - 시맨틱(sementic) 웹 : 컴퓨터 프로그램이 코드를 읽고 의미를 인식할 수 있는 지능형 웹

    - 시맨틱 태그 : 웹 페이지의 태그에 의미를 부여하는 태그

    - 검색 최적화를 위해 div에 이름을 다는 것이다~

    이미지 출처 :윤인성, HTML5 웹 프로그래밍 입문(4판), 한빛아카데미

     

    태그 설명
    header 머리말(페이지 제목, 페이지 소개)
    nav 하이퍼링크들을 모아 둔 내비게이션
    aside 본문 흐름에 벗어나는 노트나 팁
    section 문서의 장이나 절에 해당하는 내용
    article 본문과 독립적인 콘텐츠 영역
    footer 꼬리말(저자나 저작권 정보)

     

     

     

     

     

     

     

    <a href="https://www.flaticon.com/kr/free-icons/html-5" title="html 5 아이콘">Html 5 아이콘 제작자: Freepik - Flaticon</a>

    반응형
    LIST

    'Front-end > HTML' 카테고리의 다른 글

    [HTML] 03 HTML5 기본 태그  (0) 2025.03.08
    [HTML] 02 웹 페이지 기본 구조와 작성 방법  (2) 2025.03.08
    CSS3 실습 5-5  (0) 2022.12.09

    댓글