Saltar al contenido

Cómo diseñar una casilla de verificación usando CSS

Esta es la contestación más válida que te podemos dar, sin embargo mírala detenidamente y valora si es compatible a tu trabajo.

Solución:

ACTUALIZAR:

La siguiente respuesta hace referencia al estado de cosas antes de la disponibilidad generalizada de CSS 3. En los navegadores modernos (incluido Internet Explorer 9 y posteriores) es más sencillo crear reemplazos de casillas de verificación con su estilo preferido, sin usar JavaScript.

A continuación, se muestran algunos enlaces útiles:

  • Creación de casillas de verificación de formularios personalizados con solo CSS
  • Generador de casillas de verificación CSS fácil
  • Cosas que puedes hacer con el truco de casilla de verificación
  • Implementación de casillas de verificación y botones de opción personalizados con CSS3
  • Cómo aplicar estilo a una casilla de verificación con CSS

Vale la pena señalar que la cuestión fundamental no ha cambiado. Aún no puede aplicar estilos (bordes, etc.) directamente al elemento de casilla de verificación y esos estilos afectan la visualización de la casilla de verificación HTML. Sin embargo, lo que ha cambiado es que ahora es posible ocultar la casilla de verificación real y reemplazarla con un elemento de estilo propio, usando nada más que CSS. En particular, debido a que CSS ahora tiene una amplia compatibilidad :checked selector, puede hacer que su reemplazo refleje correctamente el estado marcado de la caja.


ANTERIOR RESPUESTA

Aquí hay un artículo útil sobre el estilo de las casillas de verificación. Básicamente, ese escritor descubrió que varía enormemente de un navegador a otro, y que muchos navegadores siempre muestran la casilla de verificación predeterminada sin importar el estilo que le dé. Entonces, realmente no hay una manera fácil.

No es difícil imaginar una solución en la que usaría JavaScript para superponer una imagen en la casilla de verificación y hacer clic en esa imagen para hacer que la casilla de verificación real esté marcada. Los usuarios sin JavaScript verían la casilla de verificación predeterminada.

Editado para agregar: aquí hay un buen script que hace esto por usted; oculta el elemento de casilla de verificación real, lo reemplaza con un intervalo con estilo y redirige los eventos de clic.

Puede lograr un efecto de casilla de verificación personalizado bastante genial utilizando las nuevas habilidades que vienen con el :after y :before pseudo clases. La ventaja de esto es: no necesita agregar nada más al DOM, solo la casilla de verificación estándar.

Tenga en cuenta que esto solo funcionará para navegadores compatibles. Creo que esto está relacionado con el hecho de que algunos navegadores no le permiten configurar :after y :before en elementos de entrada. Lo que, lamentablemente, significa que por el momento solo se admiten los navegadores WebKit. Firefox + Internet Explorer seguirá permitiendo que las casillas de verificación funcionen, simplemente sin estilo, y es de esperar que esto cambie en el futuro (el código no usa prefijos de proveedores).

Esta es una solución de navegador WebKit únicamente (Chrome, Safari, navegadores móviles)

Ver ejemplo de violín

$(function() 
  $('input').change(function() 
    $('div').html(Math.random());
  );
);
/* Main Classes */
.myinput[type="checkbox"]:before 
  position: relative;
  display: block;
  width: 11px;
  height: 11px;
  border: 1px solid #808080;
  content: "";
  background: #FFF;


