본문 바로가기
💻 1. 웹개발_Front end/1-2 HTML

[HTML] 04-5 기타 다양한 폼 요소들

by 달님🌙 2021. 9. 5.
반응형

 

1. <button> 태그 – 버튼 넣기

 

① <button>를 사용해도 <input type="submit">, <input type="reset">과 동일한 기능의 버튼 추가 가능

② <button>에서 사용 가능한 type

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>웹 폼</title>
    <style>
        .subm {
            display: block;
            background-color: #fff;
            border: 1px solid #dedede;
            cursor: pointer;
            padding: 5px 10px 6px 7px;
        }
        .subm img {
            border: 0;
            padding: 0;
            width: 16px;
            height: 16px;
        }
        /*hover : 마우스 커서를 대상에 올렸을 때 적용되는 스타일*/
        .subm:hover {
            background-color: #e6efc2;
            border: 1px solid #c6d880;
            color: #529515;
        }
    </style>
</head>
<body>
    <!--form>button.subm>img-->
    <form action="">
        <!--type="submit" : <input type="submit"과 동일하게 동작하는 버튼 생성>-->
        <button type="submit" class="subm">
            <img src="images/tick.png" alt=""> 전송하기
        </button>
    </form>

</body>
</html>

 

 

2. <output> 태그 – 계산 결과

 

① 입력하는 값이 계산 결과라는 것을 브라우저에 전달

② <output> 으로 묶인 값은 일반 텍스트가 아니고 계산의 결과 값으로 인식

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>웹 폼</title>
</head>
<body>
    <!--form>input*2+output-->
    <!--oninput 이벤트에서 result value값을 num1과 num2의 합으로 설정-->
    <form oninput="result.value=parseInt(num1.value)+parseInt(num2.value)">
        <input type="number" name="num1" value="0">
        +<input type="number" name="num2" value="0">
        =<output name="result" for="num"></output>
    </form>
</body>
</html>

 

3. <progress> 태그 – 진행 상태 보여주기

 

① 작업 진행 상태를 표시할 때 사용

② 작업 시작을 0, 최종 완료를 최대 값(max)으로 지정하여 진척도를 숫자(value)로 표현

③ <progress>에서 사용 가능한 속성

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>웹 폼</title>
</head>
<body>
    <!--ul>(li>(label+progress))*2-->
    <ul>
        <li>
            <label for="">10초 남음</label>
            <!-- 전체 60초 중 50초 진행 -->
            <progress value="50" max="60"></progress>
        </li>
        <li>
            <label for="">진행률 30%</label>
            <!-- 전체 100 중 30만큼 진행 -->
            <progress value="30" max="100"></progress>
        </li>
    </ul>
</body>
</html>

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>웹 폼</title>
    <style>
        body {
            background-color: #fff;
        }
        ul li {
            list-style: none;
            margin: 15px 0;
            font-size: 14px;
        }
    </style>
</head>
<body>
    <!--javascript-->
    <script>
        //다운로드 버튼 클릭 시 실행될 메소드 정의
        function dwn() {
            //dom객체를 이용해 progress 태그를 변수로 선언
            var bar = document.getElementById("bar");
            //dom객체를 이용해 span 태그를 변수로 선언
            var progress = document.getElementById("progress");
            var loaded = 0;

            //0.5초마다 실행될 메소드
            var load = function() {
                loaded +=5;
                bar.value = loaded;

                //loaded의 값이 100이 되면 0.5초마다 실행되는 Interval을 클리어
                if(loaded == 100) {
                    clearInterval(dummyLoad);
                }
            }

            //setInterval메소드 : 일정기간마다 정해진 동작 반복 실행
            //0.5초마다 function내에 정의되어 있는 내용 실행
            var dummyLoad = setInterval(function() {
                load() 
            }, 500);
        } 
    </script>
    <button type="button" onclick="dwn();">다운로드 시작</button>
    <progress id="bar" value="0" max="100">
        <span id="progress"></span>
    </progress>
