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

P против ol или ul для стилизации формы

Как правило, я стиль формы с неупорядоченным тегом списка, например.

<fieldset>
    <ul>
        <li>
            <label for="txtName">Name</label>
            <input type="text" id="txtName" />
        </li>
    </ul>
</fieldset>

Однако часто я вижу разметку, которая использует тег <p>, например:

<fieldset>
    <p>
        <label for="txtName">Name</label>
        <input type="text" id="txtName" />
    </p>
</fieldset>

Какая из них более семантически корректна? Есть ли какие-либо плюсы или минусы для разных методов, кроме стиля <p>, более сжатого?

Изменить: Ясно открытие банки червей здесь - больше вариантов, га!:) Есть ли рекомендация W3C здесь?

Интересно, что рекомендация W3C представляется наименее элегантным решением:

<p>
  <input type="radio" name="flavor" id="choc" value="chocolate" />
    <label for="choc">Chocolate</label><br/>
  <input type="radio" name="flavor" id="cream" value="cream"/>
    <label for="cream">Cream Filled</label><br/>
  <input type="radio" name="flavor" id="honey" value="honey"/>
    <label for="honey">Honey Glazed</label><br/>
  <input type="submit" value="Purchase Donuts"/>
</p>

Жаль, что нет лучшего руководства по наилучшему соглашению для маркировки элементов формы.

4b9b3361

Ответ 1

По моему мнению, группа элементов управления формами не является элементом списка или абзацем. Когда я помечаю формы, я разделяю свои группы меток/ввода, обертывая их в <div> s. Если вы пытаетесь выделить div ision между элементами управления формами, не бойтесь использовать <div>.

<fieldset>
  <div class="field">
    <label for="txtName">Name</label>
    <input type="text" id="txtName" />
  </div>
  <div class="field">
    <label for="txtTitle">Title</label>
    <input type="text" id="txtTitle" />
  </div>
</fieldset>

Из приведенных примеров <p>, вероятно, ухудшает "лучше", потому что вы не увидите маркеров рядом с вашими статьями, если CSS был недоступен, и группы элементов управления, вероятно, будут достаточно хорошо отстоять.

Ответ 2

Не забывайте Список определений:

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

Нет реального правильного ответа. Выберите разметку, которая наиболее подходит вам. Для меня формы не являются неупорядоченным списком. Список определений ближе к моему мнению.

Ответ 3

Как правило, поля форм не являются абзацами и элементами списка, семантически. Если вам нужно группировать поля формы, <div> с классами, скорее всего, наиболее подходит, но если вы просто ищете контейнер вокруг пары <label>/<input>, рассмотрите альтернативный метод для сопоставления метки с полем:

<fieldset>
    <label>Name <input type="text" id="txtName"/></label>
    <label>Location <input type="text" id="txtLocation"/></label>
</fieldset>

Затем вы можете создавать или манипулировать ими вместе без искусственной обертки (и даже не беспокоиться о for= снова).

Ответ 4

Я предпочитаю использовать упорядоченные списки

<fieldset>
<ol>
    <li>
        <label for="txtNameFirst">Name</label>
        <input type="text" id="txtNameFirst" />
    </li>
    <li>
        <label for="txtNameLast">Name</label>
        <input type="text" id="txtNameLast" />
    </li>
</ol>
</fieldset>

Мое семантическое мышление для использования упорядоченных списков состоит в том, что большое количество форм в печати на самом деле пронумеровано и, следовательно, упорядоченный список входов формы.

Семантически, я считаю, что в списке определений содержится вода, и у него есть дополнительное преимущество - предоставить упаковку для каждого сопряжения между метками и входами, а также каждую отдельную метку и входные данные, которые могут дать вам много контроля за дизайном ( если вы можете жить с небольшой тяжести упаковки DL вокруг каждой метки/входной пары)

<fieldset>
    <dl>
        <dt><label for="txtNameFirst">Name</label></dt>
        <dd><input type="text" id="txtNameFirst" /></dd>
    </dl>
    <dl>
        <dt><label for="txtNameLast">Name</label></dt>
        <dd><input type="text" id="txtNameLast" /></dd>
    </dl>
</fieldset>

Если упорядоченные/неупорядоченные/определения списки просто не ваша вещь, то я бы пошел с divs. Их единственная подразумеваемая семантика - это "разделение", поэтому они отлично подходят для работы.

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

Ответ 5

Ключевыми моментами, которые предлагает W3C для форм, является то, что форма настроена таким образом, что метки и элементы формы можно легко сгруппировать:

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

В частности, HTML Technique 44: Использование элементов ярлыков и HTML Техника 71: Предоставление описания.

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

Вообще, хотя наши дизайнеры с Zack - наши строки формы завернуты в div с классом "formrow" или схожим.

Ответ 6

Я обычно использовал одну комбинацию <div> за <label> и <input>, пока не получил новое задание, где норма была неупорядоченным. У меня есть сотрудник, который ругается по столам (один столбец для меток, один для полей), утверждая, что это просто табличные данные с возможностями редактирования.

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