wor*_*nga 13 html css css3 css-float
想知道是否有一种仅限css的方式来执行切换输入焦点上相应标签上的样式.到目前为止,我有:
$(document).on('focus active', 'input',function(){
$('label[for='+$(this).attr('id')+']').addClass('active');
});
$(document).on('blur', 'input',function(){
$('label[for='+$(this).attr('id')+']').removeClass('active');
});
Run Code Online (Sandbox Code Playgroud)
HTML:
<div class="row">
<label for="contact_form_mail">Email</label>
<input id="contact_form_mail" name="contact_form_mail" type="email" placeholder="Your e-mail address...">
</div>
Run Code Online (Sandbox Code Playgroud)
和CSS:
.active{ color:red; }
Run Code Online (Sandbox Code Playgroud)
编辑:我肯定知道孩子和兄弟选择器"解决方法",但重新排列干净的标记为纯粹的造型似乎不对,所以如果有另一种纯粹的CSS方式这个答案赢了!
PSL*_*PSL 17
尝试这种方式: - 输入后放置标签并向左浮动.适用兄弟姐妹.
<div class="row">
<input id="contact_form_mail" name="contact_form_mail" type="email" placeholder="Your e-mail address...">
<label for="contact_form_mail">Email</label>
</div>
Run Code Online (Sandbox Code Playgroud)
label {
float:left;
}
input:focus + label {
color:red;
}
Run Code Online (Sandbox Code Playgroud)
这是一个让相邻兄弟选择器工作的黑客,因为它仅适用于以下元素而不是前一个元素.~将在此元素之后选择所有相邻的兄弟姐妹.因此,如果您.row对每个输入部分有不同,那么请使用+.
Mr.*_*ien 14
如果您愿意切换元素,那么就去
<div>
<input type="text" />
<label for="e_mail">E-Mail</label>
</div>
Run Code Online (Sandbox Code Playgroud)
label {
float: left;
margin-right: 5px;
}
input[type=text]:focus + label {
color: red;
}
Run Code Online (Sandbox Code Playgroud)
说明:我们在+这里使用相邻选择器,因此当文本框被聚焦时,我们选择label标签并应用颜色red
注意:别忘了清除浮子;)
仅使用 CSS 即可,无需切换标签和输入的顺序。您可以:focus-within在父元素上使用CSS 伪类,它适用于具有焦点的子元素的元素。
在您的示例中,您可以使用以下内容:
.row:focus-within label {
color: red;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这个伪类相对较新,因此只有现代浏览器支持它。