html - telefono - ejemplos formularios contact form 7
Casilla de verificación personalizada usando solo CSS y HTML (2)
El problema es que está utilizando el mismo pseudo elemento para el borde cuadrado y la marca de verificación. La solución simple sería continuar utilizando :before
pseudo elemento para el borde, y luego usar un :after
pseudo elemento para la marca de verificación.
.checkbox-custom
colocar absolutamente el :after
pseudo elemento relativo al elemento de etiqueta padre .checkbox-custom
.
Aquí está el código actualizado:
.checkbox-custom {
display: none;
}
.checkbox-custom-label {
display: inline-block;
position: relative;
vertical-align: middle;
margin: 5px;
cursor: pointer;
}
.checkbox-custom + .checkbox-custom-label:before {
content: '''';
background: #fff;
border-radius: 5px;
border: 2px solid #ddd;
display: inline-block;
vertical-align: middle;
width: 10px; height: 10px;
padding: 2px; margin-right: 10px;
}
.checkbox-custom:checked + .checkbox-custom-label:after {
content: "";
padding: 2px;
position: absolute;
width: 1px;
height: 5px;
border: solid blue;
border-width: 0 3px 3px 0;
transform: rotate(45deg);
top: 2px; left: 5px;
}
<h3>Checkboxes</h3>
<div>
<input id="checkbox-1" class="checkbox-custom" name="checkbox-1" type="checkbox">
<label for="checkbox-1" class="checkbox-custom-label">First Choice</label>
</div>
<div>
<input id="checkbox-2" class="checkbox-custom" name="checkbox-2" type="checkbox">
<label for="checkbox-2" class="checkbox-custom-label">Second Choice</label>
</div>
Necesito crear una casilla de verificación personalizada usando solo html y CSS. Hasta ahora tengo:
HTML / CSS:
.checkbox-custom {
opacity: 0;
position: absolute;
}
.checkbox-custom,
.checkbox-custom-label {
display: inline-block;
vertical-align: middle;
margin: 5px;
cursor: pointer;
}
.checkbox-custom + .checkbox-custom-label:before {
content: '''';
background: #fff;
border-radius: 5px;
border: 2px solid #ddd;
display: inline-block;
vertical-align: middle;
width: 10px;
height: 10px;
padding: 2px;
margin-right: 10px;
text-align: center;
}
.checkbox-custom:checked + .checkbox-custom-label:before {
content: "";
display: inline-block;
width: 1px;
height: 5px;
border: solid blue;
border-width: 0 3px 3px 0;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
border-radius: 0px;
margin: 0px 15px 5px 5px;
}
<div>
<input id="checkbox-1" class="checkbox-custom" name="checkbox-1" type="checkbox">
<label for="checkbox-1" class="checkbox-custom-label">First Choice</label>
</div>
<div>
<input id="checkbox-2" class="checkbox-custom" name="checkbox-2" type="checkbox">
<label for="checkbox-2" class="checkbox-custom-label">Second Choice</label>
</div>
La casilla de verificación checked
debe ser una marca de verificación con el recuadro bordeado en lugar de solo una marca de verificación. Buscando respuestas, solo he encontrado casos donde la marca de verificación se muestra usando un carácter UTF-8 o una imagen. No puedo usar ninguno de estos para lo que estoy tratando de lograr. Solo puedo usar CSS y HTML simples. ¿Alguna sugerencia?
codepen aquí: http://codepen.io/alisontague/pen/EPXagW?editors=110
Mi respuesta anterior es incorrecta porque usa el selector ::before
pseudo-element en un elemento que no es un contenedor . Gracias a @BoltClock por señalar mi error. Entonces, se me ocurrió otra solución que utiliza el Checkbox Hack y el selector de hermanos CSS3 ( ~
).
Demostración en CodePen
input[type=checkbox] {
position: absolute;
top: -9999px;
left: -9999px;
}
input[type=checkbox] ~ label::before {
content: ''/2713'';
display: inline-block;
text-align: center;
color: white;
line-height: 1em;
width: 1em;
height: 1em;
border: 1px inset silver;
border-radius: 0.25em;
margin: 0.25em;
}
input[type=checkbox]:checked ~ label::before {
color: black;
}
<form name="checkbox-form" id="checkbox-form">
<div>
<input id="checkbox-1" class="checkbox-custom" name="checkbox-1" type="checkbox">
<label for="checkbox-1" class="checkbox-custom-label">First Choice</label>
</div>
<div>
<input id="checkbox-2" class="checkbox-custom" name="checkbox-2" type="checkbox">
<label for="checkbox-2" class="checkbox-custom-label">Second Choice</label>
</div>
</form>
No utilicé la funcionalidad "Ejecutar código-fragmento" de porque hace algo extraño cuando lo ejecuto. Creo que es por el truco de la casilla de verificación.