</body>
</html>

 

4. <meter> 태그 – 값이 차지하는 크기 표시하기

 

① 전체 크기 중에서 얼마나 차지하는지를 표현할 때 사용

② 디스크 사용량이라던지 투표율 같은 지정된 범위 내에서 해당 값이 어느 정도 차지하는지 표현

③ <meter>에서 사용 가능한 속성

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>웹 폼</title>
    <style>
        body {
            background-color: #fff;
        }
        ul li {
            list-style: none;
            margin: 15px 0;
            font-size: 14px;
        }
    </style>
</head>
<body>
    <!--ul>(li>(label+meter))*5-->
    <ul>
        <li>
            <label for="">점유율 0.8</label>
            <!-- 전체 크기 1을 기준으로 0.8만큼 차지합니다. -->
            <meter value="0.8"></meter>
        </li>
        <li>
            <label for="">사용량 64%</label>
            <!-- 전체 100 중에서 64만큼 차지합니다. -->
            <meter min="0" max="100" value="64"></meter>
        </li>
        <li>
            <label for="">트래픽 초과</label>
            <!-- 전체 크기는 1024 ~ 10240 까지인데 높다고 설정한 8192보다 현재 값 9216이 더 큽니다. -->
            <meter min="1024" max="10240" low="2048" high="8192" value="9216"></meter>
        </li>
        <li>
            <label for="">트래픽 초과</label>
            <!-- 전체 크기는 1024 ~ 10240 까지인데 낮다고 설정한 2048보다 현재 값 1700이 더 작습니다. -->
            <meter min="1024" max="10240" low="2048" high="8192" value="1700"></meter>
        </li>
        <li>
            <label for="">적절한 트래픽</label>
            <!-- 전체 1 중에서 현재 0.6를 차지하고 있으며 적정도 0.5로 설정. -->
            <meter value="0.6" low="0.2" high="0.8" optimum="0.5"></meter>
        </li>
    </ul>
</body>
</html>

 

 

퀴즈

 

<퀴즈 1번>

<!doctype html>
<html lang="ko">
<head>
	<meta charset="utf-8">
	<title>예약 접수</title>
	<style>
		ul {
			list-style:none;
		}
		li {
			line-height:50px;
		}
		label {
			width:60px;
			float:left;
		}
	</style>
</head>
<body>
	<!--h1+form>ul>((li>(label+input))*3+li>input)-->
	<h1>예약 정보</h1>
	<form>
		<ul>
			<li>
				<label for="r-name">이 름</label>
				<input type="text" id="r-name">
				</li>
			<li>
				<label for="r-phone">휴대폰</label>
				<input type="tel" id="r-phone">
			</li>
			<li>
				<label for="r-email">이메일</label>
				<input type="email" id="r-email">
			</li>
			<li>
				<input type="button" value="예약하기">
			</li>
		</ul>
	</form>	
</body>
</html>

 

 

 

<퀴즈 2번>

