Saya lupa di mana saya pertama kali melihatnya disebutkan tetapi Anda benar-benar dapat menempelkan label Anda dalam wadah di tempat lain selama Anda memiliki for=
set atribut. Jadi, mari kita periksa sampel pada SO:
* {
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>
Wah. Itu banyak untuk "sampel" tapi saya merasa itu benar-benar mendorong pulang efek dan titik: kita tentu dapat memilih label untuk kontrol input yang diperiksa tanpa menjadi saudara. Rahasianya terletak pada menjaga input
tag seorang anak hanya untuk apa yang mereka butuhkan (dalam hal ini - hanya body
elemen) .
Karena label
elemen tersebut tidak benar-benar memanfaatkan :checked
pemilih semu, tidak masalah bahwa label disimpan di header
. Itu memang memiliki manfaat tambahan bahwa karena header
merupakan elemen saudara kita dapat menggunakan ~
pemilih saudara generik untuk berpindah dari input[type=radio]:checked
elemen DOM ke header
wadah dan kemudian menggunakan penyeleksi keturunan / anak untuk mengakses label
s sendiri, memungkinkan kemampuan untuk menata mereka ketika mereka masing-masing kotak radio / kotak centang dipilih .
Kami tidak hanya dapat menata label, tetapi juga menata konten lain yang mungkin merupakan keturunan dari saudara kandung relatif terhadap semua label input
. Dan sekarang untuk saat ini Anda semua sudah menunggu, JSFIDDLE ! Pergi ke sana, bermainlah dengannya, buatlah itu bekerja untuk Anda, cari tahu mengapa itu berhasil, hancurkan, lakukan apa yang Anda lakukan!
Semoga semua masuk akal dan sepenuhnya menjawab pertanyaan dan mungkin tindak lanjut yang mungkin muncul.
<label for="rad1">Radio 1</label><input id="rad1" type="radio" name="rad">