41_Verify Account UI
π» μ£Όμ : μ΄λ©μΌ νμΈ μ½λ μ λ ₯ UI
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 )
}
})
})
.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) μμ§μ μ¬μ©νλ μΉ λΈλΌμ°μ μμ CSS μμ±μ΄λ κ°μ μμ λ±μ μ§μ ν λ μ¬μ©λλ μ λμ¬λ€. μΉν· μμ§μ Safari, Chrome, Opera λΈλΌμ°μ λ±μμ μ¬μ©λλ€.
μ¬κΈ°μ ::-webkit-outer-spin-buttonμ ::-webkit-inner-spin-buttonλ number νμ μ input μμμμ μ¬μ©μκ° μ«μλ₯Ό μ‘°μ νλ μ€ν λ²νΌ(μ¦κ°/κ°μ λ²νΌ)μ μλ―Ένλ€.
ν΄λΉ μ½λμμ -webkit-appearance: none;μ μ¬μ©νλ©΄ μ€ν λ²νΌμ΄ μ¨κ²¨μ§κ³ ,
margin: 0;μ μ¬μ©νμ¬ μμ μ£Όλ³μ μ¬λ°±μ μμ¨ μ μλ€.
input μμμ -moz-appearance: textfield;μ μ¬μ©νλ©΄
Firefox λΈλΌμ°μ μμ ν΄λΉ input μμμ κΈ°λ³Έμ μΈ λΈλΌμ°μ μ€νμΌμ μμ¨ μ μλ€.
.code:validλ νΌ μμμ μ¬μ©λλ μ ν¨μ± κ²μ¬μ μν΄ μ μ©λλ€.
μ΄ μμμμλ .code ν΄λμ€λ₯Ό κ°μ§ μμκ° μ ν¨ν μνμΈ κ²½μ°(μ: μ
λ ₯ κ°μ΄ μꡬ 쑰건μ μΆ©μ‘±ν λ), .code:valid μ€νμΌμ΄ μ μ©λμ΄ ν΄λΉ μμμ ν
λ리 μμκ³Ό κ·Έλ¦Όμ ν¨κ³Όκ° λ³κ²½λλ€.
μ¦, :valid κ°μ μ νμλ μ¬μ©μκ° μꡬνλ 쑰건μ λ§κ² μ ν¨ν κ°μ΄ μ λ ₯λμμ λ μ€νμΌμ μ μ©νκΈ° μν΄ μ¬μ©λλ€. λ°λλ‘, :invalid κ°μ μ νμλ μ¬μ©μκ° μ ν¨νμ§ μμ κ°(μꡬνλ 쑰건μ μΆ©μ‘±νμ§ μλ κ°)μ μ λ ₯νμ λ μ€νμΌμ μ μ©ν μ μλλ‘ ν΄μ€λ€.