你可以用CSS来设置活动表单输入标签的样式

Dav*_*lor 29 html css

给出以下html

<label for="inputelement">label</label>
<input type="text" id="inputelement" name="inputelement" />
Run Code Online (Sandbox Code Playgroud)

您可以使用焦点设置输入的样式

input:focus { background: green; }
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在<label />没有JavaScript 的情况下设计样式?

谢谢大家

Ian*_*ood 30

不,很遗憾,css中没有前任选择器

input:focus -+ label { ... }
Run Code Online (Sandbox Code Playgroud)

会很可爱的.

输入后的标签是可操作的:

input:focus + label { ... }
Run Code Online (Sandbox Code Playgroud)

你可以使用一些定位来显示...


Kai*_*ack 14

为了完整起见,如果您的输入字段在标签内,您可以使用focus-within

HTML:

<label>
   <input name="example" type="text">
</label>
Run Code Online (Sandbox Code Playgroud)

CSS:

label:focus-within {
   background: #DEF;
}
Run Code Online (Sandbox Code Playgroud)


Spu*_*ley 8

您可以使用属性选择器:

label[for=inputelement]:focus,
label[for=inputelement]:active {
    /*styles here*/
}
Run Code Online (Sandbox Code Playgroud)

请注意,IE6不支持此功能,但应该适用于所有其他浏览器,包括IE7和IE8.

这显然只适用于该特定ID.如果您希望它适用于所有 ID,只需省略ID:

label[for]:focus,
label[for]:active {
    /*styles here*/
}
Run Code Online (Sandbox Code Playgroud)

现在,这将适用于具有for属性的所有标签.

如果你需要介于两者之间,你需要使用类.

  • 此代码仍然只针对标签,与其关联的输入是否已获得焦点无关. (8认同)

Ric*_*vin 8

更新

请确保检查草案,因为这可能会发生变化:https://drafts.c​​sswg.org/selectors-4/#relational

:has()关系伪类将允许选择父类,例如,以下选择器仅匹配<a>包含<img>子元素的元素 :

a:has(> img)
Run Code Online (Sandbox Code Playgroud)

这可以与其他选择器结合使用:focus,:active或者:not提供很多潜力.

不幸的是,在撰写本文时,浏览器支持并不是很好:https://caniuse.com/#feat=css-has

将来找到此页面的人添加此项.CSS4将有一个父选择器,允许您选择将样式应用于哪个元素:

我认为当前的规范允许您指定哪个项目与一个匹配!标志 - 主题选择器.

label! > input {
  font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)

这允许远比父母更大的控制,例如在p标签下方的这个可怕链中是目标!

article > h1 + section > p! > b > a {
  font-style: italic;
}
Run Code Online (Sandbox Code Playgroud)

  • 这个.截至2013年没有支持,但最终这可能成为这样做的正确方法. (2认同)
  • 看起来它已经从草案中消失了.根据当前草案的解决方案将使用:具有选择器.而不是"!> b> a",它将是":has(> b> a)" (2认同)

Dav*_*mas 6

您可以,只要label遵循input标记中的:

input:focus + label,
input:active + label {
    /* style */
}
Run Code Online (Sandbox Code Playgroud)


小智 6

好的,想法是将输入、标签、帮助、错误等包装在 Flexbox 容器中。然后使用+选择器选择标签元素。 注意:只有当您使用 Flexitem 属性定义订单之后,
它才会起作用。 当然你也可以使用类名。<label><input>
<label>order

.container {
    display: flex;
    flex-direction: column;
}
input {
    border: none;
}
label {
    order: -1;
}
input:focus {
    border: 1px solid red;
}
input:focus + label{
    color: red;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
    <input id="username" />
    <label for="username">Username</label>
</div>
Run Code Online (Sandbox Code Playgroud)