Ich habe eine label
mit "for="the pointer to the checkbox input"
" und solange ich weiß, kann diese for
nur für label
hinzugefügt werden. Daher muss ich in label
einen <button>
hinzufügen (ich brauche ihn), aber das click-Ereignis funktioniert nicht ordnungsgemäß - das Kontrollkästchen, auf das for
zeigt, ist nicht aktiviert.
Welche Möglichkeiten kann ich hier nutzen, wenn ich <button>
innerhalb der label
, mit nur html + css kodieren muss?
code zum Beispiel:
<input type="checkbox" id="thecheckbox" name="thecheckbox">
<div for="thecheckbox"><button type="button">Click Me</button></div>
Es stellt sich heraus, dass Sie einen <button>
eine Eingabe vornehmen können, aber nur, wenn Sie den <label>
in den <button>
einfügen.
<button type="button">
<label for="my-checkbox">Button go outside the label</label>
</button>
<input type="checkbox" id="my-checkbox">
Dies widerspricht zwar den W3C-Spezifikationen:
Die Bezeichnung des interaktiven Elements darf nicht als Nachkomme des Schaltflächenelements erscheinen. https://www.w3.org/TR/html-markup/label.html
Sie können ein transparentes Pseudoelement verwenden, das das Kontrollkästchen überdeckt, und die Schaltfläche selbst, die Mausereignisse abfängt.
Hier ist ein Beispiel:
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;
}
Die beste Lösung besteht darin, einen Button zu gestalten.
Wenn Sie ein CSS-Framework wie bootstrap verwenden, können Sie die Label-Klassen wie btn und btn-default angeben. Dies wird wie eine Schaltfläche gestaltet. Möglicherweise müssen Sie die css-Eigenschaft der Zeilenhöhe manuell wie folgt anpassen:
label.btn {
line-height: 1.75em;
}
Fügen Sie dann die Stile als Schaltfläche hinzu, und fügen Sie diese Stile hinzu:
input[type=radio]:checked ~ label.btn {
background-color: #e6e6e6;
border-color: #adadad;
color: #333;
}
Dadurch wird die überprüfte Eingabe übernommen und das nächste Beschriftungselement in der dom, für das die Klasse btn, die Schaltfläche "Bootstrap btn-default" angeklickt ist, wird angezeigt. Passen Sie die Farben an.
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()
}
Ziel ist das Klickziel, currentTarget ist in diesem Fall das Label.
Ohne die if-Anweisung wird das Ereignis zweimal ausgelöst, wenn Sie außerhalb des Bereichs zum Verhindern von Ereignissen klicken.
Nicht browserübergreifend getestet.