Глава_14_Изучаем_HTML__XHTML. 653Переход на интерактивный режим
Скачать 4.49 Mb.
|
глава 14 Òåñòèðîâàíèå ýëåìåíòîâ òèïîâ number è date Вот что мы ввели в форму. Обратите внимание на то, что у типа number имеются стрелки вверх/вниз, а элемент управления для ввода даты в данном браузере (Chrome) является всего лишь типа text. А вот ответ Starbuzz Bean Machine. Как видно, мы зака- зали 5 пакетиков кофе! Домашняя смесь Боливия Гватемала Кения Заказать сейчас Выберите кофе: Тип: Кофе в зернах Молотый Дополнительные услуги: Подарочная упаковка Доставка каталога вместе с заказом Доставить по адресу Имя: Адрес: Город: Страна: Почтовый индекс: Телефон: Комментарии клиентов: Äîïîëíåíèå ôîðìû Вы уже почти все сделали. Осталось добавить в форму элемент управления «Дополнительные услуги» с двумя флажками и элемент управления для комментариев клиентов. Поскольку вы уже научились работать с формами, мы не будем тратить на это много времени и добавим оба раздела сразу. Раздел «Дополнительные услуги» состоит из двух флажков: одного для подарочной упаковки, другого — для доставки каталога. Кажется, флажок «Доставка каталога вместе с заказом» должен быть установлен по умолчанию. Раздел с комментариями клиентов — это просто элемент ‹textarea›. St ar buz z К аф е S ta rb uzz Каф е тест- драйв 681 дальше html- формы Äîáàâëåíèå ôëàæêîâ è ìíîãîñòðî÷íîãî òåêñòîâîãî ïîëÿ Мы добавили по одному флажку для каждого параметра. Обратите внимание, что имена элементов одинаковые: “extras[ ]”... Как и для пе- реключателей, мы разместили метки справа от флажков. Мы используем атрибут checked, чтобы указать, что флажок о доставке каталога должен быть установлен по умолчанию. Вы можете добавить атрибут checked сразу для нескольких флажков. Вы знаете, что делать: просмотрите новый HTML-код и добавьте его в файл form.html. Это многострочное текстовое поле. ...но их значения разные. 682 глава 14 Çàâåðøàþùèé òåñò Сохраните изменения, обновите страницу и оцените новую форму. Не находите, что она достаточно хорошо выглядит? Вот то, что вы получите после представления информации на рассмотрение. Серверный сценарий получил все данные формы и использовал их на странице с ответом. Убедитесь, что можете найти на ней все данные, которые ввели в форме. Попробуйте использовать различ- ные комбинации данных в форме, предлагаемой на рассмотрение (с подарочной упаковкой и без нее, с каталогом и без, с различными сортами кофе и т. д.), и посмо- трите, как все будет работать. успешная передача на рассмотрение Вот наши новые флажки, один из которых — «Доставка каталога вместе с заказом» — уже выбран. А это многострочное поле для ввода текстовой информации. 683 дальше html- формы Остановитесь на минутку. Вы думаете, я не заметила, как вы попытались не обращать внимания на элемент “extras[]”? Что это за квадратные скобки? Вы должны это объяснить. И несмотря на то что оно допустимо, оно выглядит не совсем обычно, не так ли? Дело вот в чем: с точки зрения HTML это нормальное имя для элемента формы. Если в имени указаны квадратные скобки, это никак не влияет на браузер. Так зачем же мы его использовали? Оказывается, сценарный язык (PHP), на котором написан сер- верный сценарий processorder.php, понимает небольшую подсказку, что переменная формы мо- жет включать в себя несколько значений. Способ, которым вы даете ему эту подсказку, — указание символов «[]» в конце имени. Итак, если вы ограничиваетесь только изучением HTML, можете полностью об этом забыть. Однако лучше сохраните эту информацию в самом дальнем уголке сознания на тот случай, если когда-нибудь в будущем захотите написать форму, которая будет использовать серверный сценарий PHP. Верите вы или нет, но «extras[ ]» — это весьма допустимое имя для элемента формы. 684 глава 14 Ниже приведена HTML-форма, а справа — те данные, которые ввел в нее пользователь. Ваша задача — стать на время браузером и поставить в соответствие каждому имени элемента формы значение, введенное пользователем. Выполнив это упражнение, проверьте, все ли вы сделали правильно. Это форма. сопоставим имена с элементами формы СТАНЬ браузером 685 дальше html- формы name = __________________ zip = ___________________ model = _________________ color = _________________ caroptions[] = __________ Эта форма заполнена. Поставьте в соответствие каждому полю формы его значение и впишите свои отв еты сюда. "Áàêêàðó Áàíçàé" Дополнительное задание для вас… 686 глава 14 Теперь, когда мы закончили с формой, не могли бы мы поговорить о способах отсылки данных на сервер? Мы использовали POST, но вы сказали, что существуют и другие способы. POST и GET выполняют одну и ту же работу — доставляют данные вашей формы из браузера на сервер. Но они делают это различными способами. POST упаковывает переменные формы и незаметно для пользователя отсылает их серверу. В то же время GET также упаковывает переменные формы, но, прежде чем отправить запрос серверу, присоединяет их в конец URL-адреса. Есть два основных метода, которые использует браузер: POST и GET. При использовании метода POST все данные формы отсылаются серверу как часть запроса и не видны пользователю. fi rstname=buck lastname=bonz item=java number=2 Серверный сценарий POST GET http://wickedlysmart.com/hfhtmlcss/contest.php http://wickedlysmart.com/hfhtmlcss/contest.php?fi rstname=buckaroo&lastname=banzai При использовании метода GET данные формы добавляются к самому URL-адресу, так что пользователь их видит. В адресной строке браузера пользователь видит только URL серверного сценария. Обратите внимание, что данные формы добавляются в конец URL-адреса. Это то, что пользователь ви- дит в адресной стро- ке браузера. методы формы: get и post Серверный сценарий 687 дальше html- формы В: Почему метод называется GET («получатель»), хотя мы, наоборот, отсылаем что-то серверу? О: Хороший вопрос. Какова основная ра- бота браузера? Получать веб-страницы от сервера. Когда вы используете метод GET, браузер просто получает веб-страницу, как делает это всегда. Кроме того, в случае с формой он присоединяет данные в конец URL-адреса. Надо также отметить, что бра- узер воспринимает это как обычный запрос. Когда вы используете метод POST, браузер, наоборот, создает небольшой пакет данных и отправляет их серверу. В: В чем же преимущества и не- достатки использования методов POST и GET? О: Есть несколько отличий, которые на самом деле имеют большое значение. Ес- ли вы хотите, чтобы пользователи могли напрямую ссылаться на веб-страницы, кото- рые являются результатом представления формы на рассмотрение, то лучше исполь- зуйте метод GET, потому что не существует способа сослаться на страницу, являющуюся результатом рассмотрения формы мето- дом POST. Когда вам может такое понадо- биться? Допустим, у вас есть серверный сценарий, который возвращает список ре- зультатов поиска. Тогда можно сделать так, чтобы пользователи могли ссылаться на эти результаты и снова просматривать их без необходимости вновь заполнять всю форму. С другой стороны, если ваш сер- верный сценарий обрабатывает заказы, то вы не захотите, чтобы пользователи ссыла- лись на результаты таких обработок. Иначе каждый раз, когда они будут возвращаться к этой странице, заказ будет снова и снова представляться на рассмотрение. Ситуация, в которой вы точно никогда не захотите использовать метод GET, — когда данные в вашей форме являются конфиденциаль- ными, например хранят номер кредитной карты или пароль. Поскольку URL легко увидеть, конфиденциальная информация может быть запросто получена другими людьми, если они просмотрят историю ва- шего браузера или если каким-то образом GET попадет в закладки. Наконец, если вы используете элемент 688 глава 14 Для каждого описания обведите карандашом либо GET, либо POST, в зависимости от того, какой метод лучше всего подходит в указанной ситуации. Если вы думаете, что подойдет любой метод, обведите оба. Но будьте готовы отстоять свое мнение. GET или POST GET POST Форма для ввода имени пользователя и пароля. GET POST Форма для заказа компакт-дисков. GET POST Форма для поиска новостей. GET POST Форма для отправки рецензий на книгу. GET POST Форма для получения информации о пособиях по государственному идентификационному номеру. GET POST Форма для отправки отзывов клиентов. Возьми в руку карандаш тест для вас, get и post 689 дальше html- формы Я хотел сказать, что вы отлично поработали над разделом Bean Machine! Новая форма на самом деле увеличит объемы продаж нашего кофе. Вам осталось придать стиль этому разделу, и мы будем готовы предоставить нашим пользователям возможность онлайн- заказа. Как вы оформите эту форму, применяя все свои знания в области HTML и CSS? Мозговой штурм 690 глава 14 выбираем, как оформить формы Формы обычно являются табличными по своему макету, так что вы, вероятно, столкнетесь с тем, что макет табличного представления CSS отлично подходит для создания представления вашей формы… именно его мы и будем применять для разметки формы Bean Machine. Благодаря этому макету табличного представления наша страница будет выглядеть как настоящая форма, а не как беспорядочный набор элементов для ввода информации, и будет более легкой для чтения. Прежде всего давайте выясним, какая табличная структура свойственна данной форме. Взяв за основу приведенный чуть ниже набросок, вставьте элементы в таблицу (подсказка: как мы сами выяснили, для их вставки отлично подойдет таблица с 2 столбцами и 14 строками), чтобы каж- дая строка и каждая ячейка были представлены блочным элементом. Вам может потребоваться добавить структуру в HTML-код, чтобы все получилось. Не заглядывайте на следующую страницу с решением до того, как выполните это упражнение. Мы серьезно! Постарайтесь как-нибудь удержаться от соблазна. Возьми в руку карандаш 691 дальше html- формы Вот набросок таблицы. Э то простой макет табличного представления из 2 столбцов и 14 строк – по одной строке для каждого основного разд ела формы. Все элементы для ввода информации мы поместили в правый столбец. Помните, что каждая ячейка соответствует блочному эле- менту, поэтому мы добавим дополнительные элементы , чтобы обеспечить отдельный блочный элемент для каждой ячейки. Метки для каждого эле- мента формы помещаются в левый столбец. Ячейка спра- ва от кнопки «Заказать сейчас» пуста. Нет метки, которую мож- но поместить сюда. Обратите внимание, что флажки и переключатели рас- положены в отдельных ячейках. Нам также потребуются до- полнительные блочные элемен- ты для строк. Мы задействуем элементы , как делали это ранее (в главе 11). Ячейка справа от «Доставить по адресу» пуста; здесь нет никаких элементов управления. Все значе- ния в ячей- ках имеют вертикальное выравнивание по верху ячеек. И наконец, нам понадобится один элемент, который будет все содержать, для таблицы как таковой. Для этого мы можем использовать элемент 692 глава 14 Выберите кофе: Тип: Кофе в зернах Молотый кофе Количество пакетиков: Доставить к указанной дате: Дополнительные услуги: Подарочная упаковка Доставка каталога вместе с заказом Ðàçìåùåíèå ýëåìåíòîâ ôîðìû â HTML-ñòðóêòóðå äëÿ ìàêåòà òàáëè÷íîãî ïðåäñòàâëåíèÿ Теперь, когда вы знаете, как расположить элементы формы в макете табличного представления, вам предстоит протестировать свои навыки по написанию HTML. Итак, начните печатать прямо сейчас! Это была шутка. Мы не будем заставлять вас все это печатать. В конце концов, эта глава посвящена формам, а не макету табличного представления. Мы уже набра- ли весь код сами: вы найдете его в файле styledform.html, который находится в папке chapter14/starbuzz. Ниже мы добавили несколько замечаний, чтобы выделить основные части. Это элемент ‹form›. Мы будем использовать данный элемент для табличной части представ- ления. Мы используем с классом tableRow для каждой из строк таблицы. См. продолжение кода на следующей странице. Содержимое для каждой из ячеек вложено в элемент Для переключателей и флажков мы сгруппировали все элементы и поместили их в одну ячейку таблицы. структурирование html Готово к употреблению 693 дальше html- формы Доставить по адресу: Имя: Адрес: Город: Страна: Почтовый индекс: Телефон: Комментарии клиентов: Обратите внимание на то, что в правом столбце у нас также имеется пустая ячейка, поэтому мы можем поместить сюда пустой элемент Для последней строки у нас имеется пустая ячейка в левом столбце, поэтому мы опять-таки можем использовать пустой для нее. Все строки просты: с классом tableRow для строки, а каждая ячейка – в Для каждой строки, содержащей только метку «Доставить по адресу:», мы добавили класс heading в , так что мы можем выделить данный текст полужирным шрифтом 694 глава 14 оформление формы Îôîðìëåíèå ôîðìû ñ ïîìîùüþ CSS У нас уже есть вся необходимая нам структура, так что теперь нам осталось лишь добавить не- сколько правил стиля, и все будет готово. Поскольку наша форма — это часть сайта Starbuzz, мы будем повторно использовать стили из файла starbuzz.css и создадим таблицу стилей под названием styledform.css, в которую добавим новые правила стиля для формы Bean Machine. Вы уже видели весь этот CSS-код. Мы не используем никаких индивидуальных правил стиля для форм и таблиц: все это уже было сделано в предыдущей главе. Вы найдете CSS-код в файле styledform.css, который находится в папке chapter14/starbuzz. В некоторых стилях мы будем полагаться на CSS для всего Starbuzz-сайта, но добавим фоновый рисунок Starbuzz и поля для элемента body. Готово к употреблению body { background: #efe5d0 url(images/background.gif) top left; margin: 20px; } form { display: table; padding: 10px; border: thin dotted #7e7e7e; background-color: #e1ceb8; } form textarea { width: 500px; height: 200px; } div.tableRow { display: table-row; } div.tableRow p { display: table-cell; vertical-align: top; padding: 3px; } div.tableRow p:first-child { text-align: right; } p.heading { font-weight: bold; } …и добавляем границу вокруг формы и от- ступы между содержимым формы и границей, а также фоновый цвет для того, чтобы форма контрастировала с фоном страницы. Каждый с классом tableRow играет роль строки в макете табличного пр едставления. Каждый элемент , вложенный в с классом tableRow, является ячейкой таблицы. Мы вертикально выравниваем содержимое в каждом , чтобы содер- жимое в каждой строке было выровнено по верху ячеек. Мы также задаем здесь небольшой отступ, чтобы добавить пространства между строками. Данное правило задействует псевдоэлемент fi rst-child в селекторе для элементов , вложенных в элементы с классом tableRow. Это означает, что первый элемент в каждой строке будет выравниваться по правой стороне, то есть все они будут вертикально выравниваться относительно правой стороны столбца. Мы используем форму для представления таблицы в табличном виде… Для всех элементов с классом heading мы выде- ляем полужирным шрифтом текст, чтобы он вы- глядел как заголовок. Данный класс мы использовали в случае с ячейкой «Доставить по адресу:». Чтобы для комментариев было больше места, в фор- ме мы делаем крупнее такой элемент управления, как многострочное поле для ввода текстовой информации, задав соответствующие значения для width и height. 695 дальше html- формы Òåñòèðîâàíèå îôîðìëåííîé ôîðìû Вы добавите два элемента в элемент 710 приложение #box { position: absolute; top: 100px; left: 100px; width: 200px; height: 200px; background-color: red; transition: transform 2s; -webkit-transition: -webkit-transform 2s; -moz-transition: -moz-transform 2s; -o-transition: -o-transform 2s; } #box:hover { transform: rotate(45deg); -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -o-transform: rotate(45deg); -ms-transform: rotate(45deg); } Мы можем добавить свойство transition в правило для с идентификатором box, чтобы его трансформация в новое состоя- ние занимала 2 секунды. Вот как мы это сделаем: Значение свойства transition представляет собой другое свой- ство, которым в данном случае является transform, в сочетании с отрезком времени, в данной ситуации равным 2 секундам. Когда значение указанного свойства изменяется, transition способствует тому, чтобы данное изменение осуществлялось на протяжении заданного отрезка времени, в результате чего получается анима- ционный эффект. Вы также можете обеспечить переход в случае с другими CSS-свойствами, например width или opacity. Свойство transition «говорит»: «Если значение свой- ства transform изменится, осуществить переход от текущего значения transform к новому значению transform за указанный отрезок времени». transform по умолчанию не име- ет никакого значения, то есть трансформация отсутствует. Однако когда вы наведете курсор мыши на элемент с идентифи- катором box, transform приобретет значение, согласно которому данный элемент повернется на 45 градусов. Таким образом, переход от отсут- ствия трансформации до трансфор- мации в виде поворота на 45 граду- сов произойдет за 2 секунды. 2 секунды css- трансформации и переходы Internet Explorer в настоящее время (включая версию 9) не име- ет поддержки для transition, она появится в версии 10. Вы не уви- дите анимацию, если использу- ете Internet Explorer. 711 дальше приложение window.onload = init; function init() { var submitButton = document.getElementById("submitButton"); submitButton.onclick = validBid; } function validBid() { if (document.getElementById("bid").value > 0) { document.getElementById("theForm").submit(); } else { return false; } } № 4. Èíòåðàêòèâíîñòü HTML-страницы не обязательно должны быть пассивными документами: они могут иметь исполняемое содержимое. Оно задает поведение для ваших страниц. Исполняемое содержимое создается посредством написания программ или сценариев на языке сценариев под названием «JavaScript». Посмотрите на следующий фрагмент кода, чтобы получить первое представление о том, как поместить исполняемое содержимое на ваши страницы. Это новый HTML- элемент |