css 如何为禁用的输入设置HTML标签的样式

tkqqtvp1  于 2023-02-26  发布在  其他
关注(0)|答案(6)|浏览(140)

如果输入被禁用并且无法使其用于文本输入,我希望表单元素的标签变灰。我已尝试以下方法:

input:disabled {
    background:#dddddd;
}

input:disabled+label{color:#ccc;}

<input type='checkbox' disabled id='check1'>
<label for='check1'>Check</label>
<br>
<label for='text1'>Text</label>
<input type='text' id='text1' disabled>

Js Fiddle
样式对复选框标签有效,但对文本标签无效。复选框是唯一允许你通过css设计标签样式的输入类型吗?
我用Firefox进行测试。

wvmv3b1j

wvmv3b1j1#

根据@andi的评论:
input:disabled+label表示标签紧跟在输入之后。在HTML中,标签在文本输入之前。(但是没有CSS表示“之前”。)
他说得完全正确。但这不应妨碍我们用一点小伎俩来解决问题。
第一步:交换HTML元素的顺序,使<label>出现在<input>之后,这将允许样式规则按预期工作。
接下来是有趣的部分:使用CSS来定位左手的文本输入标签!

input:disabled {
  background: #dddddd;
}

input:disabled+label {
  color: #ccc;
}

input[type=text]+label {
  float: left;
}
<input type="checkbox" disabled="disabled" id="check1">
<label for="check1">Check</label>
<br />
<input type="text" id="text1" disabled="disabled">
<label for="text1">Text</label>
<br />
<input type="checkbox" id="check2">
<label for="check2">Check</label>
<br />
<input type="text" id="text2">
<label for="text2">Text</label>
odopli94

odopli942#

此选择器input:disabled+label{color:#ccc;}以放置在禁用的输入元素之后的标注元素为目标
在此代码片段中,label位于禁用的输入之后,因此label元素为灰色

<input type='checkbox' disabled id='check1'>
<label for='check1'>Check</label>

在本例中,标注位于输入之前,因此选择器不会应用于标注

<label for='text1'>Text</label>
<input type='text' id='text1' disabled>

可能的解决方案是将元素 Package 在一个额外的div中,并将一个类名应用于div,如下所示

<div class='disabled'>
    <input type='checkbox' disabled id='check1'>
    <label for='check1'>Check</label>
</div>
<div class='disabled'>
    <label for='text1'>Text</label>
    <input type='text' id='text1' disabled>
</div>

然后你可以这样写你的css

.disabled label {
    color: #ccc;
}
vltsax25

vltsax253#

您可以在CSS中使用属性选择器,例如https://jsfiddle.net/8pp6mpp5/1/
超文本标记语言

<label disabled="disabled">Hola Mundo!</label></br>
<label>Hola Mundo!</label>`

中央支助系统

label[disabled="disabled"]{
    background-color: #AAA;
}
qhhrdooz

qhhrdooz4#

您还可以使用浮点数,并始终将标签放在输入Demo之后
您必须将它 Package 在一个span(或任何其他元素)中。
超文本:

<span>
    <input type='checkbox' disabled id='check1'>
    <label for='check1'>Check</label>
</span>
<br>
<span>
    <input type='text1' id='text1' disabled>
    <label for='check'>Text</label>
</span>

CSS:

span {
    display: inline-block;
    overflow: hidden;
}

input {
    float: right;
}

label {
    float: left;
}

input:disabled {
    background:#dddddd;
}

input + label {
    float: none;
}

input:disabled + label {
    color:#ccc;
}
m3eecexj

m3eecexj5#

我也有同样的问题:我创建了一个与label完全类似的只读输入,我在输入中添加了一组css样式来达到这个目标:

<input readonly class="inputLikeLabel" value="${myBean.property}"></input>

在CSS中:

.inputLikeLabel {
    background-color: #ffffff;
    text-align: center;
    border: none;
    cursor: none;
    pointer-events: none;
}

在css风格下,输入有一个白色的背景,没有边框,没有鼠标光标,也没有点击事件...类似于标签的结尾!

wtlkbnrh

wtlkbnrh6#

如果你想把标签放在输入之前,并使标签变亮,你可以使用:has伪类和~ sibling选择器:

label:has(~ :is([disabled],[readonly])) {
    color: rgba(0,0,0,0.54); /* or opacity: .5; */
}

相关问题