Estilo de entrada da caixa de seleção CSS

178

Qualquer estilo para inputafeta todos os elementos de entrada. Existe uma maneira de especificar o estilo para aplicar apenas às caixas de seleção sem aplicar uma classe a cada elemento da caixa de seleção?

Leigh
fonte

Respostas:

312

Com o CSS 2, você pode fazer isso:

input[type='checkbox'] { ... }

Isso deve ser amplamente suportado até agora. Veja o suporte para navegadores

Andrew Hare
fonte
18
Acredito que o IE 7 e seletores de atributos de suporte maiores, que na verdade são CSS 2.1. Quirksmode.org/css/contents.html
TJ L
2
@realtebo: observe que muitos estilos (borda, plano de fundo etc.) não podem ser aplicados diretamente às caixas de seleção HTML.
Roy Tinker
1
@RoyTinker Você usaria outline, não border, para caixas de seleção.
precisa saber é o seguinte
29

Eu crio minha própria solução sem rótulo

input[type=checkbox] {
         position: relative;
	       cursor: pointer;
    }
    input[type=checkbox]:before {
         content: "";
         display: block;
         position: absolute;
         width: 16px;
         height: 16px;
         top: 0;
         left: 0;
         border: 2px solid #555555;
         border-radius: 3px;
         background-color: white;
}
    input[type=checkbox]:checked:after {
         content: "";
         display: block;
         width: 5px;
         height: 10px;
         border: solid black;
         border-width: 0 2px 2px 0;
         -webkit-transform: rotate(45deg);
         -ms-transform: rotate(45deg);
         transform: rotate(45deg);
         position: absolute;
         top: 2px;
         left: 6px;
}
<input type="checkbox" name="a">
<input type="checkbox" name="a">
<input type="checkbox" name="a">
<input type="checkbox" name="a">

input[type=checkbox] {
         position: relative;
	       cursor: pointer;
    }
    input[type=checkbox]:before {
         content: "";
         display: block;
         position: absolute;
         width: 20px;
         height: 20px;
         top: 0;
         left: 0;
         background-color:#e9e9e9;
}
input[type=checkbox]:checked:before {
         content: "";
         display: block;
         position: absolute;
         width: 20px;
         height: 20px;
         top: 0;
         left: 0;
         background-color:#1E80EF;
}
    input[type=checkbox]:checked:after {
         content: "";
         display: block;
         width: 5px;
         height: 10px;
         border: solid white;
         border-width: 0 2px 2px 0;
         -webkit-transform: rotate(45deg);
         -ms-transform: rotate(45deg);
         transform: rotate(45deg);
         position: absolute;
         top: 2px;
         left: 6px;
}
<input type="checkbox" name="a">
<input type="checkbox" name="a">
<input type="checkbox" name="a">
<input type="checkbox" name="a">

Cenk YAGMUR
fonte
Como fazer com o plano de fundo cinza, como nesta imagem ( i.stack.imgur.com/Q23fy.png ), se você pode ver minha postagem ( pt.stackoverflow.com/questions/436890/estilizar-checkbox ). Obrigado.
Tiago
Fantástico! Você pode colocar a resposta no meu post para marcar como concluído?
Tiago
1
Depois de horas pesquisando e testando, essa é a única coisa que funcionou para mim. Obrigado!
Mark
1
Exemplos impressionantes
Adrian Grygutis
24

Algo que descobri recentemente para criar botões de opção e caixas de seleção. Antes, eu tinha que usar jQuery e outras coisas. Mas isso é estupidamente simples.

input[type=radio] {
    padding-left:5px;
    padding-right:5px;
    border-radius:15px;

    -webkit-appearance:button;

    border: double 2px #00F;

    background-color:#0b0095;
    color:#FFF;
    white-space: nowrap;
    overflow:hidden;

    width:15px;
    height:15px;
}

input[type=radio]:checked {
    background-color:#000;
    border-left-color:#06F;
    border-right-color:#06F;
}

input[type=radio]:hover {
    box-shadow:0px 0px 10px #1300ff;
}

Você pode fazer o mesmo em uma caixa de seleção, obviamente altere input[type=radio]para input[type=checkbox]e border-radius:15px;para border-radius:4px;.

Espero que isso seja útil para você.