<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>프런트엔드 개발자 지원서</title>
    <style>
			#container { 
				width:520px;
				border:1px solid black;
				padding:20px 40px;
				margin:0 auto;
			}
      fieldset { margin-bottom:15px; }
      legend { font-weight:bold; }
			ul {list-style-type: none;}
			li { 
				line-height:30px;
				list-style: none;
			}
    </style>
  </head>
  <body>
		<div id="container">
			<h1>프런트엔드 개발자 지원서 </h1>
			<p>HTML, CSS, Javascript에 대한 기술적 이해와 경험이 있는 분을 찾습니다.</p>
			<hr>
			<form>
				<!--(h4+ul>(li>label>input)*2)*2-->
				<h4>개인정보</h4>
				<ul>
					<li>
						<!-- <input>태그 앞 뒤에 <label>과 </label> 태그로 묶어도 됩니다 -->
						<label for="sname">
							이름 <input type="text" id="sname" autofocus placeholder="공백없이 입력하세요">
						</label>
					</li>
					<li>
						<label for="snumber"> 연락처 </label>
						<input type="tel" id="uphone">
					</li>
				</ul>
				<h4>지원 분야</h4>
				<ul>
					<li>
						<label>
							<input type="radio" name="field" value="wp"> 웹 퍼블리싱
						</label>
					</li>
					<li>
						<label>
							<input type="radio" name="field" value="wa"> 웹 애플리케이션 개발
						</label>
					</li>
					<li>
						<label>
							<input type="radio" name="field" value="de"> 개발 환경 개선
						</label>
					</li>
				</ul>
				
				<div>
					<h4>지원 동기</h4>
					<!--textarea 태그도 pre 태그 처럼 공백을 허용함-->
					<textarea name="지원동기" cols="60" rows="5" placeholder="본사 지원 동기를 간략히 써주세요"></textarea>
				</div>
				<div>
					<button type="submit">접수하기</button>
					<button type="reset">다시 쓰기</button>
				</div>
			</form>
		</div>
  </body>
</html>

 

<퀴즈 3번>

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>주문서 작성</title>
    <style>
        .container {
            width: 600px;
            margin: 0 auto;
        }
        ul { /* 순서없는 목록에 적용할 스타일 */
            list-style-type: none; /* 불릿 없앰 */
        }
        label.title { /*클래스가 title인 label에 적용할 스타일 */
            font-weight: bold;
            width: 80px;
            float: left;
        }
        div.centered { /*클래스가 centered인 div에 적용할 스타일 */
            text-align: center;
        }
        fieldset { /* 필드셋에 적용할 스타일*/
            margin: 15px 10px; /* 상하 마진 15xp, 좌우 마진 10px */
        }
        fieldset legend {
            font-weight: bold;
            font-size: 18px;
            color: purple;
        }
        ul li { /* 목록의 각 항목 */
            margin-bottom: 10px;
        }
    </style>
</head>
<body>
    <div class="container">
        <!--h1+form>(fieldset>(legend+(ul>(li>label+input)*2)))*3-->
        <h1>상품 주문서</h1>
        <form>
            <fieldset>
                <legend>개인정보</legend>
                <ul>
                    <li>
                        <label for="uname" class="title">이름</label>  
                        <input type="text" id="uname" placeholder="여백없이 입력" required>
                    </li>
                    <li>
                        <label for="tel1" class="title">연락처</label>
                        <input type="tel" id="tel1" placeholder="연락가능한 번호">
                    </li> 
                </ul>
            </fieldset>
            <fieldset>
                <legend>배송지 정보</legend>
                <ul>
                    <li>
                        <label for="addr" class="title">주소</label> 
                        <input type="text" size="40" id="addr" required>
                    </li>
                    <li>
                        <label for="tel2" class="title">전화번호</label>  
                        <input type="tel" id="tel2" required> 
                    </li>
                    <li>
                        <label for="comment" class="title">메 모</label>
                        <textarea  cols="40" rows="3" id="comment"></textarea>  
                    </li>
                </ul>
            </fieldset>
            <fieldset>
                <legend>주문 정보</legend>
                <ul>
                    <li>
                        <label><input type="checkbox">과테말라 안티구아 (100g)</label>
                        <input type="number" value="0" min="0" max="5">개
                          
                    </li>
                    <li>
                        <label><input type="checkbox">인도네시아 만델링 (100g)</label> 
                        <input type="number" value="0" min="0" max="5">개
                    </li>
                    <li>
                        <label><input type="checkbox">탐라는도다(블렌딩) (100g)</label>
                        <input type="number" value="0" min="0" max="5">개
                          
                    </li>
                </ul>
            </fieldset>
            <div class="centered">
                <input type="submit" value="주문하기">
                <input type="reset" value="다시 작성">
            </div>
        </form>
    </div>
</body>
</html>

반응형

댓글