Estilo de entrada de casilla de verificación CSS


178

Cualquier estilo para inputafecta a cada elemento de entrada. ¿Hay alguna manera de especificar el estilo para solicitar solo casillas de verificación sin aplicar una clase a cada elemento de casilla de verificación?

Respuestas:


312

Con CSS 2 puedes hacer esto:

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

Esto debería ser bastante ampliamente soportado por ahora. Ver soporte para navegadores


18
Creo que IE 7 y más selectores de atributos de soporte, que en realidad son CSS 2.1. quirksmode.org/css/contents.html
TJ L

2
@realtebo: tenga en cuenta que muchos estilos (borde, fondo, etc.) no se pueden aplicar directamente a las casillas de verificación HTML.
Roy Tinker

1
@RoyTinker Usaría outline, no border, para casillas de verificación.
TylerH

29

Creo mi propia solución sin etiqueta

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">


Cómo hacer con el fondo gris como en esta imagen ( i.stack.imgur.com/Q23fy.png ), si puedes ver mi publicación ( pt.stackoverflow.com/questions/436890/estilizar-checkbox ). Gracias.
Tiago

¡Fantástico! ¿Puedes poner la respuesta en mi publicación para que la marque como hecha?
Tiago

1
Después de horas de búsqueda y prueba, esto es lo único que funcionó para mí. ¡Gracias!
Mark

1
Ejemplos impresionantes
Adrian Grygutis

24

Algo que descubrí recientemente para diseñar botones de radio y casillas de verificación. Antes, tenía que usar jQuery y otras cosas. Pero esto es estúpidamente simple.

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;
}

Puede hacer lo mismo para una casilla de verificación, obviamente cambie input[type=radio]a input[type=checkbox]y cambie border-radius:15px;aborder-radius:4px; .

Espero que esto sea algo útil para ti.


Muy bueno, muy mal que no funcione tanto en Opera ni IE = (
Michel Ayres

1
Si desea aplicar su propio estilo a una casilla de verificación / entrada, consulte mi blog sobre elementos de entrada personalizados a través de CSS . Luego puede diseñarlo como quiera con CSS solamente, incluido un respaldo de IE8.
Felix Hagspiel

8

Las clases también funcionan bien, como:

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

<form>
  <input class="checkbox" type="checkbox" />
</form>

Probablemente no sea necesario anidar el .checkbox dentro del formulario porque es poco probable que encuentre una casilla de verificación fuera de un formulario. También la entrada .checkbox debe ser input.checkbox
Duncan Walker

@DuncanWalker No lo he probado, pero ¿no formserían necesarias las etiquetas para vincular el control de entrada a un control de envío predeterminado?
Jim Fell

1
@ Jim Fell esto no funciona. Si creo dos clases diferentes para dos casillas de estilo diferentes, es decir .checkbox1 [input = 'checkbox'] y .checkbox2 [input = 'checkbox'], los estilos siempre afectarán a ambos independientemente ... ¿cómo se asegura que los estilos estén separados?
Krys

@Krys Debe dar a los elementos de su casilla de verificación diferentes nombres de clase.
Jim cayó el

4

Puede aplicar solo a ciertos atributos haciendo:

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

Lo explica aquí .


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

Pero esto solo funcionará para los navegadores, excepto IE7 y versiones inferiores, para aquellos que tendrá que usar una clase.


debajo de IE7, IE7 está bien con selectores. Probado y ver aquí: kimblim.dk/css-tests/selectors
Frank Nocke

3

Trident proporciona el ::-ms-checkpseudo-elemento para la casilla de verificación y los controles de los botones de opción. Por ejemplo:

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

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

Esto se muestra como sigue en IE10 en Windows 8:

ingrese la descripción de la imagen aquí


2

Como IE6 no comprende los selectores de atributos, puede combinar un script que solo ve IE6 (con comentarios condicionales) y jQuery o IE7.js por Dean Edwards.

IE7 (.js) es una biblioteca de JavaScript para hacer que Microsoft Internet Explorer se comporte como un navegador compatible con los estándares. Soluciona muchos problemas de HTML y CSS y hace que PNG transparente funcione correctamente en IE5 e IE6.

La elección de usar clases o jQuery o IE7.js depende de tus gustos y disgustos y de tus otras necesidades (tal vez la transparencia PNG-24 en todo tu sitio sin tener que depender de PNG-8 con una transparencia completa que retrocede a la transparencia de 1 bit en IE6 - solo creado por Fireworks y pngnq, etc.)


1

Aunque CSS proporciona una manera de hacer el estilo específico del tipo de casilla de verificación u otro tipo, habrá problemas con los navegadores que no lo admitan.

Creo que su única opción en este caso será aplicar clases a sus casillas de verificación.

simplemente agregue la clase = "casilla de verificación" a sus casillas de verificación.

Luego cree ese estilo en su código CSS.

Una cosa que podrías hacer es esto:

main.css

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

ie.css

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

Luego use el css específico de IE que incluye:

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

Aún necesitará agregar la clase para que funcione en IE, y no funcionará en otros navegadores que no sean IE que no sean compatibles con IE. Pero hará que su sitio web sea innovador con el código CSS y, a medida que IE obtenga soporte, podrá eliminar el código CSS específico, es decir, las clases CSS de las casillas de verificación.


gracias por el consejo sobre la hoja de estilo 2. A pesar de que estoy tratando de evitar ese tipo de cosas creo que sólo a crear un estilo para la casilla de verificación y eso es todo ...
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.