2010-08-08 2 views
4

Я пытаюсь выровнять ярлык и поле ввода в одной строке таким образом, что метка занимает все необходимое пространство, а затем поле ввода использует все оставшиеся пространство. Например, если контейнер был 1000px, а метка была 342px, тогда вход должен быть 658px в ширину. Но если метка изменилась на 100 пикселей, вход должен измениться до 900 пикселей. Я мог бы сделать это с помощью макета таблицы или с помощью JavaScript, чтобы изменить размер поля ввода при изменении ширины метки, но в идеале я хотел бы сделать это, используя только css. Мой html выглядит так.Ярлык и макет ввода с помощью css

<div id="container"> 
    <label for="inputBox">variable text</label> 
    <input type="text" id="inputBox" /> 
</div> 

Спасибо,

Edit: Для того, чтобы проиллюстрировать то, что я пытаюсь сделать здесь является примером использования таблиц.

<table style="background-color:#ddd;width:500px;"> 
    <tr> 
    <td style="width:0;white-space:nowrap;"><label style="width:100%">text</label></td> 
    <td><input style="width:100%" type="text" /></td> 
    </tr> 
</table> 
+0

что вы хотите schieve этим? – Nealv

+0

Я пытаюсь сделать это, чтобы эмулировать интерфейс командной строки. Метка (подсказка) изменяется по длине в зависимости от пользователя и хоста (например, someuser @ host: ~ $ или root @ host: ~ #), и вход должен идеально заполнять любое свободное пространство на линии. – user414310

+0

Вы хотите, чтобы элемент менял размер? Разметка таблицы не сделает этого для вас. Или вы хотите, чтобы контейнер изменился? – Ray

ответ

3

Правильный путь будет:

#container { width: 1000px; display: table } 
#container label { display: table-cell; white-space: nowrap; } 
#inputBox { width: 100%; display: table-cell; } 

, но это не будет работать в IE 6 или 7.

+0

Спасибо, что делает то, что я ищу, к счастью, мне не нужно это работать в IE6 или IE7. – user414310

+5

мой любимый вид проекта – SpliFF

0

Этот CSS должен работать:

#container { width: 1000px; white-space: nowrap; } 
#inputBox { width: 100%; } 

Конечно, вы можете регулировать ширину контейнера в соответствии с вашими потребностями.

EDIT: Приведенный выше CSS расширяет входной блок до 1000px и, следовательно, делает ширину div больше, чем хотелось. Для достижения желаемого эффекта вы можете использовать свойство переполнения, как описано в http://www.stubbornella.org/content/2009/07/23/overflow-a-secret-benefit/ и немного дополнительной разметки:

<div id="container"> 
    <label for="inputBox">variable text</label> 
    <div><input type="text" id="inputBox" /></div> <!-- Notice the input is wrapped in an additional div --> 
</div> 

CSS-:

#container { width: 1000px; white-space: nowrap; } 
#container label { float: left; margin-right: 5px; /* The label must be a floating element, the margin adds a little space to visually separate it from the input field */ } 
#container div { overflow: hidden; /* This does the trick */ } 
#inputBox { width: 100%; } 
+0

Спасибо, что почти работает, единственная проблема заключается в том, что поле ввода принимает точный размер контейнера (например, 1000px), а не оставшееся пространство, что приводит к переполнению контейнера по горизонтали, если вы введете длинную строку в поле ввода. – user414310

+0

Добавлен фиксированный пример для вас, он работает во всех браузерах (протестирован в IE 5.5, 6, 7, 8, Opera 10.6, FF 3.6, Chrome 6 и Safari 4). –

0
#container { margin-left: 100px; position: relative; } 
#container label { position: absolute; left: -100px; } 
#container input { width: 100%; } 

(Вы можете использовать box-sizing и его версии, зависящие от браузера, чтобы убедиться, что границы входной строки красиво при необходимости, и если вам это нужно, в IE6-7 тоже есть куча простудных хаков для размещения дополнительных пикселей.)

Для этого требуется знать размер метки. Нельзя зависеть от ширины текстового содержимого label (т. Е. «Термоусадочная пленка») без кучи дополнительной разметки (что на самом деле не лучше, чем использование таблиц).

Когда формы с жидким макером становятся более сложными, вам обычно приходится ходить в столы. Традиционное позиционирование CSS не имеет большого значения при распределении ширины между фиксированным, жидким и термоусадочным содержимым.

+0

Это почти то, что я хотел, к сожалению, этикетке необходимо изменить ширину, которая вызывает проблемы, если вы используете фиксированную ширину. Спасибо за вашу помощь. – user414310

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