Estoy tratando de diseñar una casilla de verificación usando lo siguiente:
<input type="checkbox" style="border:2px dotted #00f;display:block;background:#ff0000;" />
Pero el estilo no se aplica. La casilla de verificación aún muestra su estilo predeterminado. ¿Cómo le doy el estilo especificado?
Respuestas:
ACTUALIZAR:
La respuesta a continuación hace referencia al estado de cosas antes de la disponibilidad generalizada de CSS 3. En los navegadores modernos (incluido Internet Explorer 9 y versiones posteriores) es más sencillo crear reemplazos de casillas de verificación con su estilo preferido, sin usar JavaScript.
Aquí hay algunos enlaces útiles:
Vale la pena señalar que el problema fundamental no ha cambiado. Todavía no puede aplicar estilos (bordes, etc.) directamente al elemento de casilla de verificación y hacer que esos estilos afecten 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 con estilo propio, utilizando nada más que CSS. En particular, debido a que CSS ahora tiene un
:checked
selector ampliamente compatible , puede hacer que su reemplazo refleje correctamente el estado marcado de la casilla.RESPUESTA ANTIGUA
Aquí hay un artículo útil sobre las casillas de estilo . 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 cómo lo diseñe. Entonces realmente no hay una manera fácil.
No es difícil imaginar una solución alternativa en la que usaría JavaScript para superponer una imagen en la casilla de verificación y hacer clic en esa imagen para que se active la casilla de verificación real. 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 espacio con estilo y redirige los eventos de clic.
fuente
Hay una manera de hacer esto usando solo CSS. Podemos (ab) usar el
label
elemento y darle estilo a ese elemento. La advertencia es que esto no funcionará para Internet Explorer 8 y versiones inferiores.fuente
input
nunca toman el foco del teclado, por lo que estos no se pueden alcanzar con el teclado.Puede lograr un efecto de casilla de verificación personalizada bastante interesante utilizando las nuevas habilidades que vienen con las
:after
y:before
pseudo clases. La ventaja de esto es que 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 al conjunto
:after
y:before
de los elementos de entrada. Lo que desafortunadamente 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 proveedor).Esta es solo una solución de navegador WebKit (Chrome, Safari, navegadores móviles)
Ver ejemplo Fiddle
Violín de estilo webkit extra de violín
fuente
Antes de comenzar (a partir de enero de 2015)
La pregunta y la respuesta originales tienen ahora ~ 5 años. Como tal, esta es una pequeña actualización.
En primer lugar, hay una serie de enfoques cuando se trata de las casillas de estilo. El principio básico es:
Deberá ocultar el control de casilla de verificación predeterminado que tiene el estilo de su navegador y que no se puede anular de manera significativa con CSS.
Con el control oculto, aún deberá poder detectar y alternar su estado marcado
El estado marcado de la casilla de verificación deberá reflejarse al diseñar un nuevo elemento
La solución (en principio)
Lo anterior se puede lograr por varios medios, y a menudo escuchará que usar pseudoelementos CSS3 es la forma correcta. En realidad, no existe una forma correcta o incorrecta real, depende del enfoque más adecuado para el contexto en el que lo utilizará. Dicho esto, tengo uno preferido.
Envuelva su casilla de verificación en un
label
elemento. Esto significará que incluso cuando está oculto, aún puede alternar su estado marcado al hacer clic en cualquier lugar dentro de la etiqueta.Ocultar su casilla de verificación
Agregue un nuevo elemento después de la casilla de verificación que diseñará en consecuencia. Debe aparecer después de la casilla de verificación para que pueda seleccionarse usando CSS y tener un estilo que dependa del
:checked
estado. CSS no puede seleccionar 'hacia atrás'.La solución (en código)
Mostrar fragmento de código
Refinamiento (usando iconos)
¡Pero hey! Te escucho gritar. ¿Qué pasa si quiero mostrar una pequeña marca o cruz en la casilla? ¡Y no quiero usar imágenes de fondo!
Bueno, aquí es donde los pseudoelementos de CSS3 pueden entrar en juego. Estos admiten la
content
propiedad que le permite inyectar iconos Unicode que representan cualquier estado. Alternativamente, puede usar una fuente de icono de fuente de terceros, como fuente impresionante (aunque asegúrese de configurar también la correspondientefont-family
, por ejemplo, aFontAwesome
)fuente
display: none
.visibility: hidden;
conopacity: 0 !important;
si todavía tiene problemas con las pestañas.Seguiría el consejo de la respuesta de SW4 : ocultar la casilla de verificación y cubrirla con un intervalo personalizado, sugiriendo este HTML:
La etiqueta de ajuste permite perfectamente hacer clic en el texto sin necesidad de vinculación de atributos "for-id". Sin embargo,
No lo ocultes usando
visibility: hidden
odisplay: none
Funciona haciendo clic o tocando, pero esa es una forma poco convincente de usar casillas de verificación. Algunas personas todavía usan mucho más efectivo Tabpara mover el foco, Spaceactivarlo y esconderse con ese método lo deshabilita. Si el formulario es largo, se guardarán las muñecas de alguien para usarlas
tabindex
oaccesskey
atributos. Y si observa el comportamiento de la casilla de verificación del sistema, hay una sombra decente en el desplazamiento. La casilla de verificación bien diseñada debe seguir este comportamiento.La respuesta de cobberboy recomienda Font Awesome, que generalmente es mejor que el mapa de bits, ya que las fuentes son vectores escalables. Trabajando con el HTML anterior, sugeriría estas reglas CSS:
Ocultar casillas de verificación
Utilizo solo negativo
z-index
ya que mi ejemplo usa una máscara de casilla de verificación lo suficientemente grande como para cubrirla por completo. No lo recomiendoleft: -999px
ya que no es reutilizable en todos los diseños. La respuesta de Bushan wagh proporciona una forma a prueba de balas para ocultarlo y convencer al navegador de que use tabindex, por lo que es una buena alternativa. De todos modos, ambos son solo un truco. La forma correcta hoy esappearance: none
, ver la respuesta de Joost :Etiqueta de casilla de estilo
Agregar casilla de verificación
\00f096
es de Font Awesomesquare-o
, el relleno se ajusta para proporcionar un contorno punteado uniforme en el foco (ver más abajo).Agregar casilla marcada
\00f046
es Font Awesome'scheck-square-o
, que no tiene el mismo ancho quesquare-o
, que es la razón del estilo de ancho anterior.Agregar esquema de enfoque
Safari no proporciona esta función (vea el comentario de @Jason Sankey), debe usar
window.navigator
para detectar el navegador y omitirlo si es Safari.Establecer color gris para casilla deshabilitada
Establecer la sombra de desplazamiento en la casilla de verificación no deshabilitada
Violín de demostración
Intente pasar el mouse sobre las casillas de verificación y use Taby Shift+ Tabpara mover y Spacealternar.
fuente
Puede diseñar casillas de verificación con un pequeño truco utilizando el
label
elemento que se muestra a continuación:Y un FIDDLE para el código anterior. Tenga en cuenta que algunos CSS no funcionan en versiones anteriores de navegadores, ¡pero estoy seguro de que hay algunos ejemplos de JavaScript sofisticados!
fuente
Solución fácil de implementar y fácilmente personalizable.
Después de muchas búsquedas y pruebas obtuve esta solución que es simple de implementar y más fácil de personalizar. En esta solución :
Simplemente coloque el CSS que fluye en la parte superior de su página y el estilo de todas las casillas de verificación cambiará así:
fuente
Puede evitar agregar marcas adicionales. Esto funciona en todas partes, excepto IE para escritorio (pero funciona en IE para Windows Phone y Microsoft Edge) mediante la configuración de CSS
appearance
:fuente
Prefiero usar fuentes de íconos (como FontAwesome) ya que es fácil modificar sus colores con CSS, y se escalan realmente bien en dispositivos de alta densidad de píxeles. Así que aquí hay otra variante de CSS puro, utilizando técnicas similares a las anteriores.
(A continuación se muestra una imagen estática para que pueda visualizar el resultado; consulte el JSFiddle para obtener una versión interactiva).
Al igual que con otras soluciones, utiliza el
label
elemento. Un adyacentespan
contiene nuestro carácter de casilla de verificación.Aquí está el JSFiddle para ello.
fuente
font-family: FontAwesome;
confont-family: 'Font Awesome\ 5 Free';
, y actualizar el contenido Unicode si desea hacer que funcione en la nueva versión.Recientemente encontré una solución bastante interesante para el problema.
Puede usar
appearance: none;
para desactivar el estilo predeterminado de la casilla de verificación y luego escribir el suyo sobre él como se describe aquí (Ejemplo 4) .Violín de ejemplo
Mostrar fragmento de código
Lamentablemente, el soporte del navegador es bastante malo para la
appearance
opción. De mis pruebas personales solo conseguí que Opera y Chrome funcionaran correctamente. Pero este sería el camino a seguir para mantenerlo simple cuando llegue un mejor soporte o solo desee usar Chrome / Opera."¿Puedo usar?" enlace
fuente
appearance
es justo lo que necesitamos para esto; solo tenga en cuenta que "no es estándar y no está en una pista estándar" .Con CSS puro, nada sofisticado
:before
y:after
sin transformaciones, puede desactivar la apariencia predeterminada y luego diseñarla con una imagen de fondo en línea como el siguiente ejemplo. Esto funciona en Chrome, Firefox, Safari y ahora Edge (Chromium Edge).fuente
Mi solución
fuente
Simplemente puede usar
appearance: none
en navegadores modernos, para que no haya un estilo predeterminado y todos sus estilos se apliquen correctamente:fuente
¿Desea NO JavaScript, NO bibliotecas externas, cumplimiento de accesibilidad y casillas de verificación y botones de radio?
He estado desplazándome y desplazándome y toneladas de estas respuestas simplemente arrojan la accesibilidad por la puerta y violan WCAG en más de una forma. Lancé botones de radio ya que la mayoría de las veces cuando estás usando casillas de verificación personalizadas también quieres botones de radio personalizados.
Violines :
Tarde a la fiesta, pero de alguna manera esto sigue siendo difícil en
20192020, así que he agregado mis tres soluciones que son accesibles y fáciles de implementar.Estos son todos libres de JavaScript , libre de bibliotecas externas * y accesibles ...
Si desea enchufar y usar cualquiera de estos, simplemente copie la hoja de estilo de los violines, edite los códigos de color en el CSS para satisfacer sus necesidades y siga su camino. Puede agregar un icono de marca de verificación de svg personalizado si lo desea para las casillas de verificación. He agregado muchos comentarios para esas personas que no son CSS.
Si tiene texto largo o un contenedor pequeño y se encuentra con un ajuste de texto debajo de la casilla de verificación o la entrada del botón de radio, simplemente convierta a divs como este .
Explicación más larga: necesitaba una solución que no viole WCAG, que no se base en JavaScript o en bibliotecas externas, y que no interrumpa la navegación del teclado como tabulación o barra espaciadora para seleccionar, que permita eventos de enfoque, una solución que permita casillas de verificación deshabilitadas que están ambos activados o desactivados, y finalmente una solución donde puedo personalizar el aspecto de la casilla sin embargo que quiero con diferente
background-color
's,border-radius
,svg
fondos, etc.Utilicé alguna combinación de esta respuesta de @Jan Turoň para encontrar mi propia solución que parece funcionar bastante bien. He hecho un violín de botón de radio que usa mucho del mismo código de las casillas de verificación para que esto también funcione con botones de radio.
Todavía estoy aprendiendo la accesibilidad, así que si me perdí algo, deje un comentario y trataré de corregirlo aquí. Este es un código de ejemplo de mis casillas de verificación:
fuente
Aquí hay una solución CSS simple sin ningún código jQuery o JavaScript.
Estoy usando íconos FontAwseome pero puedes usar cualquier imagen
fuente
label
ospan
elementos adicionales . ¡Simplemente funciona!Desde mi búsqueda en Google, esta es la forma más fácil para el estilo de casilla de verificación. Simplemente agregue
:after
y:checked:after
CSS basado en su diseño.fuente
Modifique el estilo de la casilla de verificación con CSS3 simple, no requiere ninguna manipulación de JS y HTML.
fuente
Una plantilla simple y ligera también:
https://jsfiddle.net/rvgccn5b/
fuente
input
s solo son compatibles con Chrome, su código no funciona igual en todos los navegadores.Creo que la forma más fácil de hacerlo es peinando
label
y haciendocheckbox
invisible.HTML
CSS
El
checkbox
, a pesar de que está oculto, todavía será accesible, y su valor será enviado cuando se envía un formulario. Para los navegadores antiguos, es posible que tenga que cambiar la clase de lalabel
marcada a través de JavaScript porque no creo que las versiones antiguas de Internet Explorer entiendan::checked
en elcheckbox
.fuente
::checked
está mal, debería estarlo:checked
. (b)checkbox
está mal, debería estarlo[type=checkbox]
¡Ay! Todas estas soluciones me han llevado a la conclusión de que la casilla de verificación HTML apesta si quieres darle un estilo.
Como advertencia, esta no es una implementación de CSS. Solo pensé en compartir la solución que se me ocurrió en caso de que alguien más pueda encontrarla útil.
Utilicé el HTML5
canvas
elemento .La ventaja de esto es que no tiene que usar imágenes externas y probablemente pueda ahorrar algo de ancho de banda.
La desventaja es que si un navegador por alguna razón no puede representarlo correctamente, entonces no hay respaldo. Aunque si esto sigue siendo un problema en 2017 es discutible.
Actualizar
El viejo código me pareció bastante feo, así que decidí volver a escribirlo.
Aquí hay una demostración funcional .
La nueva versión utiliza prototipos y herencia diferencial para crear un sistema eficiente para crear casillas de verificación. Para crear una casilla de verificación:
Esto agregará inmediatamente la casilla de verificación al DOM y conectará los eventos. Para consultar si una casilla de verificación está marcada:
También es importante tener en cuenta que me libré del bucle.
Actualización 2
Algo que no mencioné en la última actualización es que usar el lienzo tiene más ventajas que solo hacer una casilla de verificación que se ve como usted quiera. También puede crear casillas de verificación de múltiples estados , si así lo desea.
Modifiqué ligeramente el
Checkbox
usado en el último fragmento para que sea más genérico, lo que hace posible "extenderlo" con una casilla de verificación que tiene 3 estados. Aquí hay una demostración . Como puede ver, ya tiene más funcionalidad que la casilla de verificación incorporada.Algo a tener en cuenta al elegir entre JavaScript y CSS.
Código viejo y mal diseñado
Demo de trabajo
Primero, configura un lienzo
A continuación, idee una forma de actualizar el lienzo.
La última parte es hacerla interactiva. Afortunadamente, es bastante simple:
Aquí es donde podría tener problemas en IE, debido a su extraño modelo de manejo de eventos en JavaScript.
Espero que esto ayude a alguien; Definitivamente se adaptaba a mis necesidades.
fuente
unchecked (e.g. unchecked -> checked -> "kinda" checked -> unchecked
, los estados podrían representar "explícito falso", "explícito verdadero", "uso predeterminado", por ejemplo). Estoy considerando agregar un ejemplo a la respuesta.Esta es la forma más simple y puede elegir qué casillas de verificación para dar este estilo.
CSS:
HTML:
fuente
Cambie su estilo de casilla de verificación de manera simple.
Aquí está el enlace JsFiddle
fuente
Aquí hay una versión solo para CSS / HTML, no se necesita jQuery o JavaScript, HTML simple y limpio y CSS realmente simple y corto.
Aquí está el JSFiddle
http://jsfiddle.net/v71kn3pr/
Aquí está el HTML:
Aquí está el CSS
Esto se puede adaptar para poder tener radio o casillas de verificación individuales, grupos de casillas de verificación y grupos de botones de radio también.
Este html / css le permitirá capturar también el clic en la etiqueta, por lo que la casilla de verificación se marcará y desmarcará incluso si hace clic solo en la etiqueta.
Este tipo de casilla de verificación / botón de opción funciona perfectamente con cualquier forma, sin ningún problema. También se han probado con PHP, ASP.NET (.aspx), JavaServer Faces y ColdFusion .
fuente
fuente
fuente
No, aún no puede diseñar la casilla de verificación en sí, pero (finalmente) descubrí cómo diseñar una ilusión manteniendo la funcionalidad de hacer clic en una casilla de verificación. ¡Significa que puede alternarlo incluso si el cursor no está perfectamente quieto sin arriesgarse a seleccionar texto o activar arrastrar y soltar!
Esta solución probablemente también se ajuste a los botones de opción.
Lo siguiente funciona en Internet Explorer 9, Firefox 30.0 y Chrome 40.0.2214.91 y es solo un ejemplo básico. Todavía puede usarlo en combinación con imágenes de fondo y pseudoelementos.
http://jsfiddle.net/o0xo13yL/1/
fuente
Dado que los navegadores como Edge y Firefox no admiten: antes: después en las etiquetas de entrada de la casilla de verificación, aquí hay una alternativa puramente con HTML y CSS. Por supuesto, debe editar CSS de acuerdo con sus requisitos.
Haga el HTML para la casilla de verificación de esta manera:
Aplique este estilo a la casilla de verificación para cambiar la etiqueta de color.
fuente
Parece que puede cambiar el color de la casilla de verificación en escala de grises utilizando solo CSS.
Lo siguiente convierte las casillas de verificación de negro a gris (que era aproximadamente lo que quería):
fuente
Implementación SCSS / SASS
Un enfoque más moderno.
Para aquellos que usan SCSS (o se convierten fácilmente a SASS), lo siguiente será útil. Efectivamente, haga un elemento al lado de la casilla de verificación, que es el que va a diseñar. Cuando se hace clic en la casilla de verificación, el CSS cambia el estilo del elemento hermano (a su nuevo estilo marcado). El código está abajo:
fuente
Advertencia : lo siguiente era cierto al momento de escribir, pero mientras tanto las cosas han progresado.
Los navegadores modernos AFAIK muestran casillas de verificación utilizando el control nativo del sistema operativo, por lo que no hay forma de diseñarlos.
fuente