본문 바로가기
JavaScript

[JavaScript] 체크박스 커스텀하기

by teamnova 2023. 3. 4.
728x90

안녕하세요 이번 시간에는 html에서 기본적으로 제공되는 체크박스를 커스텀하는 방법을 알아보겠습니다.

 

아래의 코드는 input 태그를 안보이게 처리한 뒤 for 속성을 통해 label 태그와 연결하고 label을 커스텀 하는 형태입니다. 

 

index.html

label의 for와 input의 id 값을 일치시킴으로써 input과 label을 연결하였습니다.

<!doctype html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">    
    <link rel = "stylesheet" type = "text/css" href = "./index.css"/>
    <script defer = "defer" src = "./index.js"></script>
  </head>        
  <body>       
    <input type="checkbox" id = "custom_button" name = "" value="custom_value" class = "checkbox_class"/>
    <label for="custom_button" id = "custom_button_label" class = "checkbox_label">커스텀 버튼</label>       
  </body>
</html>

 

index.css

input 태그는 안보이게 처리한뒤 체크박스 버튼이 true일 때와 false일 때의 css class를 각각 작성합니다.

.checkbox_class {

    display : none;
}

.checkbox_label {

color : #404040;
background-color : #c0c0c0;    
border-radius : 1rem;
font-size : 12px;
line-height : 16px;
padding : 8px;
margin : 4px;    
text-align : center;
}

.checkbox_label:hover {

background-color : #A0A0A0;
}


.checkbox_label_click {

color : #FFFFFF;
background-color : #404040;    
border-radius : 1rem;
font-size : 12px;
line-height : 16px;
padding : 8px;
margin : 4px;    
text-align : center;
}

 

index.js

이후 input 태그를 클릭했을 때 true/false 여부에 따라 label의 css를 변경해주는 코드를 작성합니다.

// 체크박스 가져오기
const checkbox = document.getElementById("custom_button");

// 체크박스 클릭시 true/false 여부에 따라 색상 변하는 함수
function clickCheckbox(e) {

    
    // 해당 체크박스의 라벨 가져오기
    const label = document.getElementById(e.target.id+"_label");

    // 체크박스 값이 true일 경우
    if (e.target.checked == true) {
        
        label.classList.replace('checkbox_label', 'checkbox_label_click');       
        
    }
    // false일 경우
    else {        

        label.classList.replace('checkbox_label_click', 'checkbox_label');               
    }
}

// 체크박스 클릭 이벤트
checkbox.addEventListener('click', (e) => {

    clickCheckbox(e);
       
})

 

코드를 실행하면 아래와 같이 표시됩니다.