Está é apena uma das muitas maneiras de customizar um elemento do tipo #checkbox com o #bootstrap
Código completo;
<!doctype html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-4bw+/aepP/YC94hEpVNVgiZdgIC5+VKNBQNGCHeKRQN+PtmoHDEXuppvnDJzQIu9" crossorigin="anonymous">
<style media="screen">
.circle_example {
width: 50px;
height: 50px;
border-radius: 50%;
padding: 10px;
text-align: center;
border: solid 1px #ccc;
}
</style>
</head>
<body>
<div class="container">
<div class="row mb-3">
<div class="col-12">
<h1 class="display-5 text-center bg-light my-3 py-3">Checkboxes cutomizados com bootstrap 5</h1>
<hr>
</div>
</div>
<form class="" action="post.php" method="post">
<div class="row" id="box_checkboxes">
<div class="col">
<label for="input_chk_1" class="d-block p-3 rounded shadow h-100">
<input data-class="bg-warning" checked type="checkbox" id="input_chk_1" name="input_chk_1" value="1" class="chk_custom" /> bg-warning example
</label>
</div>
<div class="col">
<label for="input_chk_2" class="d-block p-3 rounded shadow h-100">
<input data-class="bg-success" type="checkbox" id="input_chk_2" name="input_chk_2" value="2" class="chk_custom" /> bg-success example
</label>
</div>
<div class="col">
<label for="input_chk_3" class="d-block p-3 rounded shadow h-100">
<input checked data-class="bg-info" type="checkbox" id="input_chk_3" name="input_chk_3" value="3" class="chk_custom" /> bg-info example
</label>
</div>
<div class="col">
<label for="input_chk_4" class="d-block p-3 rounded shadow h-100">
<input data-class="border border-success" type="checkbox" id="input_chk_4" name="input_chk_4" value="4" class="chk_custom" /> bg-info example
</label>
</div>
<div class="col-12">
<div class="row mt-3 text-center">
<div class="col">
<label for="input_chk_5" class="circle_example" id="input_chk_5_label">
<input data-hidden-chk="true" data-class="border border-success" type="checkbox" id="input_chk_5" name="input_chk_5" value="5" class="chk_custom" /> 1
</label>
</div>
<div class="col">
<label for="input_chk_6" class="circle_example" id="input_chk_6_label">
<input data-hidden-chk="true" data-class="bg-success text-white fw-bolder" type="checkbox" id="input_chk_6" name="input_chk_6" value="5" class="chk_custom" /> 10
</label>
</div>
<div class="col">
<label for="input_chk_7" class="circle_example" id="input_chk_7_label">
<input data-hidden-chk="true" data-class="bg-danger text-white fw-bolder" type="checkbox" id="input_chk_7" name="input_chk_7" value="5" class="chk_custom" /> M
</label>
</div>
<div class="col">
<label for="input_chk_8" class="circle_example" id="input_chk_8_label">
<input data-hidden-chk="true" data-class="bg-dark text-white fw-bolder" type="checkbox" id="input_chk_8" name="input_chk_8" value="5" class="chk_custom" /> BO
</label>
</div>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col-12">
<input class="btn w-100 btn-success" type="submit" name="" value="Salvar">
</div>
</div>
</form>
</div>
<script type="text/javascript">
let divPai = document.getElementById('box_checkboxes');
divPai.addEventListener('change', function(e) {
let hasClass = e.target.classList.contains('chk_custom');
if (e.target.type === 'checkbox' && hasClass) {
toggleCheckboxBackground(e.target);
}
});
function renderCheckboxes() {
const checkboxes = document.querySelectorAll('#box_checkboxes input[type="checkbox"]');
checkboxes.forEach((item, i) => {
toggleCheckboxBackground(item);
});
}
function toggleCheckboxBackground(checkbox) {
const parentElement = checkbox.parentElement;
const classParentElement = checkbox.getAttribute('data-class').split(' ');
let isHidden = (checkbox.getAttribute('data-hidden-chk') == 'true');
console.log(isHidden);
parentElement.classList.add(...classParentElement);
if (isHidden) {
checkbox.style.display = 'none';
}
if (!checkbox.checked) {
parentElement.classList.remove(...classParentElement);
}
}
document.addEventListener("DOMContentLoaded", function(event) {
renderCheckboxes();
});
</script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-HwwvtgBNo3bZJJLYd8oVXjrBZt8cqVSpeBNS5n7C8IVInixGAoxmnlMuBnhbgrkm" crossorigin="anonymous"></script>
</body>
</html>
Para esconder o elemento uma dica é utilizar o data-hidden-chk="true"