2016-01-13 3 views
4

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

  • вход внутри элемента этикетки (а не использовать идентификаторы и метки для)
  • вход должен занимать 100% какая бы ширина ни оставалась

Это не должно быть так сложно, но я пробовал много подходов из других примеров; использование поплавков, переполнение: скрытое, ограничение высоты окружающих элементов и т. д. Не имеет также ширины 100%, но это не вариант.

Причина, по которой я скорее не использую функцию label-for (которая работает), состоит в том, что на одной странице будет несколько одинаковых полей ввода. Они довольно сложны, поэтому я создаю их вручную, а затем клонирую их с помощью jQuery N раз, что тогда будет ужасно ломаться при использовании идентификаторов.

Базовая точка:

input { 
 
    width: 100%; 
 
}
<label> 
 
    name: 
 
    <input type="text" /> 
 
</label>

Подготовил скрипку здесь: https://jsfiddle.net/8uuhhcon/

+1

что ур вопрос дп? – Moumit

ответ

6

Try Flexbox

label { 
 
    display: flex; 
 
} 
 

 
input { 
 
    flex: 1; 
 
}
<label>name: 
 
    <input type="text" /> 
 
</label>

+0

В зависимости от вашей поддержки IE это может не сработать для вас. http://caniuse.com/#search=flex – CodingWithSpike

+1

@CodingWithSpike Это отличное решение, почему вы хотите поддерживать [устаревший IE] (http://www.winbeta.org/news/microsoft-ending-support-internet- исследователь-8-9-10-некст-неделю)? ... нет ничего о поддержке IE в OP post – Anonymous

+0

@ Анонимная каждая компания, с которой я работал или занималась консалтингом в течение последних 3 лет, поддерживает обратно, по крайней мере, IE9, некоторые еще 8. Практически каждая корпоративная компания все еще находится в IE в какой-то форме (и по какой-то причине они не слушают меня, когда я говорю им не ;-)). Таким образом, в основном любой проект «на работе» обычно имеет некоторый уровень поддержки IE. IE11 (все еще поддерживается) имеет довольно гибкий flexbox. MS Edge, наконец, хорошо работает с flexbox, но его единственный Win10, поэтому его не так много ... – CodingWithSpike

1

Если вы можете обернуть имя: в пролете или так, как <span>name:</span>, вы можете попробовать таблицу CSS.

label { 
 
    width: 100%; 
 
    display: table; 
 
} 
 
span, input { 
 
    display: table-cell; 
 
} 
 
span { 
 
    width: 1%; /*give a small value*/ 
 
    white-space: nowrap; /*prevent wrapping i.e. "user name"*/ 
 
    vertical-align: middle; /*or top/bottom as needed*/ 
 
} 
 
input { 
 
    width: 99%; /*give a large value*/ 
 
}
<label> 
 
    <span>name:</span> 
 
    <input type="text" /> 
 
</label>

+0

Это действительно работает, спасибо!Это, вероятно, немного более кросс-совместимо, чем использование flexbox, поэтому может быть полезно для людей, которым требуется поддержка IE9, но в моем конкретном случае простота решения Flexbox является ошеломляющей. – Setomidor

Смежные вопросы