Vejo esse padrão na documentação :
<input type="checkbox" id="foo" /><label for="foo">Foo!</label>
Mas o problema é que ele deixa uma zona morta entre a caixa de seleção e seu rótulo, onde você pode clicar no rótulo e pode clicar na caixa, mas há um pequeno espaço entre os dois onde os cliques não fazem nada e isso é meio irritante.
Obviamente, isso piora se houver algum espaço em branco entre as tags de entrada e de rótulo.
Para resolver o problema, tentei isto:
<label for="foo"><input type="checkbox" id="foo" />Foo!</label>
Isso "funciona para mim" no sentido de que elimina aquele ponto morto entre caixa e texto e é muito mais fácil de interagir. Mas é HTML legal e idiomático?
De acordo com o padrão HTML , a resposta é sim e sim .
Além disso, talvez você não precise fornecer o
for
atributo dolabel
se o elemento rotulado (theinput
) for filho desselabel
elemento.O link que forneci apresenta muito mais exemplos e informações que podem lhe interessar: https://html.spec.whatwg.org/multipage/forms.html#the-label-element
Sim, isso é válido.
e também dessa forma você não precisa usar um
id
atributo.exemplo:
Na verdade, já vi meus colegas de equipe fazerem isso muitas vezes antes, e funciona bem. Mas, na minha opinião, você pode remover a lacuna estilizando a entrada e o rótulo usando CSS. Tente envolver a entrada e o rótulo com um div form-group, exiba-o como um flexbox, defina a lacuna como 0 e adicione espaçamento entre a entrada e o rótulo usando padding em vez de margin
(Aqui o código que copiei do link da documentação acima, adicionei um nome de classe
form-group
)