정의 및 사용 방법
<input> 태그의 type="checkbox"는 체크박스를 나타냅니다.
단일한 값으로 체크와 취소를 번갈아가며 할 수 있는 컨트롤입니다.
일반적으로 정사각형이지만 모서리가 둥글게 되어 있을 수도 있습니다.
기본 예제
<label for="opt-in">이메일 수신 동의</label>
<input type="checkbox" id="opt-in">
<input type="checkbox">의 암시적인 role 속성의 값은 checkbox입니다.
관련 속성 사용하기
<input type="checkbox">와 관련된 속성에 대해 알아보겠습니다.
checked 속성
checked 속성은 체크박스가 기본적으로 체크되어 있는지 여부를 나타내는 속성입니다. 페이지가 처음 로드될 때 체크박스가 체크된 상태로 시작하려면 checked 속성을 사용합니다. 하지만 페이지가 로드된 후 사용자가 체크박스를 체크하거나 체크 해제해도 checked 속성은 변경되지 않습니다.
이 속성은 부울 속성(boolean attribute)입니다. 값을 별도로 작성하지 않고 속성만 작성합니다.
<input type="checkbox" checked>
disabled 속성
체크박스를 비활성시키려면 disabled 속성을 사용하세요.
이 속성은 부울 속성(boolean attribute)입니다. 값을 별도로 작성하지 않고 속성만 작성합니다.
<input type="checkbox" disabled>
required 속성
required 속성은 폼 제출 시 사용자가 사전에 반드시 체트박스에 체크해야 하는 필수(required) 컨트롤 요소임을 나타냅니다. 이 속성은 부울 속성(boolean attribute)입니다. 값을 별도로 작성하지 않고 속성만 작성합니다.
<form>
<label for="opt-in">이메일 수신 동의(*필수)</label>
<input type="checkbox" id="opt-in" required> <!-- 필수 입력 필드로 지정 -->
<button type="submit">제출</button>
</form>
브라우저가 필수 입력에 대한 오류 메시지를 표시하는 것을 확인할 수 있습니다.
value 속성
value 속성은 초깃값을 설정합니다.
폼 제출 시 해당 요소가 체크된 상태인 경우에만 전송되는 값을 지정합니다. 이 값이 지정되지 않으면 폼 제출 시 해당 요소가 체크된 상태인 경우 기본값인 on 문자열이 사용됩니다.
<form>
<label for="opt-in">이메일 수신 동의</label>
<input type="checkbox" id="opt-in" name="opt-in" value="email-checked">
<button type="submit">제출</button>
</form>
name 속성
name 속성은 해당 요소의 이름을 나타냅니다.
name 속성이 지정되어 있으면, 그 값을 참조하여 폼 제출 시 전송되는 데이터의 이름으로 사용됩니다. 자바스크립트에서도 name 속성의 값을 참조하여 해당 요소의 form.elements API의 이름으로 사용됩니다.
여러 개의 체크박스를 그룹화하기
name 속성은 <input type="checkbox">에서 여러 개의 체크박스를 같이 묶어 사용할 수 있습니다.
동일한 name 값을 가진 여러 체크박스를 함께 묶어 그룹화하면, 폼이 제출될 때 선택된 체크박스들의 value 값은 같은 name을 공유하면서도 각기 다른 값으로 전송됩니다.
관련성이 있는 여러 개의 체크박스를 같은 그룹으로 묶으면, 마크업 구조상으로나 전송되는 데이터상으로나 사용자가 어떤 특정 체크박스 그룹에 속하는 것을 체크했는지 쉽게 파악할 수 있다는 장점이 있습니다.
지금까지 본 코드 예제들은 하나의 체크박스에 관련된 것입니다. 실제로 여러 개의 체크박스를 처리하는 코드를 살펴보겠습니다.
다음 예제에는 사용자가 관심이 있는 웹 개발 언어를 선택할 수 있도록 여러 개의 체크박스가 있습니다. 예제처럼 <fieldset> 태그로 체크박스를 그룹화할 수 있습니다. 이때, 그룹화된 체크박스는 동일한 name 값을 가지며, 각기 다른 value 값을 가집니다. 여러 개의 체크박스를 그룹화했지만, 사용자는 하나의 체크박스만 선택하는 것이 아니라, 원하는 만큼 여러 개의 체크박스를 선택할 수 있습니다.
<fieldset>
<legend>관심이 있는 웹 개발 언어를 선택하세요.</legend>
<div>
<input type="checkbox" id="html" name="favorite" value="html">
<label for="html">HTML</label>
</div>
<div>
<input type="checkbox" id="css" name="favorite" value="css">
<label for="css">CSS</label>
</div>
<div>
<input type="checkbox" id="js" name="favorite" value="js">
<label for="js">JavaScript</label>
</div>
</fieldset>
코드 부연설명
<legend> 태그는 부묘 요소인 <fieldset> 태그로 그룹화해서 세트로 묶은 요소들에 대한 캡션(간단한 제목이나 설명)을 나타내기 위해 사용하는 태그입니다.
라디오 버튼과의 차이점
라디오 버튼은 체크박스와 유사하지만 중요한 차이점이 있습니다.
라디오 버튼은 <input type="radio">로 나타냅니다.
단일한 컨트롤에 체크와 체크 해제 차이점
| 체크박스 | 단일한 체크박스에 번갈아가며 체크와 체크 해제를 할 수 있습니다. |
|---|---|
| 라디오 버튼 | 단일한 라디오 버튼에 번갈아가며 체크와 체크 해제를 할 수 없습니다. |
<input type="checkbox">
<input type="radio">
그룹화의 차이점
체크박스와 라디오 버튼을 그룹화할 때는, 그룹화할 항목에 동일한 name 속성 값을 지정해야 하며, 각 항목의 value 속성 값은 서로 달라야 한다는 공통점이 있습니다.
하지만, 그룹화된 체크박스는 사용자가 여러 개를 선택할 수 있는 반면, 그룹화된 라디오 버튼은 하나만 선택할 수 있다는 차이점이 있습니다.
그룹화된 체크박스
<fieldset>
<legend>관심이 있는 웹 개발 언어를 선택하세요.</legend>
<div>
<input type="checkbox" id="html" name="interest" value="html">
<label for="html">HTML</label>
</div>
<div>
<input type="checkbox" id="css" name="interest" value="css">
<label for="css">CSS</label>
</div>
<div>
<input type="checkbox" id="js" name="interest" value="js">
<label for="js">JavaScript</label>
</div>
</fieldset>
그룹화된 라디오 버튼
<fieldset>
<legend>관심이 있는 웹 개발 언어를 선택하세요.</legend>
<div>
<input type="radio" id="html" name="interest" value="html">
<label for="html">HTML</label>
</div>
<div>
<input type="radio" id="css" name="interest" value="css">
<label for="css">CSS</label>
</div>
<div>
<input type="radio" id="js" name="interest" value="js">
<label for="js">JavaScript</label>
</div>
</fieldset>
그룹화된 체크박스에서 required 속성 사용
체크박스 그룹 전체를 필수 항목으로 지정하려면,
그룹 내에서 최소한 하나의 체크박스를 선택해서 required 속성 적용하면 됩니다. 이렇게 하면, 체크박스 그룹 전체가 필수 항목으로 그룹핑됩니다. 하지만, 코드의 가독성 측면에서는 체크박스 그룹에 속해 있는 모든 체크박스에 required 속성을 적용하는 것을 권장합니다.
그룹 내에서 최소한 하나의 체크박스에 지정
체크박스 그룹 내에서 최소한 하나의 체크박스를 선택해서 required 속성 적용하면 체크박스 그룹 전체가 필수 항목으로 그룹핑됩니다.
<form>
<fieldset>
<legend>관심이 있는 웹 개발 언어를 선택하세요. (최소 1개 선택)</legend>
<div>
<input type="checkbox" id="html" name="favorite" value="html" required> <!-- 그룹 내에서 최소한 하나의 체크박스를 선택 -->
<label for="html">HTML</label>
</div>
<div>
<input type="checkbox" id="css" name="favorite" value="css">
<label for="css">CSS</label>
</div>
<div>
<input type="checkbox" id="js" name="favorite" value="js">
<label for="js">JavaScript</label>
</div>
<button type="submit">제출</button>
</fieldset>
</form>
브라우저가 필수 입력에 대한 오류 메시지를 표시하는 것을 확인할 수 있습니다.
가독성을 위해 그룹 내에 속한 모든 체크박스에 지정
코드의 가독성 측면에서는 체크박스 그룹에 속해 있는 모든 체크박스에 required 속성을 적용하는 것이 더 좋습니다.
<form>
<fieldset>
<legend>관심이 있는 웹 개발 언어를 선택하세요. (최소 1개 선택)</legend>
<div>
<input type="checkbox" id="html" name="favorite" value="html" required>
<label for="html">HTML</label>
</div>
<div>
<input type="checkbox" id="css" name="favorite" value="css" required>
<label for="css">CSS</label>
</div>
<div>
<input type="checkbox" id="js" name="favorite" value="js" required>
<label for="js">JavaScript</label>
</div>
<button type="submit">제출</button>
</fieldset>
</form>
브라우저가 필수 입력에 대한 오류 메시지를 표시하는 것을 확인할 수 있습니다.
접근성 고려 사항
<input type="checkbox">를 사용할 때에는 <label>을 함께 사용해야 합니다.
자세한 사항은 <input> 태그의 접근성 고려 사항을 참조하세요.
브라우저 호환성
| 속성 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
|---|---|---|---|---|
<input type="checkbox"> |
1 | 12 | 1 | 1 |
checked
|
1 | 12 | 1 | 1 |
disabled
|
1 | 12 | 1 | 1 |
name
|
1 | 12 | 1 | 1 |
value
|
1 | 12 | 1 | 1 |
명세서
| 명세서 사양 | |
|---|---|
<input type="checkbox">
|
HTML Standard #checkbox-state-(type=checkbox) |