Web разработка. Делаем стильные html формы.

17 ноября, 2007

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

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

Рассмотрим html разметку страницы с формой:

  1. <form id="hform" action="#" method="post">
  2.     <label for="userName">Имя:</label>
  3.     <input type="text" id="userName" class="inputField" />
  4. </p>
  5.     <label for="userEmail">eMail:</label>
  6.     <input type="text" id="userEmail" class="inputField" />
  7. </p>
  8.     <input type="submit" name="btn" value="Отправить" />
  9. </p>
  10. </form>

Тут создана обычная форма с двумя текстовыми полями для ввода имени и адреса email.

Сразу обратите внимание на тег <label>. Внутри него находится текст, который поясняет, что нужно вводить в соответствующее поле формы. Атрибут for этого тега указывает на поле формы, к которому относится данный <label>.

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

Что дает использование этого тега? Для обычного браузера – ничего. Потому что человек визуально оценивает размещение элементов на странице. Программы чтения web страниц сделать такую оценку не могут, а тег <label> позволяет однозначно указать соответствие между поясняющим текстом и полями формы.

Переходим к оформлению. Html разметка остается прежней, просто добавим несколько CSS стилей:

  1. body {
  2. font-family: Verdana, sans-serif;
  3. margin: 1em 1em 1em 1em;
  4. }
  5.  
  6. input.inputField {
  7. font-family: Verdana, sans-serif;
  8. background-color: #E6E5EA;
  9. border: solid 1px #11385F;
  10. font-weight: bold;
  11. }

Как видите, мы установили параметры шрифтов, цвета рамки и фона полей ввода.

После применения стилей наша форма будет выглядеть примерно так:

Форма без подсветки
Рис.1. Форма без подсветки

Теперь создадим стиль, который будет изменять цвета фона и рамки активного поля (т.е. того, в который установлен курсор).

  1. input.inputField:focus {
  2. background-color: #FFFFFF;
  3. border: solid 1px #FF0000;
  4. }

Псевдо-класс :focus указывает, что стиль будет применяться только для поля, в котором находится фокус ввода (установлен курсор).

На рис.2 показано как выглядит форма при вводе адреса электронной почты.

Форма с подсветкой
Рис.2. Форма с подсветкой

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

К сожалению, Internet Explorer не поддерживает псевдо-класс :focus (в FireFox и Opera все отображается правильно), поэтому для получения аналогичного эффекта в этом браузере придется использовать JavaScript.

Вы можете скачать архив с демонстрационной страницей.

Понравилась статья? Подпишитесь на продолжение rss link !

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в CSS, HTML

]]>

Комментарии (19)

Вы можете отслеживать обсуждение записи с помощью RSS 2.0 rss link

