프로그래밍/HTML

HTML 문법을 활용한 마라톤 제출 양식 코드리뷰

emhaki 2022. 5. 23. 12:04
728x90
반응형
SMALL

HTML 문법을 활용해서 위와 같은 형식의 마라톤 제출 양식을 만들어 보고자 한다. 배운 내용들을 바탕으로 아래와 같이 코드를 짜봤는데 보기도 좋지 않고 아직 머릿속으로도 잘 정리되지 않은 것 같아서 스스로 코드 리뷰를 해보면서 정리해보고자 한다.

<h1>Race Registration</h1>

<form action="/marthon">
    <p>
        <label for="First name">First name</label>
        <input type="text" id="First name" name="First name">
        <label for="Last name">Last name</label>
        <input type="text" id="Last name" name="Last name">
    </p>
    <h2>select a Race:</h2>
    <p>
        <input type="checkbox" id="Race" name="race">
        <label for="Fun">Fun Run 5K</label>
    </p>
    <p>
        <input type="checkbox" id="Race" name="race">
        <label for="Half">Half Marathon</label>
    </p>
    <p>
        <input type="checkbox" id="Race" name="race">
        <label for="Full">Full Marathon</label>
    </p>
    <label for="email">Email</label>
    <input type="email" id="email" minlength="5" maxlength="20">
    <label for="Password">Password</label>
    <input type="Password" id="Password" minlength="4" maxlength="10">
    <p>
        <label for="">Select Age Group</label>
        <select name="" id="">
            <option value="">Under 10</option>
            <option value="">10~18</option>
            <option value="">19~25</option>
            <option value="">26~100</option>
        </select>
    </p>
    <button>Register!</button>

</form>

위에서부터 하나하나씩 짚어보면

<h1>Race Registration</h1>

<form action="/marthon">
    <p>
        <label for="First name">First name</label>
        <input type="text" id="First name" name="First name">
        <label for="Last name">Last name</label>
        <input type="text" id="Last name" name="Last name">
    </p>

Race Registration을 h1으로 묶었고 p로 문단을 나눴다. 각각의 레이블과 Input의 id를 일치시켜서 First name을 클릭하면 입력할 수 있게 연결시켜놨다. name에 First name, Last name을 기록해서 설문자가 입력했을 때 값을 확인 할 수 있게 구분시켜놨다.

부족한 점

Required가 있을 경우

하지만 위에 코드에서 중요한 Required를 빼먹었다. Required가 없을 경우 설문에 빈 항목을 제출해도 제출할 수 있게 된다. Required를 넣으면 위와 같이 빈 항목일 경우 제출할 수 없게 된다.


<h2>select a Race:</h2>
    <p>
        <input type="checkbox" id="Race" name="race">
        <label for="Fun">Fun Run 5K</label>
    </p>
    <p>
        <input type="checkbox" id="Race" name="race">
        <label for="Half">Half Marathon</label>
    </p>
    <p>
        <input type="checkbox" id="Race" name="race">
        <label for="Full">Full Marathon</label>
    </p>

 Select a Race를 h2태그로 감쌌고, p로 단락을 나눴다. type을 checkbox로 작성했다. 

부족한 점

왜그랬는지는 모르겠지만, 여기에서는 레이블과 id 값을 일치시키지 않았다. 일치시키지 않을 경우 글자를 클릭해도 체크박스가 체크되지 않는다. 게다가 Requried도 입력하지 않아 체크하지 않고도 제출할 수 있다.



    <label for="email">Email</label>
    <input type="email" id="email" minlength="5" maxlength="20">
    <label for="Password">Password</label>
    <input type="Password" id="Password" minlength="4" maxlength="10">
    <p>
        <label for="">Select Age Group</label>
        <select name="" id="">
            <option value="">Under 10</option>
            <option value="">10~18</option>
            <option value="">19~25</option>
            <option value="">26~100</option>
        </select>
    </p>
    <button>Register!</button>

input값을 email로 설정해서 @형식으로 입력할 수 있게 했고 label과 id를 일치시켰다. 글자수는 최소 5자 ~ 최대 20자로 설정했다. password도 동일하다. Age Group을 만들어서 Select로 항목을 만들어 옵션을 나눴다. 그리고 마지막으로 Register button을 생성해 제출 할 수 있도록 만들었다.

부족한 점

여기도 마찬가지로 Required을 넣지 않았다. Age Group에서는 label값과 id값을 일치시키지 않았으며 옵션에 Value 값도 입력하지 않았다.. Value값을 입력하지 않으면 설문자가 어떤 항목을 체크했는지 알 수 없다. 또한 Required도 넣지 않았다.


리뷰를 바탕으로 다시한번 정갈하게 코드를 짜서 다음과 같이 수정했다.

<!DOCTYPE html>
<html lang="en">

<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>Register Form</title>
</head>

<body>
    <h1>Race Registration!</h1>
    <form action="">
        <div>
            <label for="first name">First Name</label>
            <input type="text" id="first name" name="firstname" required="">
            <label for="last name">Last name</label>
            <input type="text" id="last name" name="lastname" required="">
        </div>
        <h2>Select a Race:</h2>
        <div>
            <input type="radio" name="race" id="Fun" value="Fun" required="">
            <label for="Fun">Fun Run 5K</label>
        </div>
        <div>
            <input type="radio" name="race" id="Half" value="Half" required="">
            <label for="Half">Half Marathon</label>
        </div>
        <div>
            <input type="radio" name="race" id="Full" value="Full" required="">
            <label for="Full">Full Marathon</label>
        </div>
        <div>
            <label for="email">Email</label>
            <input type="email" name="email" id="email" required="">
            <label for="password">Password</label>
            <input type="password" name="password" id="password" required="">
        </div>

        <div>
            <label for="division">Select Age Group</label>
            <select name="division" id="division">
                <option value="Kids">Under 10</option>
                <option value="ya">10~18</option>
                <option value="adults">19~25</option>
                <option value="seniors">26~100</option>
            </select>
        </div>
        <div>
            <button>Register!</button>
        </div>
    </form>


</body>

</html>

HTML 형식을 갖췄고, div로 좀 더 보기 좋게 나눴다. id와 label이 일치되지 않은 항목들을 일치시켰고 꼭 입력해야되는 항목에는 Required를 추가했다. 그리고 설문자가 제출했을데 입력값이 어떤 것인지 확인하기 쉽게 name과 Value값을 구분지었다. 수정한 HTML은 다음과 같이 보인다.

보기에는 큰 변화가 없지만 항목간의 간격이 좁아졌고 훨씬 보기 좋아졌다. 아직 CSS와 javascript를 활용하지 않아 어색하게 보인다. 

728x90
반응형