【问题标题】:How to style a HTML label for disabled input如何为禁用输入设置 HTML 标签样式
【发布时间】:2013-10-22 03:57:39
【问题描述】:

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

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 进行测试。

【问题讨论】:

  • input:disabled+label 表示标签紧跟在输入之后。在您的 HTML 中,标签位于文本输入之前。 (但“之前”没有 CSS。)
  • 那可不好玩。谢谢。
  • 您应该使用 javascript 或您的模板引擎向 label 元素添加和删除 "disabled" 类。这应该不难,因为禁用元素已经意味着您正在对表单进行某种编程。

标签: html css


【解决方案1】:

我遇到了同样的问题:制作一个与标签完全相同的只读输入,我在输入中添加了一组 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样式,输入是白色背景,没有边框,没有鼠标光标,也没有点击事件...类似于末尾的标签!

【讨论】:

    【解决方案2】:

    基于@andi 的评论:

    input:disabled+label 表示标签紧跟在输入之后。在您的 HTML 中,标签位于文本输入之前。 (但“之前”没有 CSS。)

    他完全正确。但这不应该阻止我们通过一些小技巧来解决问题!

    第一步:交换 HTML 元素的顺序,使&lt;label&gt; 出现在&lt;input&gt; 之后。这将允许样式规则按需要工作。

    然后是有趣的一点:使用 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>

    【讨论】:

    • input[type=radio]:disabled+label 像沙姆一样工作!
    • 不幸的是,当 &lt;label&gt; 包裹 &lt;input&gt; 时它不起作用
    • 您还可以使用带有 display:flex 的容器以及输入和标签上的 order 属性在 UI 中切换它们。
    • @KornelDylski 你可以使用&lt;input id="myField"&gt;&lt;label for="myField"&gt;aa&lt;/label&gt; 代替&lt;label for="myField"&gt;&lt;input id="myField"&gt;aa&lt;/label&gt;
    • 如果您必须更改 html,您不妨将输入和标签包装在 div 中,如另一个答案中所述。使用浮动:左;如果您忘记了为什么这样做会令人困惑,可能会产生意想不到的影响(尤其是如果您稍后更改内容),并且如果您在两者之间添加任何内容,css 将停止工作。
    【解决方案3】:

    您可以在 CSS 中使用属性选择器,例如 https://jsfiddle.net/8pp6mpp5/1/

    HTML

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

    CSS

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

    【讨论】:

    • 表单控制元素被禁用,而不是标签(标签本身不允许禁用属性)。
    • 我建议将其添加到您的样式中:cursor: default; 否则,标签仍将手显示为光标
    • 很好的解决方法,如果标签不是直接在代码中的输入标签之后。这是我一开始尝试的方法,但没有奏效。这个解决方案增加了缺失的想法!但由于标签标签中不允许“禁用”,我将使用另一个自定义标签,如 label_disable="disabled"
    • 或者最好使用一个额外的类,比如class="label_disabled"。 (当然,此解决方案仅适用于您自己创建页面,例如使用 PHP)
    【解决方案4】:

    您也可以使用浮点数并始终将标签放在输入Demo之后

    您必须将它包装在一个跨度(或任何其他元素)中。

    HTML:

    <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;
    }
    

    【讨论】:

      【解决方案5】:

      此选择器input:disabled+label{color:#ccc;} 的目标是放置在禁用的输入元素之后的标签元素

      在这个 sn-p 中,标签位于禁用输入之后,因此标签元素是灰色的

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

      在这种情况下,标签在输入之前,因此选择器不适用于它

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

      可能的解决方案是将您的元素包装在一个额外的 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;
      }
      

      【讨论】:

      • 这似乎是一个比在输入之前排序标签然后使用 css 反转的其他答案更明智的选择,这样的黑客只会使代码混乱。
      猜你喜欢
      • 2023-01-09
      • 2021-10-13
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      相关资源
      最近更新 更多