Respuestas:
Si algo sucede en cualquier navegador, me sorprendería. Este es uno de esos elementos de formulario sobresalientes que los navegadores tienden a no permitirle mucho estilo, y que las personas generalmente intentan reemplazar con javascript para que puedan diseñar / codificar algo para que se vea y actúe como una casilla de verificación.
Sugiero usar "esquema" en lugar de "borde". Por ejemplo: outline: 1px solid #1e5180
.
!important
a su CSS cuando use el esquema. Estaba probando esto en Firefox 12.0 y sin! Importante, el esquema desaparecería mientras estuviera haciendo clic en la casilla de verificación.
Deberías usar
-moz-appearance:none;
-webkit-appearance:none;
-o-appearance:none;
Luego, se deshace de la imagen / estilo de casilla de verificación predeterminada y puede aplicarle un estilo. De todos modos, un borde todavía estará allí en Firefox
Puede usar sombras de cuadro para falsificar un borde:
-webkit-box-shadow: 0px 0px 0px 1px rgba(255,0,0,1);
-moz-box-shadow: 0px 0px 0px 1px rgba(255,0,0,1);
box-shadow: 0px 0px 0px 1px rgba(255,0,0,1);
Aquí hay una solución de navegador cruzado CSS (sin imágenes) pura basada en casillas de verificación personalizadas de Martin y botones de radio con CSS3 LINK: http://martinivanov.net/2012/12/21/imageless-custom-checkboxes-and-radio-buttons -with-css3-revisited /
Aquí hay un jsFiddle: http://jsfiddle.net/DJRavine/od26wL6n/
He probado esto en los siguientes navegadores:
label,
input[type="radio"] + span,
input[type="radio"] + span::before,
label,
input[type="checkbox"] + span,
input[type="checkbox"] + span::before
{
display: inline-block;
vertical-align: middle;
}
label *,
label *
{
cursor: pointer;
}
input[type="radio"],
input[type="checkbox"]
{
opacity: 0;
position: absolute;
}
input[type="radio"] + span,
input[type="checkbox"] + span
{
font: normal 11px/14px Arial, Sans-serif;
color: #333;
}
label:hover span::before,
label:hover span::before
{
-moz-box-shadow: 0 0 2px #ccc;
-webkit-box-shadow: 0 0 2px #ccc;
box-shadow: 0 0 2px #ccc;
}
label:hover span,
label:hover span
{
color: #000;
}
input[type="radio"] + span::before,
input[type="checkbox"] + span::before
{
content: "";
width: 12px;
height: 12px;
margin: 0 4px 0 0;
border: solid 1px #a8a8a8;
line-height: 14px;
text-align: center;
-moz-border-radius: 100%;
-webkit-border-radius: 100%;
border-radius: 100%;
background: #f6f6f6;
background: -moz-radial-gradient(#f6f6f6, #dfdfdf);
background: -webkit-radial-gradient(#f6f6f6, #dfdfdf);
background: -ms-radial-gradient(#f6f6f6, #dfdfdf);
background: -o-radial-gradient(#f6f6f6, #dfdfdf);
background: radial-gradient(#f6f6f6, #dfdfdf);
}
input[type="radio"]:checked + span::before,
input[type="checkbox"]:checked + span::before
{
color: #666;
}
input[type="radio"]:disabled + span,
input[type="checkbox"]:disabled + span
{
cursor: default;
-moz-opacity: .4;
-webkit-opacity: .4;
opacity: .4;
}
input[type="checkbox"] + span::before
{
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
}
input[type="radio"]:checked + span::before
{
content: "\2022";
font-size: 30px;
margin-top: -1px;
}
input[type="checkbox"]:checked + span::before
{
content: "\2714";
font-size: 12px;
}
input[class="blue"] + span::before
{
border: solid 1px blue;
background: #B2DBFF;
background: -moz-radial-gradient(#B2DBFF, #dfdfdf);
background: -webkit-radial-gradient(#B2DBFF, #dfdfdf);
background: -ms-radial-gradient(#B2DBFF, #dfdfdf);
background: -o-radial-gradient(#B2DBFF, #dfdfdf);
background: radial-gradient(#B2DBFF, #dfdfdf);
}
input[class="blue"]:checked + span::before
{
color: darkblue;
}
input[class="red"] + span::before
{
border: solid 1px red;
background: #FF9593;
background: -moz-radial-gradient(#FF9593, #dfdfdf);
background: -webkit-radial-gradient(#FF9593, #dfdfdf);
background: -ms-radial-gradient(#FF9593, #dfdfdf);
background: -o-radial-gradient(#FF9593, #dfdfdf);
background: radial-gradient(#FF9593, #dfdfdf);
}
input[class="red"]:checked + span::before
{
color: darkred;
}
<label><input type="radio" checked="checked" name="radios-01" /><span>checked radio button</span></label>
<label><input type="radio" name="radios-01" /><span>unchecked radio button</span></label>
<label><input type="radio" name="radios-01" disabled="disabled" /><span>disabled radio button</span></label>
<br/>
<label><input type="radio" checked="checked" name="radios-02" class="blue" /><span>checked radio button</span></label>
<label><input type="radio" name="radios-02" class="blue" /><span>unchecked radio button</span></label>
<label><input type="radio" name="radios-02" disabled="disabled" class="blue" /><span>disabled radio button</span></label>
<br/>
<label><input type="radio" checked="checked" name="radios-03" class="red" /><span>checked radio button</span></label>
<label><input type="radio" name="radios-03" class="red" /><span>unchecked radio button</span></label>
<label><input type="radio" name="radios-03" disabled="disabled" class="red" /><span>disabled radio button</span></label>
<br/>
<label><input type="checkbox" checked="checked" name="checkbox-01" /><span>selected checkbox</span></label>
<label><input type="checkbox" name="checkbox-02" /><span>unselected checkbox</span></label>
<label><input type="checkbox" name="checkbox-03" disabled="disabled" /><span>disabled checkbox</span></label>
<br/>
<label><input type="checkbox" checked="checked" name="checkbox-01" class="blue" /><span>selected checkbox</span></label>
<label><input type="checkbox" name="checkbox-02" class="blue" /><span>unselected checkbox</span></label>
<label><input type="checkbox" name="checkbox-03" disabled="disabled" class="blue" /><span>disabled checkbox</span></label>
<br/>
<label><input type="checkbox" checked="checked" name="checkbox-01" class="red" /><span>selected checkbox</span></label>
<label><input type="checkbox" name="checkbox-02" class="red" /><span>unselected checkbox</span></label>
<label><input type="checkbox" name="checkbox-03" disabled="disabled" class="red" /><span>disabled checkbox</span></label>
Estoy desactualizado, lo sé ... Pero una pequeña solución sería colocar su casilla de verificación dentro de una etiqueta y luego peinar la etiqueta con un borde:
<label class='hasborder'><input type='checkbox' /></label>
luego peina la etiqueta:
.hasborder { border:1px solid #F00; }
label { position: relative; overflow: hidden; width: 16px; height: 16px; border: 1px solid #0f0; }
y luego label > input[type=checkbox] { position: absolute; left: -999px; }
Esto le permitirá personalizar su propia casilla de verificación y la casilla de verificación original seguirá marcada / desmarcada, pero el usuario no la verá. Solo verán su casilla de verificación personalizada.
:hover
y :checked
para aplicar estilo a otros estados de su casilla de verificación personalizada.
Aquí está mi versión que usa FontAwesome para el ticker de la casilla de verificación, creo que FontAwesome es utilizado por casi todos, por lo que es seguro asumir que tú también lo tienes. No probado en IE / Edge y no creo que a nadie le importe.
input[type=checkbox] {
-moz-appearance:none;
-webkit-appearance:none;
-o-appearance:none;
outline: none;
content: none;
}
input[type=checkbox]:before {
font-family: "FontAwesome";
content: "\f00c";
font-size: 15px;
color: transparent !important;
background: #fef2e0;
display: block;
width: 15px;
height: 15px;
border: 1px solid black;
margin-right: 7px;
}
input[type=checkbox]:checked:before {
color: black !important;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet"/>
<input type="checkbox">
Para Firefox , Chrome y Safari , no pasa nada.
Para IE, el borde se aplica fuera de la casilla de verificación (no como parte de la casilla de verificación), y el efecto de sombreado "elegante" en la casilla de verificación desaparece (se muestra como una casilla de verificación pasada de moda).
Para Opera, el estilo de borde en realidad está aplicando el borde en el elemento de casilla de verificación.
Opera también maneja otros estilos en la casilla de verificación mejor que otros navegadores: el color se aplica como el color de la marca, el color de fondo se aplica como color de fondo dentro de la casilla de verificación (IE aplica el fondo como si la casilla de verificación estuviera dentro de un <div>
fondo) .
La solución más fácil es envolver la casilla de verificación dentro de lo <div>
que otros han sugerido.
Si desea controlar completamente la apariencia, tendrá que optar por el enfoque avanzado de imagen / javascript, también indicado por otros.
Las casillas de verificación de estilo (y muchos otros elementos de entrada para esa materia) no son realmente posibles con CSS puro si desea cambiar drásticamente la apariencia visual.
Su mejor opción es implementar algo como lo hace jqTransform que realmente reemplaza sus entradas con imágenes y aplica el comportamiento de JavaScript para imitar una casilla de verificación (u otro elemento para el caso)
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!
El ejemplo es usar un "botón" de extensión, así como algo de texto en una etiqueta, pero le da la idea de cómo puede hacer que la casilla de verificación sea invisible y dibujar cualquier cosa detrás de ella.
Esta solución probablemente también se ajuste a los botones de opción.
Lo siguiente funciona en IE9, FF30.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/
label {
display: inline-block;
position: relative; /* needed for checkbox absolute positioning */
background-color: #eee;
padding: .5rem;
border: 1px solid #000;
border-radius: .375rem;
font-family: "Courier New";
font-size: 1rem;
line-height: 1rem;
}
label > input[type="checkbox"] {
display: block;
position: absolute; /* remove it from the flow */
width: 100%;
height: 100%;
margin: -.5rem; /* negative the padding of label to cover the "button" */
cursor: pointer;
opacity: 0; /* make it transparent */
z-index: 666; /* place it on top of everything else */
}
label > input[type="checkbox"] + span {
display: inline-block;
width: 1rem;
height: 1rem;
border: 1px solid #000;
margin-right: .5rem;
}
label > input[type="checkbox"]:checked + span {
background-color: #666;
}
<label>
<input type="checkbox" />
<span> </span>Label text
</label>
Aquí hay una manera simple (para usar antes o después de pseudo elementos / clases):
input[type=checkbox] {
position: relative;
}
input[type=checkbox]:after {
position: absolute;
top: 0;
left: 0;
/* Above three lines allow the checkbox:after position at checkbox's position */
content: '';
width: 32px;
height: 32px;
z-index: 1; /* This allows the after overlap the checkbox */
/* Anything you want */
}
<!DOCTYPE html>
<html>
<head>
<style>
.abc123
{
-webkit-appearance:none;
width: 14px;
height: 14px;
display: inline-block;
background: #FFFFFF;
border: 1px solid rgba(220,220,225,1);
}
.abc123:after {
content: "";
display: inline-block;
position: relative;
top: -3px;
left: 4px;
width: 3px;
height: 5px;
border-bottom: 1px solid #fff;
border-right: 1px solid #fff;
-webkit-transform: rotate(45deg);
}
input[type=checkbox]:checked {
background: #327DFF;
outline: none;
border: 1px solid rgba(50,125,255,1);
}
input:focus,input:active {
outline: none;
}
input:hover {
border: 1px solid rgba(50,125,255,1);
}
</style>
</head>
<body>
<input class="abc123" type="checkbox"></input>
</body>
</html>
ponlo en un div y agrega un borde al div