Семантика маркировки форм

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

Мой обычный метод реализации:

<form role="form" action="#" method="post" name="form" novalidate>
  <label>
    <span>Search</span>
    <input role="search" type="search" placeholder="Search" name="s">
  </label>
  <button role="button" type="submit" name="s-btn">Search</button>
</form>

Однако вы также можете использовать for="" и пометить идентификатор для соответствующего поля. Что, очевидно, лучше подходит для type="radio" и type="checkbox", но имеет ли оно лучшую семантическую ценность, чем приведенное выше?

<form role="form" action="#" method="post" name="form" novalidate>
  <label for="s">Search</label>
  <input role="search" type="search" id="s" placeholder="Search" name="s">
  <button role="button" type="submit" name="s-btn">Search</button>
</form>

И вы даже можете использовать WAI-ARIA для маркировки идентификаторов, следует ли использовать это вместе с for="" или это отдельный метод маркировки?

<form role="form" action="#" method="post" id="Form" novalidate>
  <label id="s" for="sf">Search</label>
  <input role="search" aria-labelledby="s form" id="sf" type="search" placeholder="Search" name="s">
  <button role="button" aria-labelledby="form" type="submit" name="s-btn">Search</button>
</form>

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


person darcher    schedule 15.12.2013    source источник


Ответы (1)


два метода, вложение элементов управления в метки (неявное) и использование id и атрибутов for (явное), имеют разные положительные и отрицательные стороны, однако текущая тенденция, которую я наблюдал у профессионалов, заключается в том, чтобы отойти от неявного и более явного.

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

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

wai-aria все еще не закончена, а также имеет проблемы с поддержкой браузера/программы чтения с экрана, но это, безусловно, не должно мешать вам реализовать ее, когда это возможно. в идеале, если он не поддерживается, он просто молча выйдет из строя (например, входные данные html5 делают с браузерами, не поддерживающими html5), но я был бы здесь осторожен и тестировал бдительно. разные саппорты также могут иметь один скринридер/браузер/агент пользователя, читающий оба, вместо того, чтобы искать вай-арию, и по умолчанию использовать маркировку imp/exp.

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

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

person albert    schedule 16.12.2013
comment
Обычно я избегаю идентификаторов, поэтому их можно свободно использовать на стороне сервера и в целях jquery, когда это возможно/необходимо. Обычно используют имена для отправки данных формы из соответствующих форм/наборов полей. Вы делаете много обоснованных замечаний, и я очень ценю время, которое вы потратили на то, чтобы написать это, и конкретность в том, как вы это объяснили. Я никогда не определяю идентификаторы в CSS, если мне не нужно быстро переопределять что-то в чужих записях. Но может начать возвращаться к использованию идентификаторов, поскольку поля больше не должны быть дочерними элементами форм, и может добавить немного больше гибкости при выборе этого маршрута. Спасибо еще раз! - person darcher; 17.12.2013
comment
я не знаю случаев, когда имя является необходимостью, но это, конечно, не значит, что их не существует. javascript getElementById идеален при правильном использовании. так что это тоже относительный ответ. смешной. я читал статью одного чрезвычайно отточенного разработчика, когда-то озаглавленную «Это зависит...», в которой в основном рассматривалась цепочка событий потока разработки, но также и боковая обработка событий, чтобы показать разнообразие возможных результатов. это наша среда; Лучший возможный совет — разрабатывать с использованием веб-стандартов и использовать технологии веб-платформы. - person albert; 17.12.2013
comment
Переименование: в PHP для получения значений из элементов управления для отображения на экране, вставки в базу данных и т. д. вы берете name, а не id. Я не могу комментировать другие языки - person Ryan B; 18.12.2013
comment
имя определяет, что отправляется обратно на сервер, почти наверняка независимо от языка ... но теперь мне интересно, какой javascript или конкретно используется в форме, управляемой node.js? хм. - person albert; 18.12.2013