Ich habe vergessen, wo ich es zum ersten Mal erwähnt habe, aber Sie können Ihre Etiketten tatsächlich an anderer Stelle in einen Container einbetten, solange Sie das for=
Attribut festgelegt haben. Schauen wir uns also ein Beispiel für SO an:
* {
padding: 0;
margin: 0;
background-color: #262626;
color: white;
}
.radio-button {
display: none;
}
#filter {
display: flex;
justify-content: center;
}
.filter-label {
display: inline-block;
border: 4px solid green;
padding: 10px 20px;
font-size: 1.4em;
text-align: center;
cursor: pointer;
}
main {
clear: left;
}
.content {
padding: 3% 10%;
display: none;
}
h1 {
font-size: 2em;
}
.date {
padding: 5px 30px;
font-style: italic;
}
.filter-label:hover {
background-color: #505050;
}
#featured-radio:checked~#filter .featured,
#personal-radio:checked~#filter .personal,
#tech-radio:checked~#filter .tech {
background-color: green;
}
#featured-radio:checked~main .featured {
display: block;
}
#personal-radio:checked~main .personal {
display: block;
}
#tech-radio:checked~main .tech {
display: block;
}
<input type="radio" id="featured-radio" class="radio-button" name="content-filter" checked="checked">
<input type="radio" id="personal-radio" class="radio-button" name="content-filter" value="Personal">
<input type="radio" id="tech-radio" class="radio-button" name="content-filter" value="Tech">
<header id="filter">
<label for="featured-radio" class="filter-label featured" id="feature-label">Featured</label>
<label for="personal-radio" class="filter-label personal" id="personal-label">Personal</label>
<label for="tech-radio" class="filter-label tech" id="tech-label">Tech</label>
</header>
<main>
<article class="content featured tech">
<header>
<h1>Cool Stuff</h1>
<h3 class="date">Today</h3>
</header>
<p>
I'm showing cool stuff in this article!
</p>
</article>
<article class="content personal">
<header>
<h1>Not As Cool</h1>
<h3 class="date">Tuesday</h3>
</header>
<p>
This stuff isn't nearly as cool for some reason :(;
</p>
</article>
<article class="content tech">
<header>
<h1>Cool Tech Article</h1>
<h3 class="date">Last Monday</h3>
</header>
<p>
This article has awesome stuff all over it!
</p>
</article>
<article class="content featured personal">
<header>
<h1>Cool Personal Article</h1>
<h3 class="date">Two Fridays Ago</h3>
</header>
<p>
This article talks about how I got a job at a cool startup because I rock!
</p>
</article>
</main>
Wütend. Das war viel für ein "Sample", aber ich denke, es treibt den Effekt und den Punkt wirklich nach Hause: Wir können sicherlich ein Label für ein geprüftes Eingabesteuerelement auswählen, ohne dass es ein Geschwister ist. Das Geheimnis liegt darin , die input
Tags für ein Kind nur so zu halten, wie es sein muss (in diesem Fall nur für das body
Element) .
Da das label
Element den :checked
Pseudo-Selektor nicht verwendet, spielt es keine Rolle, dass die Beschriftungen im gespeichert sind header
. Es hat den zusätzlichen Vorteil, dass header
wir , da es sich um ein Geschwisterelement handelt, den ~
generischen Geschwister-Selektor verwenden können, um vom input[type=radio]:checked
DOM-Element in den header
Container zu wechseln, und dann Nachkommen- / Kind-Selektoren verwenden können, um auf die label
s selbst zuzugreifen und sie zu formatieren, wenn sie vorhanden sind entsprechende Optionsfelder / Kontrollkästchen sind aktiviert .
Wir können nicht nur die Beschriftungen formatieren, sondern auch andere Inhalte, die möglicherweise Nachkommen eines Geschwistercontainers sind, relativ zu allen input
s. Und jetzt für den Moment, auf den Sie alle gewartet haben, das JSFIDDLE ! Gehen Sie dorthin, spielen Sie damit, lassen Sie es für Sie arbeiten, finden Sie heraus, warum es funktioniert, brechen Sie es, tun Sie, was Sie tun!
Hoffentlich macht das alles Sinn und beantwortet die Frage und möglicherweise alle möglichen Folgemaßnahmen vollständig.
<label for="rad1">Radio 1</label><input id="rad1" type="radio" name="rad">