.myinput[type="checkbox"]:after 
  position: relative;
  display: block;
  left: 2px;
  top: -11px;
  width: 7px;
  height: 7px;
  border-width: 1px;
  border-style: solid;
  border-color: #B3B3B3 #dcddde #dcddde #B3B3B3;
  content: "";
  background-image: linear-gradient(135deg, #B1B6BE 0%, #FFF 100%);
  background-repeat: no-repeat;
  background-position: center;


.myinput[type="checkbox"]:checked:after 
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAQAAABuW59YAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAB2SURBVHjaAGkAlv8A3QDyAP0A/QD+Dam3W+kCAAD8APYAAgTVZaZCGwwA5wr0AvcA+Dh+7UX/x24AqK3Wg/8nt6w4/5q71wAAVP9g/7rTXf9n/+9N+AAAtpJa/zf/S//DhP8H/wAA4gzWj2P4lsf0JP0A/wADAHB0Ngka6UmKAAAAAElFTkSuQmCC'), linear-gradient(135deg, #B1B6BE 0%, #FFF 100%);


.myinput[type="checkbox"]:disabled:after 
  -webkit-filter: opacity(0.4);


.myinput[type="checkbox"]:not(:disabled):checked:hover:after 
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAQAAABuW59YAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAB2SURBVHjaAGkAlv8A3QDyAP0A/QD+Dam3W+kCAAD8APYAAgTVZaZCGwwA5wr0AvcA+Dh+7UX/x24AqK3Wg/8nt6w4/5q71wAAVP9g/7rTXf9n/+9N+AAAtpJa/zf/S//DhP8H/wAA4gzWj2P4lsf0JP0A/wADAHB0Ngka6UmKAAAAAElFTkSuQmCC'), linear-gradient(135deg, #8BB0C2 0%, #FFF 100%);


.myinput[type="checkbox"]:not(:disabled):hover:after 
  background-image: linear-gradient(135deg, #8BB0C2 0%, #FFF 100%);
  border-color: #85A9BB #92C2DA #92C2DA #85A9BB;


.myinput[type="checkbox"]:not(:disabled):hover:before 
  border-color: #3D7591;


/* Large checkboxes */
.myinput.large 
  height: 22px;
  width: 22px;


.myinput.large[type="checkbox"]:before 
  width: 20px;
  height: 20px;


.myinput.large[type="checkbox"]:after 
  top: -20px;
  width: 16px;
  height: 16px;


/* Custom checkbox */
.myinput.large.custom[type="checkbox"]:checked:after 
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGHRFWHRBdXRob3IAbWluZWNyYWZ0aW5mby5jb23fZidLAAAAk0lEQVQ4y2P4//8/AyUYwcAD+OzN/oMwshjRBoA0Gr8+DcbIhhBlAEyz+qZZ/7WPryHNAGTNMOxpJvo/w0/uP0kGgGwGaZbrKgfTGnLc/0nyAgiDbEY2BCRGdCDCnA2yGeYVog0Aae5MV4c7Gzk6CRqAbDM2w/EaQEgzXgPQnU2SAcTYjNMAYm3GaQCxNuM0gFwMAPUKd8XyBVDcAAAAAElFTkSuQmCC'), linear-gradient(135deg, #B1B6BE 0%, #FFF 100%);


.myinput.large.custom[type="checkbox"]:not(:disabled):checked:hover:after 
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGHRFWHRBdXRob3IAbWluZWNyYWZ0aW5mby5jb23fZidLAAAAk0lEQVQ4y2P4//8/AyUYwcAD+OzN/oMwshjRBoA0Gr8+DcbIhhBlAEyz+qZZ/7WPryHNAGTNMOxpJvo/w0/uP0kGgGwGaZbrKgfTGnLc/0nyAgiDbEY2BCRGdCDCnA2yGeYVog0Aae5MV4c7Gzk6CRqAbDM2w/EaQEgzXgPQnU2SAcTYjNMAYm3GaQCxNuM0gFwMAPUKd8XyBVDcAAAAAElFTkSuQmCC'), linear-gradient(135deg, #8BB0C2 0%, #FFF 100%);


Normal:
Small:
Large:
Custom icon:

Bonus violín estilo Webkit flipswitch

$(function() 
  var f = function() 
    $(this).next().text($(this).is(':checked') ? ':checked' : ':not(:checked)');
  ;
  $('input').change(f).trigger('change');
);
body 
  font-family: arial;


.flipswitch 
  position: relative;
  background: white;
  width: 120px;
  height: 40px;
  -webkit-appearance: initial;
  border-radius: 3px;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  outline: none;
  font-size: 14px;
  font-family: Trebuchet, Arial, sans-serif;
  font-weight: bold;
  cursor: pointer;
  border: 1px solid #ddd;


.flipswitch:after 
  position: absolute;
  top: 5%;
  display: block;
  line-height: 32px;
  width: 45%;
  height: 90%;
  background: #fff;
  box-sizing: border-box;
  text-align: center;
  transition: all 0.3s ease-in 0s;
  color: black;
  border: #888 1px solid;
  border-radius: 3px;


.flipswitch:after 
  left: 2%;
  content: "OFF";


.flipswitch:checked:after 
  left: 53%;
  content: "ON";


Webkit friendly mobile-style checkbox/flipswitch

 
 

Hay una forma de hacer esto usando solo CSS. Podemos (ab) usar el label elemento y estilo ese elemento en su lugar. La advertencia es que esto no funcionará para Internet Explorer 8 y versiones inferiores.

.myCheckbox input 
  position: relative;
  z-index: -9999;


.myCheckbox span 
  width: 20px;
  height: 20px;
  display: block;
  background: url("link_to_image");


.myCheckbox input:checked + span 
  background: url("link_to_another_image");

Comentarios y calificaciones del tutorial

Más adelante puedes encontrar las explicaciones de otros gestores de proyectos, tú además tienes la libertad de dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *