Подтвердить что ты не робот

Как создать ярлык HTML для отключенного ввода

Я бы хотел, чтобы метки для моих элементов формы были выделены серым цветом, если вход отключен, и я не могу заставить его работать для ввода текста. Я пробовал следующее:

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.

4b9b3361

Ответ 1

На основе комментария, сделанного @andi:

input:disabled+label означает, что метка сразу же после входа. В вашем HTML метка появляется перед вводом текста. (но нет CSS для "раньше".)

Он абсолютно прав. Но это не должно мешать нам решить проблему с небольшим обманом!

Первый шаг: замените порядок элементов HTML так, чтобы <label> появился после <input>. Это позволит правилам стилизации работать по желанию.

HTML

<input type="checkbox" id="check1" disabled="disabled">
<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>

Теперь забавный бит: используйте CSS для размещения меток для текстовых входов с левой стороны:

CSS

input[type=text]+label {
    float: left;
}

ДЕМО: http://jsfiddle.net/F2Nh4/5/

Ответ 2

Вы также можете использовать поплавки и всегда помещать метку после ввода 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;
}

Ответ 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;
}

Ответ 4

Этот селектор input:disabled+label{color:#ccc;} предназначен для элементов метки, которые помещаются после того, как отключенный элемент ввода

В этом фрагменте ярлык находится после отключенного ввода, поэтому элемент метки серый

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