[miniProjects] 41_Verify Account UI

보리·2023λ…„ 7μ›” 25일
0

miniProjects

λͺ©λ‘ 보기
41/47

41_Verify Account UI

πŸ’» 주제 : 이메일 확인 μ½”λ“œ μž…λ ₯ UI

✨JS

codes[0].focus()

codes.forEach((code, idx) => {
  code.addEventListener('keydown', (e) => {
    if(e.key >= 0 && e.key <= 9) {
      codes[idx].value=''
      // 숫자 μž…λ ₯ ν›„, λ‹€μŒ μ½”λ“œλ‘œ μž…λ ₯ν•˜κ²Œ μ»€μ„œκ°€ λ°”λ€” κ²ƒμž„
      setTimeout(() => codes[idx + 1].focus(), 10 )
    } else if(e.key === 'Backspace') {
      setTimeout(() => codes[idx - 1].focus(), 10 )
    }
  })
})
  • 첫 번째 μ½”λ“œλ₯Ό μž…λ ₯ν•˜λ„λ‘ 포컀슀 λ˜μ–΄μžˆμŒ.
  • μˆ«μžλŠ” 0~9κΉŒμ§€ λˆ„λ₯Ό 수 있고, μ½”λ“œμ— μ»€μ„œκ°€ 갔을 λ•Œ μˆ«μžκ°’μ€ μ΄ˆκΈ°ν™”λ¨.
  • 숫자 μž…λ ₯ μ‹œ λ°”λ‘œ λ‹€μŒ 숫자λ₯Ό μž…λ ₯ν•  수 μžˆλŠ” 칸으둜 λ„˜μ–΄κ°. (idx+1)
  • 백슀페이슀 λˆ„λ₯Ό μ‹œ μ „μœΌλ‘œ λŒμ•„κ°.(idx-1)

✨CSS

.code {
  border-radius: 5px;
  font-size: 75px;
  height: 120px;
  width: 100px;
  border: 1px #eee solid;
  margin: 10px;
  text-align: center;
  font-weight: 300;
  -moz-appearance: textfield;
}

.code::-webkit-outer-spin-button,
.code::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.code:valid {
  border-color: #3498db;
  box-shadow: 0 10px 10px -5px rgba(0, 0, 0, 0.25);
}

❓-webkit-

-webkit- μ ‘λ‘μ‚¬λŠ” μ›Ήν‚·(WebKit) 엔진을 μ‚¬μš©ν•˜λŠ” μ›Ή λΈŒλΌμš°μ €μ—μ„œ CSS μ†μ„±μ΄λ‚˜ 가상 μš”μ†Œ 등을 지정할 λ•Œ μ‚¬μš©λ˜λŠ” 접두사닀. μ›Ήν‚· 엔진은 Safari, Chrome, Opera λΈŒλΌμš°μ € λ“±μ—μ„œ μ‚¬μš©λœλ‹€.

🫠-webkit-appearance

  • 이 속성은 λΈŒλΌμš°μ €κ°€ 기본적으둜 μ μš©ν•˜λŠ” μŠ€νƒ€μΌμ„ μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. 특히, 폼 μš”μ†Œ(예: input, button λ“±)의 μŠ€νƒ€μΌμ„ λ³€κ²½ν•  λ•Œ μœ μš©ν•˜κ²Œ μ‚¬μš©λœλ‹€.
  • μ›Ήν‚· 엔진을 μ‚¬μš©ν•˜λŠ” λΈŒλΌμš°μ €μ—μ„œ λ‚΄μž₯된 기본적인 UI μš”μ†Œμ˜ λͺ¨μ–‘κ³Ό μŠ€νƒ€μΌμ„ μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•  수 μžˆλ‹€.

μ—¬κΈ°μ„œ ::-webkit-outer-spin-button와 ::-webkit-inner-spin-buttonλŠ” number νƒ€μž…μ˜ input μš”μ†Œμ—μ„œ μ‚¬μš©μžκ°€ 숫자λ₯Ό μ‘°μ •ν•˜λŠ” μŠ€ν•€ λ²„νŠΌ(증가/κ°μ†Œ λ²„νŠΌ)을 μ˜λ―Έν•œλ‹€.
ν•΄λ‹Ή μ½”λ“œμ—μ„œ -webkit-appearance: none;을 μ‚¬μš©ν•˜λ©΄ μŠ€ν•€ λ²„νŠΌμ΄ μˆ¨κ²¨μ§€κ³ ,
margin: 0;을 μ‚¬μš©ν•˜μ—¬ μš”μ†Œ μ£Όλ³€μ˜ 여백을 없앨 수 μžˆλ‹€.

-moz-appearance: textfield

input μš”μ†Œμ— -moz-appearance: textfield;을 μ‚¬μš©ν•˜λ©΄
Firefox λΈŒλΌμš°μ €μ—μ„œ ν•΄λ‹Ή input μš”μ†Œμ˜ 기본적인 λΈŒλΌμš°μ € μŠ€νƒ€μΌμ„ 없앨 수 μžˆλ‹€.

❓:valid

.code:validλŠ” 폼 μš”μ†Œμ— μ‚¬μš©λ˜λŠ” μœ νš¨μ„± 검사에 μ˜ν•΄ μ μš©λœλ‹€.
이 μ˜ˆμ‹œμ—μ„œλŠ” .code 클래슀λ₯Ό 가진 μš”μ†Œκ°€ μœ νš¨ν•œ μƒνƒœμΈ 경우(예: μž…λ ₯ 값이 μš”κ΅¬ 쑰건을 μΆ©μ‘±ν•  λ•Œ), .code:valid μŠ€νƒ€μΌμ΄ μ μš©λ˜μ–΄ ν•΄λ‹Ή μš”μ†Œμ˜ ν…Œλ‘λ¦¬ 색상과 그림자 νš¨κ³Όκ°€ λ³€κ²½λœλ‹€.

즉, :valid 가상 μ„ νƒμžλŠ” μ‚¬μš©μžκ°€ μš”κ΅¬ν•˜λŠ” 쑰건에 맞게 μœ νš¨ν•œ 값이 μž…λ ₯λ˜μ—ˆμ„ λ•Œ μŠ€νƒ€μΌμ„ μ μš©ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€. λ°˜λŒ€λ‘œ, :invalid 가상 μ„ νƒμžλŠ” μ‚¬μš©μžκ°€ μœ νš¨ν•˜μ§€ μ•Šμ€ κ°’(μš”κ΅¬ν•˜λŠ” 쑰건을 μΆ©μ‘±ν•˜μ§€ μ•ŠλŠ” κ°’)을 μž…λ ₯ν–ˆμ„ λ•Œ μŠ€νƒ€μΌμ„ μ μš©ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.

profile
μ •μ‹ μ°¨λ € 이 κ°λ°•ν•œ μ„Έμƒμ†μ—μ„œ

0개의 λŒ“κΈ€