Лучший способ верстки в формах HTML?

Почему бы просто не сделать значение x некоторым автоматически увеличивающимся номером, а затем изменить метку?

- jed

33
задан Community 23 May 2017 в 12:26
поделиться

7 ответов

Если вам нужны ярлыки слева от таких полей, просто используйте таблицу. Таблицы не только хорошо ухудшаются в старых браузерах, но и автоматически изменяют размер столбца меток в соответствии с текстом в них (при условии, что вы используете white-space: no-wrap для ячеек, содержащих метки, и / или - и это настоящая ересь - проверенный старый атрибут nowrap в теге), они хорошо справляются с тем, чтобы сделать их довольно узкими, и они просты. Сделайте каждую ячейку метки заголовком, а каждую ячейку поля - нормальной ячейкой. И это больно, но убедитесь, что метки действительно являются метками и ссылаются на их поля, потому что доступность имеет значение, даже если (возможно, особенно если) вы используете таблицу несемантически.

Я хотел бы услышать о решениях CSS, которые автоматически изменяют размер столбцов меток, хорошо справляются с узкими требованиями и не включают 18 приемов для устранения несоответствий между браузерами. Я был бы очень рад их увидеть. Но каждый раз, когда я смотрел (а их несколько), все равно был пробел. Пробел, который нужно заполнить, IMV, чтобы мы могли прекратить это делать, не надев рубашки для волос.

Для тех, кто читает не , нужны такие ярлыки слева, посмотрите ответ jball , чтобы найти красивую семантическую альтернативу.

37
ответ дан 27 November 2019 в 17:47
поделиться

Я бы хотел использовать списки определений (

) они имеют тенденцию быть семантически правильными. Метка определяется вводом пользователя. По-моему, это имеет смысл.
выражает семантическое содержание более точно, чем таблица.

<dl>
    <dt><label for="name>Name</label></dt>
    <dd><input type="text" id="name" /></dd>

    <dt><label for="email>Email</label></dt>
    <dd><input type="text" id="email" /></dd>
</dl>

Вот пример

Кстати, они изящно деградируют во всех браузерах, даже текстовых.

14
ответ дан 27 November 2019 в 17:47
поделиться

С точки зрения удобства использования и если вертикальное пространство не является ограничивающим фактором, список полей с меткой над каждым полем быстрее всего читается и заполняется, и его можно выполнить с эстетической точки зрения. Для получения дополнительной информации см. Многие исследования юзабилити в Интернете, например. http://www.lukew.com/resources/articles/web_forms.html

19
ответ дан 27 November 2019 в 17:47
поделиться

Я думаю, что-то вроде этого я и делаю, но также не будет авторазмера в соответствии с длиной текста, но это чище, на мой взгляд

<form>
  <label for="firstName">First Name</label>
  <input type="textfield" name="firstName" />

  <label for="lastName">Last Name</label>
  <input type="textfield" name="lastName" />
</form>

label {
  float:left;
  width:30px;
}

input {
  float:left;
  margin-left:30px;
}
5
ответ дан 27 November 2019 в 17:47
поделиться

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

  • Цвет фона для полей / входов на самом деле невозможен без искусственного фона
  • Автоматическое изменение размера столбцов, но я думаю, что это нормально
  • Наведение поля с помощью CSS , вы можете использовать JS, но таблицы могут сделать это с помощью чистого CSS

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

<div class='form-field'>
   <label>Name</label>
   <input />
</div>

У вас есть проблемы, если вы хотите, чтобы несколько полей для каждого раздела метки, поэтому вам нужно ввести еще один div для хранения входных данных (чтобы метка оставалась плавающей влево и т. д.):

<div class='form-field'>
   <label>Name</label>

   <div class='form-inputs'>
      <input />
      <input />
   </div>
</div>

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

Мне все еще нужно сесть и попытаться выяснить, жизнеспособны ли чистые CSS-формы во всех случаях, но это очень маловероятно!

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

0
ответ дан 27 November 2019 в 17:47
поделиться

Используйте фреймворк CSS, например Blueprint , и используйте его для стилизации форм.

Еще одна уловка - создать виртуальные «столбцы» с помощью CSS и разместить их рядом друг с другом. Ярлыки в одном столбце, а входные данные в другом. Поместите это (оба столбца) в div с достаточно большой шириной и поместите столбцы в противоположном направлении, в котором вы хотите их выровнять.

Вот код (потому что я создаю форму), который будет работать для основных форм. Единственное ограничение - это большое правое поле входных данных.

form input, form select
{
    float: right;
    margin-right: 650px;
}
form label
{
    float: right;
    margin-top: 5px;
    margin-right: 10px;
}
form .nofloat
{
    float: none;
    margin: 0;
}
form br
{
    clear: both;
}

И подобный макет

<input type="text" id="name" />
<label for="name">Name</label>
<br />

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

2
ответ дан 27 November 2019 в 17:47
поделиться

Статья немного старая, но я всегда считал советы list apart надежными: (если вы хотите избавиться от таблиц)

http://www.alistapart.com/articles/prettyaccessibleforms/

4
ответ дан 27 November 2019 в 17:47
поделиться