실무에 바로 적용할 수 있는 웹 제작 꿀팁 및 유용한 자료실 공간입니다.
나눔웹이 제공하는 핵심 노하우와 마케팅 인사이트를 자유롭게 활용해 보십시오.

나눔웹 UI/UX 꿀팁

폼 에러가 입력 전에 뜨는 문제, :user-invalid로 고치는 법

문의 페이지를 열자마자 필수 입력란이 벌써 빨간 테두리로 보이는 사이트, 한 번쯤 보셨을 겁니다.
원인은 대부분 CSS에서 :invalid를 바로 쓴 경우입니다. :user-invalid로 바꾸면 사용자가 필드를 건드린 뒤에만 에러 스타일이 붙습니다.

💡 왜 :invalid만 쓰면 어색할까요?

막 들어온 방문자는 아직 아무것도 입력하지 않았습니다. 빨간 테두리가 먼저 보이면 “내가 뭘 잘못했지?”라는 인상만 남깁니다. :user-invalid는 포커스를 잃었거나 전송을 시도한 뒤에야 맞물리므로, 검증은 그대로 두고 타이밍만 사람 기준으로 맞출 수 있습니다.

1. :invalid 대신 :user-invalid로 바꾸기

에러 테두리는 :user-invalid에 걸고, HTML의 required·type="email"·pattern은 그대로 둡니다. 검증 규칙은 브라우저가 계산하고, 보이는 타이밍만 조정합니다. 크롬·엣지 119+, 사파리 16.5+, 파이어폭스 88+에서 쓸 수 있습니다.

/* 비추천: 열자마자 빨간 테두리 */
input:invalid { border-color: #cc2b2b; }

/* 추천: 입력·이탈·전송 후에만 */
input:user-invalid,
textarea:user-invalid,
select:user-invalid {
  border-color: #cc2b2b;
  background: #fff5f5;
}

input:user-valid {
  border-color: #2e7d32;
}

2. 에러 문구도 같은 타이밍에 보이기

안내 문구도 같은 선택자로 묶습니다. 사용자가 필드를 떠난 뒤에야 나타나고, 값을 고치면 바로 사라집니다. 전송 버튼을 눌렀을 때도 브라우저는 상호작용으로 보므로 스타일이 적용됩니다.

<label for="email">이메일</label>
<input id="email" name="email"
       type="email" required>
<p class="err">올바른 이메일을 입력해 주세요.</p>

<style>
.err { display: none; color: #cc2b2b; }
input:user-invalid + .err {
  display: block;
}
</style>

3. 같이 챙길 점

구형 브라우저가 남았다면 blur 때 클래스를 붙이는 방식을 폴백으로 두면 됩니다. 스크린 리더용 aria-invalid는 CSS만으로는 맞춰지지 않으니, 접근성까지 챙길 때는 blur·input에서 동기화 스크립트가 필요합니다. 스타일만 정리할 때는 CSS 교체만으로도 체감이 큽니다.

"에러는 틀렸을 때 보여 주면 됩니다. 들어오자마자 보여줄 필요는 없습니다."

나눔웹은 문의·신청 폼을 만들 때 검증 타이밍과 안내 문구까지 같이 맞춰,
방문자가 시작하기도 전에 위축되지 않게 손봅니다.


List of Articles
번호 분류 제목 글쓴이
80 웹 성능 홈페이지 로딩 속도를 3배 높이는 '이미지 최적화' 실무 가이드 나눔웹
79 퍼블리싱 CSS 변수로 유지보수와 테마 기능을 한 번에! (CSS Custom Properties) 나눔웹
78 마케팅 카카오톡 링크 썸네일의 비밀! 클릭률을 높이는 '오픈 그래프(OG)' 세팅법 나눔웹
77 모바일 모바일 꽉 찬 화면 하단 짤림 현상! '100vh'의 함정과 완벽 해결법 나눔웹
76 웹 성능 홈페이지 첫 화면 글자 깜빡임(투명 현상) 1초 만에 해결하는 법 나눔웹
75 퍼블리싱 스마트폰에서 로고가 흐리게 보인다고요? 'SVG' 포맷이 정답입니다. 나눔웹
74 웹 성능 클릭 실수 유발하는 '화면 덜컹거림(CLS)', 단 한 줄로 해결하는 법 나눔웹
73 모바일 고객의 이탈을 막는 1초 디테일, '모바일 맞춤형 키보드' 세팅법 나눔웹
72 UI/UX 모바일에서 버튼 누를 때 생기는 촌스러운 '회색 박스' 없애는 법 나눔웹
71 UI/UX 레이아웃을 망치는 긴 글, 예쁘게 '...'으로 자르는 마법의 CSS 나눔웹
70 UI/UX 상단 메뉴에 제목이 가려진다고요? '부드러운 스크롤' 마법의 2줄 나눔웹
69 모바일 아이폰에서 입력창 누를 때 화면 '자동 확대'되는 현상 막는 법 나눔웹
68 퍼블리싱 지저분한 모바일 스크롤바, 기능은 남기고 쏙 숨기는 마법의 CSS 나눔웹
67 모바일 모바일 웹을 진짜 '앱(App)'처럼! 이미지 꾹 누를 때 뜨는 팝업 막기 나눔웹
66 UI/UX 애플(Apple) 사이트처럼 고급스러운 '반투명 유리' 메뉴 만드는 법 나눔웹
65 퍼블리싱 무거운 플러그인 NO! 넷플릭스처럼 쫀득한 '가로 스와이프' CSS로 뚝딱 만들기 나눔웹
64 UI/UX 1%의 디테일이 브랜딩을 완성합니다! '텍스트 드래그 색상' 바꾸기 나눔웹
63 UI/UX 투박한 파란색 체크박스는 그만! 단 1줄로 우리 회사 컬러 입히기 나눔웹
62 모바일 하단 고정 버튼이 아이폰 '검은 줄'에 겹친다면? (Safe Area 대응법) 나눔웹
61 모바일 앗, 실수로 새로고침! 튕기는 모바일 화면 꽉 잡는 법 (Overscroll) 나눔웹
Board Pagination Prev 1 2 3 4 Next
/ 4
rhwlsghkcocndgus XE2.1.39 STAGE1.5.4