다다의 개발일지 6v6

[HTML & CSS] Learn HTML Forms by Building a Registration Form 본문

Frontend/HTML, CSS

[HTML & CSS] Learn HTML Forms by Building a Registration Form

dev6v6 2025. 2. 12. 23:58

https://www.freecodecamp.org/learn/2022/responsive-web-design/learn-html-forms-by-building-a-registration-form/step-1

 

https://www.freecodecamp.org/learn/2022/responsive-web-design/learn-html-forms-by-building-a-registration-form/step-1

 

www.freecodecamp.org

결과물

vh unit stands for viewport height, 

단위 vh -> viewport height , 화면의 100%가 100vh임

 

 

input type이 password일 때 minlength="8" 이렇게 설정할 수 있음.

-> pattern 속성을 이용해서 바꿔보자 (아래 정리)

🔑 pattern 속성을 사용한 비밀번호 유효성 검사

비밀번호 입력 필드에서 type="password"를 사용할 때, pattern 속성을 추가하면 비밀번호가 특정 규칙(정규식)에 맞는지 검사할 수 있다.

<input id="new-password" type="password" pattern="[a-z0-5]{8,}" required />
  • pattern="[a-z0-5]{8,}" → 소문자(a-z) 또는 숫자(0~5)로 이루어진 8글자 이상만 허용
  • -> A-Z 추가하면 대문자도 가능
  • minlength 속성을 삭제 → pattern 속성만으로 최소 길이(8글자 이상)를 지정할 수 있기 때문
  • {8,} → 최소 8글자 이상 입력해야 함

 

Select element

        <label>How did you hear about us?
          <select>
            <option value="">(select one)</option>
            <option value="1">freeCodeCamp News</option>
            <option value="2">freeCodeCamp YouTube Channel</option>
            <option value="3">freeCodeCamp Forum</option>
            <option value="4">Other</option>
          </select>
        </label>

option에 있는 value 값은 서버에 데이터 보낼 때 저렇게 보내짐!

 

CSS selector

input[type="file"] /* 이건 속성 selector 인데 type이 file인 input을 가리킨다. */
  padding: 1px 2px;
}

 

fieldset:last-of-type {  /* fieldset 중에서 가장 마지막 거! */
  border-bottom: none;
}

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Registration Form</title>
    <link rel="stylesheet" href="styles.css" />
  </head>
  <body>
    <h1>Registration Form</h1>
    <p>Please fill out this form with the required information</p>
    <form method="post" action='https://register-demo.freecodecamp.org'>
      <fieldset>
        <label for="first-name">Enter Your First Name: <input id="first-name" name="first-name" type="text" required /></label>
        <label for="last-name">Enter Your Last Name: <input id="last-name" name="last-name" type="text" required /></label>
        <label for="email">Enter Your Email: <input id="email" name="email" type="email" required /></label>
        <label for="new-password">Create a New Password: <input id="new-password" name="new-password" type="password" pattern="[a-z0-5]{8,}" required /></label>
      </fieldset>
      <fieldset>
        <legend>Account type (required)</legend>
        <label for="personal-account"><input id="personal-account" type="radio" name="account-type" class="inline" checked /> Personal</label>
        <label for="business-account"><input id="business-account" type="radio" name="account-type" class="inline" /> Business</label>
      </fieldset>
      <fieldset>
        <label for="profile-picture">Upload a profile picture: <input id="profile-picture" type="file" name="file" /></label>
        <label for="age">Input your age (years): <input id="age" type="number" name="age" min="13" max="120" /></label>
        <label for="referrer">How did you hear about us?
          <select id="referrer" name="referrer">
            <option value="">(select one)</option>
            <option value="1">freeCodeCamp News</option>
            <option value="2">freeCodeCamp YouTube Channel</option>
            <option value="3">freeCodeCamp Forum</option>
            <option value="4">Other</option>
          </select>
        </label>
        <label for="bio">Provide a bio:
          <textarea id="bio" name="bio" rows="3" cols="30" placeholder="I like coding on the beach..."></textarea>
        </label>
      </fieldset>
      <label for="terms-and-conditions">
        <input class="inline" id="terms-and-conditions" type="checkbox" required name="terms-and-conditions" /> I accept the <a href="https://www.freecodecamp.org/news/terms-of-service/">terms and conditions</a>
      </label>
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

styles.css

body {
  width: 100%;
  height: 100vh;
  margin: 0;
  background-color: #1b1b32;
  color: #f5f6f7;
  font-family: Tahoma;
  font-size: 16px;
}

h1, p {
  margin: 1em auto;
  text-align: center;
}

form {
  width: 60vw;
  max-width: 500px;
  min-width: 300px;
  margin: 0 auto;
  padding-bottom: 2em;
}

fieldset {
  border: none;
  padding: 2rem 0;
  border-bottom: 3px solid #3b3b4f;
}

fieldset:last-of-type {
  border-bottom: none;
}

label {
  display: block;
  margin: 0.5rem 0;
}

input,
textarea,
select {
  margin: 10px 0 0 0;
  width: 100%;
  min-height: 2em;
}

input, textarea {
  background-color: #0a0a23;
  border: 1px solid #0a0a23;
  color: #ffffff;
}

.inline {
  width: unset;
  margin: 0 0.5em 0 0;
  vertical-align: middle;
}

input[type="submit"] {
  display: block;
  width: 60%;
  margin: 1em auto;
  height: 2em;
  font-size: 1.1rem;
  background-color: #3b3b4f;
  border-color: white;
  min-width: 300px;
}

input[type="file"] {
  padding: 1px 2px;
}

a {
  color: #dfdfe2;
}

 

 

이번 과정은 앞에 과정들 복습하면서 좀더 심화된 내용 같았다. 스타일 부분에서는 하라는 대로 따라 했기 때문에 잘 와닿진 않았지만 html 부분에서 배운 건 많다!