Caixas de seleção em páginas da web - como torná-las maiores?

114

As caixas de seleção padrão renderizadas na maioria dos navegadores são bem pequenas e não aumentam de tamanho, mesmo quando uma fonte maior é usada. Qual é a melhor maneira independente de navegador de exibir caixas de seleção maiores?

Tony o Pônei
fonte

Respostas:

144

Caso isso possa ajudar alguém, aqui está o CSS simples como um ponto de partida. Transforma-o em um quadrado arredondado básico, grande o suficiente para polegares com uma cor de fundo alternada.

input[type='checkbox'] {
    -webkit-appearance:none;
    width:30px;
    height:30px;
    background:white;
    border-radius:5px;
    border:2px solid #555;
}
input[type='checkbox']:checked {
    background: #abd;
}
<input type="checkbox" />

Paulo
fonte
@GabrielW Isso mesmo. Basta usar o equivalente para os outros
taylorcressy
@taylorcressy Exceto para IE (também IE 11) caniuse.com/#search=Appearance - mas funcionou bem para outros navegadores. Obrigado!
CodeBrauer
16
seria bom se houvesse um carrapato dentro também :)
robert king
@Paul: Obrigado por compartilhar. Eu queria saber como você lida com a exibição da marca de seleção. Com o fundo apenas definido para uma cor, a marca de seleção branca na caixa não está mais visível. Existe uma solução fácil? Eu tentei adicionar uma entidade html para a verificação em a: before, mas me perguntando se há uma alternativa
PBandJen
1
Usei uma cor mais escura para a cor de fundo quadriculada e não é tão ruim sem uma "marca"
JR Lawhorne
47

Na verdade, existe uma maneira de torná-los maiores, caixas de seleção como qualquer outra coisa (até mesmo um iframe como um botão do Facebook).

Envolva-os em um elemento "ampliado":

.double {
  zoom: 2;
  transform: scale(2);
  -ms-transform: scale(2);
  -webkit-transform: scale(2);
  -o-transform: scale(2);
  -moz-transform: scale(2);
  transform-origin: 0 0;
  -ms-transform-origin: 0 0;
  -webkit-transform-origin: 0 0;
  -o-transform-origin: 0 0;
  -moz-transform-origin: 0 0;
}
<div class="double">
  <input type="checkbox" name="hello" value="1">
</div>

Pode parecer um pouco "redimensionado", mas funciona.

Claro que você pode fazer esse div float: left e colocar seu rótulo ao lado dele, float: left também.

FlorianB
fonte
1
Observe que no Firefox (a partir da versão 36), isso resultará em uma aparência muito borrada. Ele se adapta bem no Chrome, no entanto. Demo: jsfiddle.net/tzp858j3
Kat
não há solução melhor que NÃO pareça dimensionada?
basZero
3
Não pode zoom: 2e pode transform: scale(2)ser aplicado diretamente à caixa de seleção? Por que ele precisa de um invólucro?
Atav32
Obrigado! Parece que seu código leva mais navegadores em consideração do que eu poderia testar, mas funciona em tudo que tentei. Especialmente bom no meu I-phone, onde as caixas de seleção quase se transformam em pontos! BTW, você pode colocar escala fracionária menor (como 1,5) nos lugares onde este recorte coloca "2" e para uma caixa de seleção de tamanho médio.
Randy
26

Experimente este CSS

input[type=checkbox] {width:100px; height:100px;}
Collin White
fonte
2
Não totalmente cross-browser (é melhor definir uma classe em HTML e usar o seletor de classe em CSS), mas esta pode ser uma solução melhor do que a minha. +1
Harmen
1
Eu estava usando largura e altura para fins de exemplo. Provavelmente uma combinação de Harmen e minha solução é o caminho a seguir, pois você pode precisar de mais estilo do que o CSS pode razoavelmente fornecer.
Collin White
6
Isso só funcionará em alguns navegadores, e não em muitos navegadores modernos.
RJ Owen
1
Isso funciona no ipad safari, onde as caixas de seleção geralmente precisam ser maiores para facilitar o clique dos usuários.
user3032973
3
A principal limitação é que ele não funciona no Firefox (a partir do Firefox 36) e, na verdade, parecerá pouco natural (a caixa de seleção é de tamanho normal, mas o preenchimento em torno dela preenche a área de 100 x 100px.
Kat
5

Tentei mudar o paddinge margine bem como o widthe height, e finalmente descobri que se você apenas aumentar a escala, vai funcionar:

input[type=checkbox] {
    transform: scale(1.5);
}
Justin
fonte
1

Aqui está um truque que funciona nos navegadores mais recentes (IE9 +) como uma solução somente CSS que pode ser aprimorada com javascript para oferecer suporte ao IE8 e versões anteriores.

<div>
  <input type="checkbox" id="checkboxID" name="checkboxName" value="whatever" />
  <label for="checkboxID"> </label>
</div>

Defina o estilo labelcom o que você deseja que a caixa de seleção fique

#checkboxID
{
  position: absolute fixed;
  margin-right: 2000px;
  right: 100%;
}
#checkboxID + label
{
  /* unchecked state */
}
#checkboxID:checked + label
{
  /* checked state */
}

Para javascript, você poderá adicionar classes ao rótulo para mostrar o estado. Além disso, seria aconselhável usar a seguinte função:

$('label[for]').live('click', function(e){
  $('#' + $(this).attr('for') ).click();
  return false;
});

EDITAR para modificar #checkboxIDestilos

zzzzBov
fonte
consulte stackoverflow.com/a/3772914/190135 para um link para o código-fonte completo para esta técnica
AlexChaffee
1

Estou escrevendo um aplicativo phonegap e as caixas de seleção variam em tamanho, aparência, etc. Então, criei minha própria caixa de seleção simples:

Primeiro, o código HTML:

<span role="checkbox"/>

Então o CSS:

[role=checkbox]{
    background-image: url(../img/checkbox_nc.png);
    height: 15px;
    width: 15px;
    display: inline-block;
    margin: 0 5px 0 5px;
    cursor: pointer;
}

.checked[role=checkbox]{
    background-image: url(../img/checkbox_c.png);
}

Para alternar o estado da caixa de seleção, usei JQuery:

CLICKEVENT='touchend';
function createCheckboxes()
{
    $('[role=checkbox]').bind(CLICKEVENT,function()
    {
        $(this).toggleClass('checked');
    });
}

Mas pode ser feito facilmente sem ele ...

Espero que possa ajudar!

Wesamot
fonte
1

Simples decisão do CSS 2020 moderno puro , sem escala borrada ou transformação não útil. E com carrapato! =)

Funciona bem em navegadores baseados em Firefox e Chromium.

Assim, você pode controlar suas caixas de seleção de forma puramente ADAPTATIVA , apenas definindo o bloco pai font-heighte ele crescerá com o texto!

input[type='checkbox'] {
  -moz-appearance: none;
  -webkit-appearance: none;
  appearance: none;
  vertical-align: middle;
  outline: none;
  font-size: inherit;
  cursor: pointer;
  width: 1.0em;
  height: 1.0em;
  background: white;
  border-radius: 0.25em;
  border: 0.125em solid #555;
  position: relative;
}

input[type='checkbox']:checked {
  background: #adf;
}

input[type='checkbox']:checked:after {
  content: "✔";
  position: absolute;
  font-size: 90%;
  left: 0.0625em;
  top: -0.25em;
}
<label for="check1"><input type="checkbox" id="check1" checked="checked" /> checkbox one</label>
<label for="check2"><input type="checkbox" id="check2" /> another checkbox</label>

FlameStorm
fonte