Answers:
尝试+
符号:它是相邻的同级组合器。它结合了两个具有相同父级的简单选择器序列,第二个选择器必须在第一个选择器之后立即出现。
因此:
input[type="radio"]:checked+label{ font-weight: bold; }
//a label that immediately follows an input of type radio that is checked
适用于以下标记:
<input id="rad1" type="radio" name="rad"/><label for="rad1">Radio 1</label>
<input id="rad2" type="radio" name="rad"/><label for="rad2">Radio 2</label>
...,只要标签跟随无线电输入,它将适用于任何结构,带有或不带有div等。
例:
input[type="radio"]:checked+label { font-weight: bold; }
<input id="rad1" type="radio" name="rad"/><label for="rad1">Radio 1</label>
<input id="rad2" type="radio" name="rad"/><label for="rad2">Radio 2</label>
~
选择不一定相邻的兄弟元素。css-tricks.com/child-and-sibling-selectors
我知道这是一个古老的问题,但是如果您希望<input>
成为子代<label>
而不是将它们分开,则可以采用一种纯CSS的方式来实现:
:checked + span { font-weight: bold; }
然后,只需用<span>
:包裹文本即可:
<label>
<input type="radio" name="test" />
<span>Radio number one</span>
</label>
在JSFiddle上看到它。
<label>@Html.RadioButtonFor(..) someText<label>
,这非常有用<span>
。谢谢!
label:active { font-weight: bold; }
。请参阅:jsfiddle.net/Gbq8Z/608(哇,我不敢相信小提琴已经被分叉了608次)。
我忘记了最初提到它的地方,但是实际上只要您for=
设置了属性,就可以将标签嵌入其他地方的容器中。因此,让我们检查一下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>
ew。对于一个“样本”来说,这很多了,但我觉得它的确能带动效果和意义:我们当然可以为选中的输入控件选择一个标签,而不必成为它的兄弟。秘诀在于让input
标签成为孩子的唯一标签(在这种情况下,仅是body
元素)。
由于该label
元素实际上并没有利用:checked
伪选择器,因此标签存储在中也没有关系header
。它确实具有额外的好处,因为header
是兄弟元素,我们可以使用~
通用兄弟选择器将其从input[type=radio]:checked
DOM元素移至header
容器,然后使用子代/子选择器来访问label
s本身,从而允许在其s 时为其设置样式选中各个单选框/复选框。
我们不仅可以设置标签样式,还可以设置其他内容的样式,这些内容可能是相对于所有input
s 的同级容器的后代。现在,您一直在等待JSFIDDLE!到那里去玩,让它为您服务,找出它为什么起作用,打破它,做您想做的事!
希望一切都有意义,并能充分回答问题,并可能会跟进任何后续行动。
如果您的输入是的子元素,label
并且有多个标签,则可以将@Mike的把戏与Flexbox
+ 结合使用order
。
<label class="switchLabel">
<input type="checkbox" class="switch"/>
<span class="left">Left</span>
<span class="right">Right</span>
</label>
的CSS
label.switchLabel {
display: flex;
justify-content: space-between;
width: 150px;
}
.switchLabel .left { order: 1; }
.switchLabel .switch { order: 2; }
.switchLabel .right { order: 3; }
/* sibling selector ~ */
.switchLabel .switch:not(:checked) ~ span.left { color: lightblue }
.switchLabel .switch:checked ~ span.right { color: lightblue }
在JSFiddle上看到它。
注意:同级选择器只能在同一父级中使用。要解决此问题,您可以使用@Nathan Blair hack 在顶级隐藏输入。
您可以使用一些jQuery:
$('input:radio').click(function(){
$('label#' + $(this).attr('id')).toggleClass('checkedClass'); // checkedClass is defined in your CSS
});
您还需要确保选中的单选按钮在页面加载时也具有正确的类别。
$('label[for="' + $(this).attr('id') + '"]').toggleClass();
更新:
这仅对我有用,因为我们现有的生成的html太古怪了,生成label
s和radio
s并赋予它们both checked
属性。
没关系,Brilliand带来了巨大的成功!
如果您的标签是复选框的同级标签(通常是这种情况),则可以使用~
同级选择器,并使用a label[for=your_checkbox_id]
来解决该问题……或者如果您有多个标签,请给标签添加一个ID(例如在本示例中,使用标签作为按钮)
来到这里寻找相同的东西-但最终在文档中找到了我的答案。
可以选择label
具有checked
属性的元素,如下所示:
label[checked] {
...
}
我知道这是一个老问题,但也许可以帮助某个人:)
<label for="rad1">Radio 1</label><input id="rad1" type="radio" name="rad">