Leo_V117
fonte
Muito bom, muito ruim que não funcione tanto no Opera nem no IE = (
Michel Ayres
1
Se você deseja aplicar seu próprio estilo a uma caixa de seleção / entrada, confira meu post no blog sobre elementos de entrada personalizados via CSS . Em seguida, você pode estilizá-lo como quiser apenas com CSS, incluindo um fallback do IE8.
Felix Hagspiel
8

As aulas também funcionam bem, como:

<style>
  form input .checkbox
  {
    /* your checkbox styling */
  }
</style>

<form>
  <input class="checkbox" type="checkbox" />
</form>
Jim Fell
fonte
Provavelmente não é necessário aninhar a caixa de seleção .ch dentro do formulário, porque é improvável que você encontre uma caixa de seleção fora de um formulário. Também .checkbox entrada deve ser input.checkbox
Duncan Walker
@DuncanWalker Eu não testei, mas as formtags não seriam necessárias para vincular o controle de entrada a um controle de envio padrão?
Jim caiu
1
@ Jim Caiu isso não funciona. Se eu criar duas classes diferentes para duas caixas de seleção com estilo diferentes, por exemplo .checkbox1 [input = 'checkbox'] e .checkbox2 [input = 'checkbox'], os estilos sempre afetarão os dois independentemente ... como você garante que os estilos sejam separados?
Krys
@Krys Você precisa dar aos seus elementos da caixa de seleção nomes de classes diferentes.
Jim caiu
4

Você pode aplicar apenas a determinado atributo fazendo:

input[type="checkbox"] {...}

Isso explica aqui .

DeadHead
fonte
4
input[type="checkbox"] {
 /* your style */
}

Mas isso funcionará apenas para navegadores, exceto o IE7 e abaixo, para aqueles que você terá que usar uma classe.

cdm9002
fonte
abaixo do IE7, o IE7 é bom com seletores. Testado e veja aqui: kimblim.dk/css-tests/selectors #
Frank Nocke
3

O Trident fornece o ::-ms-checkpseudo-elemento para controles de caixa de seleção e botão de opção. Por exemplo:

<input type="checkbox">
<input type="radio">

::-ms-check {
    color: red;
    background: black;
    padding: 1em;
}

Isso é exibido da seguinte maneira no IE10 no Windows 8:

insira a descrição da imagem aqui

Anselmo
fonte
2

Como o IE6 não entende os seletores de atributo, você pode combinar um script visto apenas pelo IE6 (com comentários condicionais) e pelo jQuery ou IE7.js de Dean Edwards.

O IE7 (.js) é uma biblioteca JavaScript para fazer com que o Microsoft Internet Explorer se comporte como um navegador compatível com os padrões. Ele corrige muitos problemas de HTML e CSS e faz com que o PNG transparente funcione corretamente no IE5 e IE6.

A escolha do uso de classes ou jQuery ou IE7.js depende de seus gostos e aversões e de outras necessidades (talvez a transparência PNG-24 em todo o site sem ter que confiar no PNG-8 com transparência completa, que se aplica à transparência de 1 bit no IE6 - criado apenas pelo Fireworks e pngnq, etc)

FelipeAls
fonte
1

Embora o CSS forneça uma maneira de você executar o estilo específico para o tipo de caixa de seleção ou outro tipo, haverá problemas nos navegadores que não suportam isso.

Acho que sua única opção nesse caso será aplicar classes às suas caixas de seleção.

basta adicionar a classe = "caixa de seleção" às suas caixas de seleção.

Em seguida, crie esse estilo no seu código CSS.

Uma coisa que você pode fazer é:

main.css

input[type="checkbox"] { /* css code here */ }

ie.css

.checkbox{ /* css code here for ie */ }

Em seguida, use o CSS específico do IE:

<!--[if lt IE 7]>
   <link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->

Você ainda precisará adicionar a classe para que ela funcione no IE, e não funcionará em outros navegadores que não sejam o IE que não suportam o IE. Mas isso fará com que seu site tenha uma visão de futuro com código css e, à medida que o IE obtiver suporte, você poderá remover o código css específico, isto é, e também as classes css das caixas de seleção.

Brian
fonte
obrigado pela dica sobre a folha de 2 estilos. embora im tentando evitar esse tipo de coisa que eu acho que só irá criar um estilo para a caixa de seleção e pronto ...