CSS 폼 생성기
폼은 대부분의 사이트에서 가장 많이 만지는 부분이자 많은 곳에서 가장 덜 다듬어진 부분입니다. 이 생성기는 일관된 시각 스타일로 완전한 스타일링 폼의 CSS를 출력합니다: 반응형 폼 그리드, 레이블 + 입력 쌍, 텍스트영역, 셀렉트, 그리고 또렷한 포커스 상태를 포함합니다. 액센트 색상, 모서리 반경, 간격을 설정한 뒤 스타일시트를 복사하세요. CSS는 네이티브 폼 시맨틱을 유지하므로 검증, 키보드 사용, 스크린 리더가 모두 동작합니다.
생성기 사용 방법
-
1
액센트 색상 설정
액센트 색상이 모든 필드의 포커스 링과 테두리 색상을 결정합니다.
-
2
모서리 반경 선택
반경은 입력, 텍스트영역, 셀렉트에 적용되어 모두 같은 모양을 공유합니다.
-
3
간격 설정
간격은 폼 그리드에서 필드 사이의 세로 공간을 조절합니다.
-
4
CSS 복사
HTML을 건드리지 않고 붙여넣고 변형할 수 있는 완전한 스타일시트.
기본 폼
<form class="form">
<label class="field">
<span class="field-label">Email</span>
<input type="email" required>
<span class="field-error">Please enter a valid email.</span>
</label>
<label class="field">
<span class="field-label">Password</span>
<input type="password" minlength="8" required>
</label>
<button type="submit" class="button">Sign up</button>
</form>
.field {
display: block;
margin-bottom: 1.25rem;
}
.field-label {
display: block;
font-weight: 500;
margin-bottom: .25rem;
}
.field input {
width: 100%;
padding: .5rem .75rem;
font: inherit;
border: 1px solid #d1d5db;
border-radius: 6px;
background: #fff;
transition: border-color 120ms, box-shadow 120ms;
}
.field input:focus-visible {
outline: none;
border-color: #2563eb;
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);
}
.field input:invalid:not(:placeholder-shown) {
border-color: #dc2626;
}
.field-error { display: none; color: #dc2626; font-size: .875rem; margin-top: .25rem; }
.field input:invalid:not(:placeholder-shown) ~ .field-error { display: block; }
흔한 네 가지 스타일
| 스타일 | 무엇인가 | 적합한 곳 |
|---|---|---|
| 외곽선 | 입력 둘레의 테두리, 투명 배경 | 데스크톱 폼, 밀집 레이아웃 |
| 밑줄 | 아래쪽 테두리만 | 미니멀 / 에디토리얼 UI |
| 채움 | 회색 배경, 테두리 없음 | Material Design 영향 UI |
| 플로팅 레이블 | 레이블이 안에 있다가 focus/값에 위로 애니메이션 | 모바일 우선, 랜딩 페이지 |
플로팅 레이블이 가장 예쁘지만 빈 상태 감지를 위해 추가 마크업이나 JavaScript가 필요합니다. 외곽선이 가장 범용적입니다.
접근성 체크리스트
- 모든 입력에 보이는 레이블. placeholder를 유일한 레이블로 쓰지 마세요, focus 시 사라지고 대비에 실패합니다.
<label for>또는 감싸는<label>. 둘 다 유효하며, 감싸는 쪽이 약간 더 쉽습니다.- 포커스 표시. 대체 없이
outline: none을 절대 쓰지 마세요. 키보드 사용자에게 필요합니다. - 오류 메시지: 입력에
aria-describedby로 연결하세요. 오류를 색으로만 표시하지 마세요, 텍스트 메시지나 아이콘을 포함하세요. - 필수 필드:
required속성을 쓰세요. 시각 사용자를 위해 레이블에 시각 표시(별표)를 추가하세요. - 입력 타입:
type="email",type="tel",type="url",type="number"를 쓰세요. 모바일 키보드가 적응합니다. autocomplete속성:autocomplete="email",autocomplete="current-password"등. 사용자의 입력을 많이 줄여줍니다.
네이티브 검증 상태
CSS에는 폼 유효성을 위한 의사 클래스가 있습니다:
:required/:optional:valid/:invalid:in-range/:out-of-range(min/max가 있는 숫자 입력용):placeholder-shown(비어 있음, placeholder 보임):user-invalid(유효하지 않고 그리고 사용자가 상호작용함, 오류 스타일에 맞는 것)
:user-invalid 의사 클래스는 사용자가 무언가 한 뒤에만 오류를 보여주는 가장 깔끔한 방법으로, 상호작용 전 빨간 테두리를 피합니다. 2023년 무렵 모든 주요 브라우저에 지원이 들어왔습니다.
비활성화 상태
.field input:disabled {
background: #f3f4f6;
color: #9ca3af;
cursor: not-allowed;
}
비활성화된 입력은 포커스도 제출도 되지 않습니다. 스크린 리더용으로 포커스 가능하게 하려면 readonly를 쓰세요, 폼이 값을 제출하지만 사용자는 편집할 수 없습니다.
자주 묻는 질문
아니요. placeholder는 사용자가 입력하는 즉시 사라지므로 레이블 역할을 할 수 없습니다. 또한 placeholder 텍스트는 보통 대비가 낮아 WCAG에 실패합니다. 보이는 레이블에 형식 힌트용 선택적 placeholder를 더하세요.
:invalid가 빈 필수 필드에 즉시 적용되기 때문입니다. (상호작용 인식) :user-invalid를 쓰거나, 구형 브라우저에서는 :invalid:not(:placeholder-shown)을 우회책으로 조합하세요.
appearance: none을 설정하고 기본 화살표를 제거한 뒤, 배경 이미지나 의사 요소 화살표가 있는 감싸는 span으로 직접 추가하세요. 안의 옵션 목록은 OS 스타일로 남고 CSS로 커스터마이즈할 수 없습니다.
둘 다요. HTML 검증(required, type, pattern)은 JavaScript 없이 단순한 경우를 잡습니다. JavaScript는 복잡한 규칙(비밀번호 강도, 필드 간 의존성)을 처리합니다. 항상 서버 검증도 하세요, 클라이언트 검증은 UX용이지 보안용이 아닙니다.
관련 도구
ASCII 표 참조
NUL, LF, DEL 같은 제어 문자를 포함해 모든 문자에 대한 10진수, 16진수, 8진수, 2진수, HTML 숫자 문자 참조를 담은 0부터 127까지의 전체 ASCII 표.
키보드 단축키 참고표
macOS, Windows, Linux에서 VS Code, Chrome, GNU Readline을 쓰는 Bash의 문서화된 기본 단축키를 검색합니다.
HTML 문자 참조
HTML 엔티티의 검색 가능한 목록, 각 엔티티의 이름 및 숫자 코드, 그리고 특수 문자 및 기호에 대한 1클릭 복사 기능을 제공합니다.
보색 찾기
어떤 입력에 대해서도 보색을 찾습니다. HSL 반대 색, 분할 보색 쌍, 그리고 접근성 있는 조합 제안을 반환합니다.
랜덤 영어 글자 생성기
A-Z 영어 글자를 무작위로 생성합니다. 개수와 대문자, 소문자, 혼합 대소문자를 선택해 게임, 과제, 수업 활동에 활용하세요.
랜덤 색상 팔레트 생성기
2~15개의 색상으로 랜덤 팔레트를 만들고, 비비드, 파스텔, muted, dark 스타일을 선택한 뒤 HEX 코드나 CSS 변수를 복사하세요.