CSS для определения ширины ярлыков динамических форм

#html #css #webforms #stylesheet

#HTML #css #веб-формы #таблица стилей

Вопрос:

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

Я пытаюсь воспроизвести что-то, что выглядело бы следующим образом http://www.stylephreak.com/uploads/source/cssforms/cssform.php

Проблема, с которой я сталкиваюсь, заключается в том, что все примеры форм CSS, которые я нахожу, похоже, предполагают фиксированную ширину для метки левого столбца. В моем случае я не могу контролировать, что содержится в метке, это поступает из редактируемого пользователем банка переводов. С таблицей это очень просто, я бы просто использовал пробел:nowrap; а ширина td определялась бы самой длинной меткой, и все были бы довольны.

Возможно ли сделать что-то подобное с CSS? Я пробовал использовать min-width и заставлять его не переносить. Это сработало, но только сдвинуло текущий элемент управления вправо и испортило выравнивание, не говоря уже о том, что минимальная ширина не поддерживается в IE 6.

Действительно ли так плохо использовать таблицу для макетов форм? Это табличные данные, и в конце концов, они имеют смысл при линеаризации, нет?

Комментарии:

1. max-width вместо min-width ?

2. @Stijntjhe max-width, я думаю, в моем случае не сработал бы. Я хочу, чтобы они были выровнены, поэтому мне нужна какая-то ширина. Если я укажу только максимальную ширину для своих меток, они будут повсюду, нет?

3. Если я добавлю к метке margin-bottom:0,6em, по крайней мере, это не будет выглядеть ужасно при переносе (раньше это было близко к другому элементу управления, поскольку он плавающий слева)

4. Я думал, вы использовали min-width , но вы должны использовать max-width . Вопрос немного запутанный.

5. Вам действительно больше не стоит беспокоиться о IE6.

Ответ №1:

Вы можете установить для <label> css значение display: table-cell , а для содержащего — <div> значение display: table-row . Это будет имитировать поведение при использовании таблицы без фактического использования <table> .

 <div style="display: table-row">
    <label style="display: table-cell; padding: 0 1em; text-align: right;" for="fm-firstname">First Name:</label>
    <input type="text" name="fm-firstname" id="fm-firstname" />
</div>
<div style="display: table-row">
    <label style="display: table-cell; padding: 0 1em; text-align: right;" for="fm-lastname">Last:</label>
    <input type="text" name="fm-lastname" id="fm-lastname" />
</div>
  

Это будет отлично смотреться в любом новейшем браузере (Firefox, Chrome, IE8 ). В IE7 текстовые поля не будут выровнены правильно.

Комментарии:

1. Отличное решение, но не работающее в IE 6, может пройти, но не поддерживающее IE 7, я не думаю, что это сработает с высшим руководством 😉

2. Я проверил аналитику, к сожалению, на IE 7 по-прежнему приходится 20% наших посетителей… почему люди просто не обновятся!

3. 1 и принято, это хорошее решение, надеюсь, браузеры скоро догонят спецификации CSS. Спасибо NGLN и за другие ответы 1.

Ответ №2:

Что ж, вот решение, которое немного нетрадиционно, но я думаю, что простота должна работать для всех браузеров.

Пример скрипки.

Доступность, похоже, не является проблемой, поскольку управление клавиатурой и мышью осуществляется по желанию. Основным недостатком, конечно, является то, что эта страница плохо отображается, если CSS отключен. Есть ли где-нибудь статистика по этому поводу? И также я не знаю, как программы чтения с экрана отреагируют на эту бессмысленность.

Комментарии:

1. Простое исправление, но я чувствую, что «немного нетрадиционно» — это мягко сказано.

2. Не уверен, как fiddle правильно это отобразил, но это не работает в FireFox или Chrome. pastebin.com/GjcQwRRj

3. @jfrobishow: Вы должны добавить действительное объявление doctype. В режиме quirks это действительно становится уродливым. Именно такими и должны быть quirks.

Ответ №3:

Насколько мне известно, ярлыки form всегда занимают 100% доступной ширины. Вы могли бы использовать это.

Если разрешено заполнять всю ширину предоставленного контейнера для этой формы, то это кажется правильным ответом:

Пример скрипки.

Незначительным недостатком в этом случае является выбор соотношения между шириной меток и входными данными.