nicoletta
tengo un label
con “for="the pointer to the checkbox input"
“y mientras yo sepa, esto for
se puede agregar solo para label
. Por lo tanto, necesito agregar dentro de la label
a <button>
(Lo necesito), pero el evento de clic no funciona correctamente: no marca la casilla de verificación for
está apuntando.
¿Cuáles son las posibilidades que puedo usar aquí si debo colocar <button>
dentro de label
, con solo html+css ¿codificación?
algún código por ejemplo:
<input type="checkbox" id="thecheckbox" name="thecheckbox">
<div for="thecheckbox"><button type="button">Click Me</button></div>
Resulta que puedes hacer un <button>
operar una entrada, pero sólo si pones el <label>
en el interior la <button>
.
<button type="button">
<label for="my-checkbox">Button go outside the label</label>
</button>
<input type="checkbox" id="my-checkbox">
Aunque esto contraviene las especificaciones del W3C:
La etiqueta del elemento interactivo no debe aparecer como descendiente del elemento del botón.
https://www.w3.org/TR/html-markup/label.html
-
El problema con esto es que si hace clic en el botón, no en el texto, la etiqueta no activará el clic.
– epascarello
27 de diciembre de 2017 a las 16:45
-
Creo que si estás en el mundo de pegar etiquetas dentro de los botones, deberías estar preparado para necesitar algo de CSS;)
– Sinetheta
28 de diciembre de 2017 a las 23:38
-
Esto no funciona con el teclado: presionar el botón no hace nada.
– actímel
22 de julio de 2019 a las 9:46
-
@epascarello Esto es solo una cuestión del área de activación de la etiqueta. Puede, por ejemplo, configurar el botón {posición: relativa;} y un pseudoelemento para la etiqueta como etiqueta::después de { contenido: ”; posición: absoluta; ancho: 100%; altura: 100%; } para extender esa área.
– sebilasse
17 de abril de 2021 a las 12:09
nikk wong
Puedes hacer esto:
<label>
<button></button>
</label>
CSS
label {
cursor: pointer; // not necessary but probably a good idea.
display: block; // depending on your structure.
}
button {
pointer-events: none;
}
los display: block
on label solo será necesario para que el cuadro delimitador de la etiqueta encapsule completamente sus elementos secundarios (el botón en este caso).
Puede usar un pseudo elemento transparente que superponga la casilla de verificación y el botón en sí mismo que capturará los eventos del mouse.
Aquí hay un ejemplo:
html:
<label>
<input type="checkbox">
<button class="disable">button</button>
</label>
CSS:
.disable{pointer-events:fill}
label{position:relative}
label:after{
position: absolute;
content: "";
width: 100%;
height: 100%;
background: transparent;
top:0;
left:0;
right:0;
bottom:0;
}
-
Sé lo que quieres decir amigo, aunque tu código está un poco mal, pero pensé en esta idea. No es bueno, necesito el
<button>
para hacer clic.– nikoletta
28 mayo 2016 a las 23:05
-
No creo que sea posible lo que estás tratando de hacer entonces. Para que dos eventos se disparen con un solo clic (el evento de clic de etiqueta y el evento de clic de botón). Es cualquiera de esos. Tendrás que usar javascript en ese caso.
– eboyé
28 mayo 2016 a las 23:07
HTML:
<label for="whatev"
onclick="onClickHandler">
<button>Imma button, I prevent things</button>
</label>
JS:
const onClickHandler = (e) => {
if(e.target!==e.currentTarget) e.currentTarget.click()
}
Target es el destino del clic, currentTarget es la etiqueta en este caso.
Sin la instrucción if, el evento se dispara dos veces si se hace clic fuera del área de prevención del evento.
No probado en varios navegadores.
La mejor solución es que el estilo sea como un botón.
Si está utilizando un marco CSS, como bootstrap, puede asignar clases de etiquetas como btn y btn-default. Esto lo diseñará como un botón. Es posible que deba ajustar la propiedad css de la altura de línea manualmente de esta manera:
label.btn {
line-height: 1.75em;
}
Luego, para obtener los estilos al hacer clic como un botón, agregue estos estilos:
input[type=radio]:checked ~ label.btn {
background-color: #e6e6e6;
border-color: #adadad;
color: #333;
}
Esto tomará la entrada que está marcada y dará el siguiente elemento de etiqueta en el dom que tiene la clase btn, bootstrap btn-botón predeterminado estilos pulsados. Ajuste los colores como se ajuste.
Mario Potor
Lo que he hecho es lo siguiente:
<label htmlFor="fileUpload">
<button onclick="onButtonClick">upload</button>
</label>
<input id="fileUpload" type="file" style="display: none"/>
onButtonClick() {
document.getElementById('fileUpload').click();
}
Entonces, la pregunta real es, ¿cómo puedo alternar la casilla de verificación haciendo clic en el botón? No sé una respuesta que no sea JS a esa pregunta. Probablemente no funcione, porque el botón captura el clic por sí mismo y no lo pasa a la etiqueta en absoluto. Sin embargo, me pregunto por qué quieres esto en primer lugar. Suena como un UX muy confuso para mí. Si desea continuar, puede considerar diseñar un elemento para que tenga la apariencia de un botón.
– GolezTrol
28 mayo 2016 a las 22:43
sí, solo estaba tratando de dar la mayor cantidad de información posible
– nikoletta
28 mayo 2016 a las 22:44
proporcione su código por favor, y por qué necesita tener un
label
envolviendo unbutton
?– dippas
28 mayo 2016 a las 22:48
no puedes hacer
<label onclick="function()" style="cursor:pointer">
?– Randy
28 mayo 2016 a las 22:56
no hay necesidad de mi código aquí. Publicaré la entrada con la etiqueta y el botón si lo desea, pero creo que es inútil.
– nikoletta
28 mayo 2016 a las 22:57