1. 입력값이 유효한지 알려줘야지~
- 우리는 사이트를 방문할 때 여러가지 입력창을 마주하게 된다.
- 그리고 특정 입력창은 사용자에게 요구하는 입력 데이터 형식이 있다.
- 만약 사용자가 입력한 값이 형식에 맞지 않다면, 형식에 맞지 않은 값이라는 걸 알려주는 게 중요하다.
💡 그렇다면, 어떻게 해야 사용자에게 값이 유효하지 않은지 알려줄 수 있을까?
- 이번 시간에는 사용자가 유효하지 않은 값을 입력했을 때, 그리고 값이 허용 범위를 벗어났을 때, 스타일을 달리 적용하는 방법을 알아보았다.
2. 유효성에 따라 스타일링하는 3가지 방법
(1) :invalid, :valid, 값 유효성에 따라 실시간 스타일링
:invalid
는 사용자가 입력한 값이 유효하지 않을 때 스타일이 적용된다.:valid
는 사용자가 입력한 값이 유효할 때 스타일이 적용된다.- 값이 유효하지 않다는 기준은 (1) 값이
pattern
에 어긋나거나, (2)required
인데 값이 없는 경우처럼 유효성 검사에 실패했을 때이다.
input:invalid {
border-color: red; /* 값이 유효하지 않다면, border색을 red로 지정한다 */
}
input:valid {
border-color: #b8d8d8; /* 값이 유효하다면, border색을 #b8d8d8로 지정한다 */
}
- 아래 예시는
:invalid
,:valid
로, 값 유효성 결과에 따라 스타일을 적용한 모습이다.
See the Pen invalid example 2 by KumJungMin (@kumjungmin) on CodePen.
(2) :xxx-range, 범위 내 값인지 따라 스타일링
:out-of-range
는 입력값이 특정 범위를 벗어난 경우 스타일이 적용된다.:in-range
는 입력값이 특정 범위에 속한 경우 스타일이 적용된다.- 단,
:out-of-range
,:in-range
는min
과max
속성이 설정된 input에서만 쓸 수 있다.
<input type="number" min="1" max="3" />
input:out-of-range {
background-color: red; /* 범위를 벗어난 경우, border색을 red로 지정한다 */
}
input:in-range {
background-color: green; /* 범위에 속한 경우, border색을 green로 지정한다 */
}
- 아래 예시는
:out-of-range
,:in-range
로, 스타일을 달리 준 모습이다.
See the Pen out-of-range, in-range example by KumJungMin (@kumjungmin) on CodePen.
어? 그런데
input
에required
속성을 지정한 경우 값이 없으면 유효성 검사가 실패인데,
왜:out-of-range
스타일이 적용되지 않는 걸까?
- 그 이유는 비교할 값이 없기 때문이다!
input
이required
상태이면, 입력값이 없는 경우 유효하지 않다고 간주한다.- 하지만
:out-of-range
,:in-range
는 “입력값이 특정 범위를 벗어났는지”에 따라 스타일이 적용된다. - 그래서 입력창에 값이 없으면 비교할 값이 없어,
:out-of-range
스타일이 적용되지 않는다.
(3) :user-xxx, 입력한 값이 유효한지 따라 스타일링
:user-invalid
는 사용자 상호작용 이후, 값이 유효하지 않을 때 스타일이 적용된다.:user-valid
는 사용자 상호작용 이후, 값이 유효할 때 스타일이 적용된다.- 값이 유효하지 않다는 기준은 (1) 값이
pattern
에 어긋나거나, (2)required
인데 값이 없는 경우처럼 유효성 검사에 실패했을 때이다.
:user-invalid {
border-color: red; /* 값이 유효하지 않다면, border색을 red로 지정한다 */
}
:user-valid {
border-color: green; /* 값이 유효하다면, border색을 green로 지정한다 */
}
- 아래 예시는
:user-invalid
로 값 유효성 결과에 따라 스타일을 적용한 모습이다.
See the Pen user-invalid example by KumJungMin (@kumjungmin) on CodePen.
💡 예시 코드를 보니,
:invalid
,:valid
와 동작이 같은데:user-invalid
,:user-valid
는 왜 필요한 걸까?
:invalid
와:user-invalid
의 가장 큰 차이점은 바로 “스타일 적용 시점”이다.:invalid
,:valid
는 사용자가 값을 입력할 때마다 즉시 스타일을 적용한다.- 그에 반해
:user-invalid
,:user-valid
는 사용자가 값을 입력한 후 상호작용을 해야, 그 다음부터 즉시 적용된다.
- 아래 예시 코드를 통해, 그 차이점을 한 번 확인해보자 🙂
See the Pen Untitled by KumJungMin (@kumjungmin) on CodePen.
2. 마치며…
- 이번 시간에는 잘못된 입력을 알려주는 3가지 CSS 선택자를 알아보았다.
:invalid
는 유효하지 않은 값을 가진 입력 필드에,:out-of-range
는 값이 특정 범위를 벗어난 입력 필드에,:user-invalid
는 사용자 상호작용 이후에 유효하지 않은 값을 가진 양식 요소에 스타일을 적용한다는 걸 알 수 있었다.- 만약 유효성에 따라 스타일을 달리 주어야 한다면, JS보다는 CSS 선택자를 사용해 간단히 구현해보자 :)
반응형
'개발 기술 > 사소하지만 놓치기 쉬운 개발 지식' 카테고리의 다른 글
[CSS] 확장자 제외하고, 파일명만 말줄임하는 방법(with. input file) (2) | 2024.05.05 |
---|---|
콘텐츠 접근이 가능한 아코디언을 만들어보자! (with. until-found, details) (0) | 2024.02.13 |
[CSS] 왜 transform 애니메이션 성능이 좋을까? (with. GPU, Reflow) (0) | 2023.11.28 |
키 타입을 보장할 수 있는 Map 객체(주의! array.map 아님) (0) | 2023.10.15 |
[html] 더 나은 사용자 입력을 위한 inputmode 속성 (0) | 2023.08.20 |
댓글