Примечание: ниже находится перевод тезисов доклада «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: проверка скорости загрузки сайтов