Является ли семантически правильным, чтобы форма HTML была представлена ​​в таблице? - PullRequest
8 голосов
/ 26 мая 2011

Мы все знаем, что использование таблицы в качестве вспомогательного средства размещения неправильно.

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

Мне интересно об этом, так как логично, чтобы форма находилась в макете таблицы (по крайней мере, в тех формах, которые я создаю), поскольку все поля имеют метки, которые соответствуют ожидаемому вводу в поля. Полученные данные затем определенно семантически правильно отображаются в таблице. Но так ли это для формы?
У меня такое ощущение, что это вопрос мнения, но мне интересно услышать, как люди обосновывают свое мнение.

Ответы [ 5 ]

3 голосов
/ 30 мая 2011

Проект по веб-стандартам сделал полный урок о том, почему и как избегать таблиц в HTML-формах. Это очень легко читать и отвечает на все ваши вопросы:

http://www.webstandards.org/learn/tutorials/accessible-forms/

3 голосов
/ 26 мая 2011

============

РЕДАКТИРОВАТЬ: Спасибо @Will Martin.На самом деле, я проверил, может показаться, что использование таблицы для структурирования формы семантически правильно, как это показано в документе стандартов w3c.Смотрите здесь: http://www.w3.org/TR/html401/interact/forms.html#h-17.9.1

============

Я прочитал вчера статью (к сожалению, на французском языке), в которой в основном говорилось, что вы неt использовать таблицу для структурирования форм.(http://www.alsacreations.com/article/lire/1209-display-inline-block.html)

Это не говорит, почему нет, но говорит, что вы должны использовать display: inline-block. Будьте осторожны, display: inline-block - отличный параметр, но он имеет недостатки при просмотре IE7-6(не удивительно).

Прочитайте эту статью (на английском языке), которая объясняет 'inline-block' => http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/

0 голосов
/ 26 мая 2011

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

<table>
<tr>
    <th scope="row"><label for="first-name">First Name:</label></th>
    <td><input type="text" name="first_name" id="first-name" /></td>
</tr>
<tr>
    <th scope="row"><label for="last-name">Last Name:</label></th>
    <td><input type="text" name="last_name" id="last-name" /></td>
</tr>
<tr>
    <th scope="row"><label for="color">Favorite Color:</label></th>
    <td><input type="text" name="color" id="color" /></td>
</tr>
</table>

Комбинация элементов LABEL с использованием атрибутов FOR, которые соответствуют идентификатору ассоциированного элементаINPUT означает, что программы чтения с экрана смогут разумно читать форму.Я добавил элементы TH, чтобы указать семантическое отношение в таблице между ячейками LABEL и ячейками INPUT.

Однако сделать это таким образом не будет моим первым выбором.Наличие разметки таблицы усложнит прослушивание чтения с экрана из-за объявления каждой строки / ячейки таблицы.Некоторая семантическая информация из таблицы (связь заголовка TH с TD в строке) фактически дублирует семантическую связь между LABEL и INPUT, так что с помощью программы чтения с экрана вы можете дважды прослушивать ту же информацию о том, какэти вещи связаны между собой.

Вместо этого я бы сделал что-то вроде этого:

<style type="text/css">
label { display: block; text-align: right; }
label input { width: 100px; }
</style>

<label for="first-name">First Name: <input type="text" name="first_name" id="first-name" /></label>

<label for="last-name">Last Name: <input type="text" name="last_name" id="last-name" /></label>

<label for="color">Favorite Color: <input type="text" name="color" id="color" /></label>

Это дало бы вам почти такой же эффект с меньшим количеством HTML.У него есть метки, связанные с их входами как явно (с использованием FOR / ID), так и неявно (потому что входы являются дочерними элементами LABEL).Это означает, что вы должны быть в состоянии предвидеть, насколько широкими должны быть ваши входные данные, а левый край изрезан из-за выравнивания текста по правому краю.

Существует также проблема добавления флажков иРадио-кнопки.В их случае имеет смысл сначала иметь ввод, а затем метку;но с примером, который я привел, это выглядит не очень хорошо.

Итак, в основном?Форматирование форм - это боль в заднице.Хотя они часто состоят из пар имя-значение, которые имеют логический смысл в виде таблицы, при таком подходе существуют потенциальные проблемы доступности.Я бы настоятельно предпочел избегать основанных на таблицах решений для такой проблемы, если только у вас нет веских причин для использования таблиц.

0 голосов
/ 26 мая 2011

Это звучит больше в духе «дебатов», чем вопросов и ответов. Однако я всегда чувствовал, что любой макет формы, который требует структуру таблицы (за исключением исключений таблиц / таблиц данных, которые по определению являются таблицами ) плохо продуманный пользовательский опыт. Наборы флажков, помеченные входы и т. Д. Могут быть расположены более гибко (и семантически) без использования таблиц.

0 голосов
/ 26 мая 2011

Это не просто вопрос мнений - существуют как семантические, так и практические проблемы с использованием таблиц с формами.

Вообще говоря, простые формы, состоящие в основном из пар label - input, такие как формы входа в систему, представленные сегодня на веб-сайтах, не должны нуждаться в дополнительной разметке, поскольку label и элементы интерактивной формы - все, что вам нужно в условия семантики. Любая дополнительная разметка будет добавлена ​​как багаж, добавляя ненужный вес на вашу страницу - CSS должен быть гибким, чтобы делать практически все, что вы хотите, и fieldset s можно использовать для дополнительного разделения различных разделов формы.

Но даже если у вас есть форма, которая, очевидно, является таблицей, вы все равно должны сначала рассмотреть другие методы - есть проблемы с доступностью при смешивании таблиц и форм, как указано в этой статье о 24 путях . В той же статье также показано, как вместо этого вы можете адаптировать fieldset s для выполнения той же работы, и определенно получите интересное чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...