Como estilizar caixas de seleção com CSS sem usar bibliotecas?
sobes.tech IA
Resposta da IA
Para estilizar uma checkbox sem bibliotecas, pode usar uma combinação de esconder o elemento padrão e estilizar os pseudo-elementos ::before ou ::after associados ao <label> pai.
-
Esconder a checkbox padrão:
input[type="checkbox"] { display: none; /* ou visibility: hidden; height: 0; width: 0; */ } -
Criar um "quadrado" estilizado usando o pseudo-elemento
<label>:input[type="checkbox"] + label::before { content: ''; /* Necessário para mostrar o pseudo-elemento */ display: inline-block; width: 1em; /* Tamanho do quadrado */ height: 1em; /* Tamanho do quadrado */ border: 1px solid #ccc; /* Borda do quadrado */ margin-right: 0.5em; /* Espaço entre o quadrado e o texto */ vertical-align: middle; /* Alinhamento vertical */ /* Outros estilos opcionais: background-color, border-radius, box-shadow */ } -
Estilo para o estado marcado:
Usamos o seletor
checkedparainpute mudamos os estilos do pseudo-elementolabelem conformidade.input[type="checkbox"]:checked + label::before { background-color: #007bff; /* Cor de fundo quando marcado */ border-color: #007bff; /* Cor da borda quando marcado */ /* Outros estilos opcionais */ } -
Adicionar uma "marca" (ou outro indicador):
Pode usar um segundo pseudo-elemento (
::after) ou estilizar o existente::beforeusandobackground-image(svg, data-url) ou estilos de borda.Exemplo com
borderpara criar uma marca de verificação:input[type="checkbox"]:checked + label::after { content: ''; display: inline-block; width: 0.4em; /* Largura da linha da marca */ height: 0.7em; /* Altura da linha da marca */ border-right: 2px solid white; /* Parte direita da marca */ border-bottom: 2px solid white; /* Parte inferior da marca */ transform: rotate(45deg); /* Rotação para formar a marca */ position: absolute; /* Para posicionar dentro de ::before */ top: 0.1em; /* Ajuste de posição */ left: 0.3em; /* Ajuste de posição */ /* O elemento pai label::before pode precisar de position: relative; */ }
Para que o último exemplo funcione corretamente, adicione position: relative; a input[type="checkbox"] + label::before:
input[type="checkbox"] + label::before {
/* ... estilos anteriores ... */
position: relative; /* Adicionado para posicionar ::after */
}
Esta abordagem oferece controle total sobre a aparência da checkbox e uma boa acessibilidade, pois o elemento padrão ainda existe e reage às ações do usuário (clique, foco). É importante vincular input com label usando os atributos id e for para funcionamento correto ao clicar no texto do rótulo.
<input type="checkbox" id="myCheckbox">
<label for="myCheckbox">Concordo com os termos</label>