Примечание: ниже находится перевод тезисов доклада «Learning to Love Forms» с конференции «WebVisions 2007» (автор Aaron Gustafson). Докладчик рассказывает о верстке форм, используя корректный и эффективный XHTML/CSS-код.
Спасибо всем, кто ознакомился с переводом тезисов. Буду рад комментариям.
Web Optimizator: проверка скорости загрузки сайтов
- Формы — это необходимое зло. Людям свойственно усложнять формы, хотя они могут быть представлены весьма просто.
- Рассматривайте верстку форм как создание обычного XHTML-кода. Но будьте готовы к несоответствиям со стороны браузеров и применению хаков.
- Разбивайте сложные формы на несколько простых частей.
- Старайтесь обеспечивать максимальную семантическую ценность кода.
- Не усложняйте дизайн форм.
XHTML & CSS приемы
- Элемент
FORM
создает форму. - Единственным обязательным его атрибутом является
ACTION
, и он всегда должен быть URI. - По умолчанию
METHOD
выставляется вGET
. - Атрибут
NAME
устарел, используйте вместо негоID
. - Элемент
FIELDSET
используется для группировки связанных полей формы. Может быть вложенным. - Элемент
LEGEND
должен использоваться, чтобы обеспечить заголовок дляFIELDSET
. - Внутри формы можно использовать
P
илиDIV
. Если требуется обеспечить последовательность полей формы, можно воспользоватьсяOL
(нумерованный список). Это поможет сохранить порядок расположения элементов. - Элемент
INPUT
является стандартным полем ввода. NAME
иID
.NAME
используется для серверной части,ID
— для клиентской. Чтобы избежать конфликтовID
, можно использовать для них значений «название формы-название поля».TEXTAREA
— поле ввода с несколькими строками. Обязательные атрибутыROWS
иCOLS
.- Элемент
LABEL
обеспечивает связь текста с полем ввода. Внутренняя связь подразумевает внесение поля ввода вLABEL
(можно использовать для соответствующего оформления). Внешняя связь достигается назначением для атрибутаFOR
уLABEL
значения, равногоID
у соответствующего поля ввода. - Кнопки используются для обработки событий формы. Применяются элементы
INPUT
иBUTTON
. ИспользованиеBUTTON
более гибко и обеспечивает больше функций. - Выставление размера шрифта в
62.5%
сбрасывает размер шрифта в 10 пикселей для всех браузеров. - Отображение
LEGEND
очень сильно варьируется от браузера к браузеру. Отступ снизу обрабатывается корректно, поля очень часто игнорируются. - Устанавливайте вид курсора в указатель (pointer, прим.:
input.button {cursor:hand;cursor:pointer}
), чтобы обозначить возможное действие для кнопок. - Вывод текста: можно использовать
label:after
для выставления типа после названий полей (прим. IE не поддерживает:after
). - Кнопки:
INPUT
по умолчанию отображаются как системные элементы для текущей ОС.BUTTON
достаточно хорошо отображается, как блочный элемент. С помощью стилей и картинок можно добиться любого оформления.BUTTON
может содержать, практически, любой элемент:P
,UL
и т. д. В IE при использовании нескольких кнопок они все отправляют данные одновременно. В результате, для корректной обработки нужен JavaScript для несколькихBUTTON
на странице. SELECT
позволяет выбрать один или несколькоOPTION
. АтрибутVALUE
является опциональным (по умолчанию, отправляется содержаниеOPTION
).OPTGROUP
может быть использовать для группировкиOPTION
вSELECT
. Отображается как список с отступом.OPTGROUP
не может быть вложенным.- Обычно ширина
SELECT
на 4 пикселя больше той, что вы определяете для этого элемента. - Для изменения оформления у элемента
SELECT
можно использовать замену списков (Select Replacement). Допускается также вставка фоновых картинок (для корректной работы потребуется включенный JavaScript). FIELDSET
будет хорошим решением для организации группы селективных кнопок или флажков. ИспользуйтеLEGEND
для вывода вопроса или утверждения (как заголовка к такой группе). СпискиUL
также могут быть достойным решением. Для оформления в IE6 потребуются внутренние хаки.- Выставляйте прозрачный цвет фона для селективных кнопок, чтобы избежать бага в IE (отображается серый цвет фона).
- Чтобы оформить названия к селективным кнопкам используйте относительное позиционирование (
position:relative
) и примерно 2 пикселя для верхнего отступа (padding-top:2px
). LEGEND
игнорирует атрибутWIDTH
. Для выставления правильного размера можно использовать вложенный элементSPAN
.- В формах поиска в методе лучше указывать
GET
, чтобы результата можно было добавить в закладки (bookmark). - При указании на более, чем одно поле можно использовать
LEGEND
вместоLABEL
. - Можно убрать названия полей со страницы, сместив их сильно влево. Это позволит увеличить доступность страницы (прим.: для текстовых браузеров и других пользовательских агентов).
- Используйте атрибут
CLASS
для определения связей между элементами формы. LABEL
может содержать более одного поля ввода.- Можно использовать
DD
для группировки элементов формы, когда одно из полей ввода используется, как селектор верхнего уровня. - Вложенные
LABEL
можно использовать для флажков и селективных кнопок. С помощью них можно выставить требуемую ширину. - Обязательные поля ввода. Можно использовать элемент
ABBR
для обозначения звездочки у обязательных полей. Можно использовать всплывающую подсказку через атрибутTITLE
для пояснения полей формы.ABBR
игнориуется в IE6. - Подсказки. Могут быть вложены в
EM
. С помощью CSS можно добиться перекрытия текстом подсказки поля ввода (прим.: это еще зачем? так же данные вводить неудобно). - Сообщения об ошибках. Лучше обеспечить их появление максимально быстро, чтобы пользователи их заметили. Можно использовать
STRONG
внутриLABEL
. Сообщения должны быть оформлены в виде простого текста об ошибке и способах ее исправления. Также могут содержать ссылки на то место, где прозошла ошибка (прим.: наверное, имеется в виду, в частности, перевод фокуса сразу на поле ввода, которое требуется исправить). - Можно использовать JavaScript для скрытия сообщения об ошибке, как только она была исправлена.
Спасибо всем, кто ознакомился с переводом тезисов. Буду рад комментариям.
Web Optimizator: проверка скорости загрузки сайтов