Вы также можете оставить комментарий, или трекбек с Вашего сайта.

  1. Дядька Глюк 19.11.2007 в 11:41 (Ответить)

    Хороший пример спасибо. Только вот можно было и простенький вариант скрипта для IE показать..

  2. Владимир 19.11.2007 в 20:32 (Ответить)

    Можно, но JavaScript это отдельная тема.
    Вообще-то, о том как это сделать я уже писал.

  3. Экстремал 15.12.2007 в 16:44 (Ответить)

    Спасибо Вам, действительно прикольно получается.

  4. tenshi 24.12.2007 в 13:52 (Ответить)

    http://www.w3.org/TR/html4/interact/forms.html#h-17.9.1
    for должен содержать идентификатор, а не имя.

    а вообще, в данном случае предпочтительнее просто вкладывать инпут в лэйбл.

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

  5. Владимир 25.12.2007 в 17:16 (Ответить)

    Спасибо огромное! Уже исправил.

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

    По-поводу серого фона тоже согласен. Я выбрал первый попавшийся. А подбирать нужно в соответствии с общим дизайном.

  6. tenshi 25.12.2007 в 17:29 (Ответить)

    в коде исправил, а в тексте - нет :)

  7. Владимир 26.12.2007 в 20:45 (Ответить)

    Спасибо!
    Да, сколько ошибки не исправляй, а все равно останутся…
    Хорошо, что есть внимательные читатели :-)

  8. Scratch 09.01.2008 в 17:36 (Ответить)

    А как насчет использования <fieldset&ht;?
    Очень полезная для текстридеров штука…
    Да и, кроме всего прочего, стоит после создания формы прогонять ее валидатором accessibility. Наподобие http://www.cynthiasays.com/fulloptions.asp

  9. Владимир 09.01.2008 в 20:31 (Ответить)

    По-моему fieldset предназначен для форм, которые можно разделить на группы по смыслу (например, адрес и место работы).

    В данном случае форма слишком маленькая.

    А вообще, если в форме более 5 полей (плюс-минус), то fieldset очень помогает.

  10. Scratch 09.01.2008 в 20:57 (Ответить)

    Как говорит спецификация HTML,

    The FIELDSET element allows authors to group thematically related controls and labels. Grouping controls makes it easier for users to understand their purpose while simultaneously facilitating tabbing navigation for visual user agents and speech navigation for speech-oriented user agents. The proper use of this element makes documents more accessible.

    То есть — использование fieldset допустимо (и даже желательно) для любых связанных полей.

    Хорошо еще добавить legend, чтобы те же самые text readers могли зачитать название списка полей.
    Ну, в общем — в спецификации это достаточно хорошо описано.

  11. Владимир 09.01.2008 в 21:59 (Ответить)

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

  12. Scratch 09.01.2008 в 22:07 (Ответить)

    Fieldset сделает форму логичнее.

    Вот, пример — у нас есть форма для добавления комментария (да, на этом блоге).

    Вопрос — фраза "Оставить комментарий" имеет какое-нибудь отношение к форме добавления комментария? Насколько я вижу внутри html, это просто заголовок, не более того. И с формой он никак не связан.

    Логичнее было бы вынести всю форму в fieldset, и заголовок сделать как Legend к форме.
    (да, я знаю, что стандартный WP выводит этот текст именно с помощью h3, но ничего не могу с собой поделать :) )

  13. Владимир 09.01.2008 в 22:27 (Ответить)

    Все, сдаюсь :-)
    Действительно, нужно было нормально переделать тему WP.
    Кстати, если уж придираться, то у кто-то вообще не перевел "Leave a comment", не говоря об h3 :-)
    Только без обид, блог очень хороший.

  14. Scratch 09.01.2008 в 22:32 (Ответить)

    Если быть предельно откровенным, то я единственное на что сподвигся — это поставить бесплатную тему и подсветку синтаксиса. А блог — вообще из предустановленных на хостинге :)

    Там получилось так, что нужно было проверить, как оно работает :) Поставил блог :)
    Ну, и чтобы он не пустовал — начал писать статейки :)))

    Будет время — сделаем. И тему, и плагины, и перевод (локализовать, правда, буду вручную, а не брать готовое), и интеграцию, если не заломает :)
    Блог ведь еще маленький, ему всего-то полтора месяца :) И то первое время он даже особо не велся :)

  15. Владимир 09.01.2008 в 22:36 (Ответить)

    Я, честно говоря, тоже планировал уделять блогу гораздо больше внимания…

  16. Scratch 09.01.2008 в 22:38 (Ответить)

    Так тут ведь все дело в том, что есть такая штука — работа называется.
    Хотя она, конечно, дает свои плюсы (вроде материалов для блога).

    Ну да ладно, глобальных планов у меня много, а все их разгрести не выходит…

  17. Владимир 09.01.2008 в 22:51 (Ответить)

    Да, работа требует времени. Но многие очень хорошие блоги ведутся действительно очень хорошими профессионалами. И как люди все успевают?

  18. Scratch 09.01.2008 в 22:58 (Ответить)

    Ну, блог же я все-таки веду :)

  19. Wincert 05.03.2008 в 22:06 (Ответить)

    Я думал будет что-то действительно интересное. Я про эту статью.

Оставить комментарий

Введите ваш комментарий

* - обязательные для заполнения поля

Quicktags:

]]>