Всем доброго времени суток! В продолжение темы о создании контактной формы, сегодня хочу рассказать, о простом способе интеграции этой самой формы в модальное окно, тем самым предоставить отличную возможность вашим читателям отправлять сообщения с любой страницы, или отдельной записи сайта (блога).
Обновлено: 31.10.2014
У нас есть вполне приличная контактная форма, сверстанная на чистом css, как заделать работоспособное модальное окно, мы тоже разобрались, теперь остается эти два механизма объединить в единый инструмент. Вот как раз этим интересным занятием, мы сейчас и займемся, для начала же, можете посмотреть пример того, что у нас получится:
Пример посмотрели, теперь давайте разберем весь процесс на составляющие и начнем с разметки html. Всю структуру модального окна расписывал ранее, но для тех кому в лом повторять пройденное, опишу поэтапно, так как с внедрением формы обратной связи в всплывающий блок, код будет немного другим.
HTML
В первую очередь необходимо правильно оформить ссылку для вызова модального окна, ей может быть просто текстовая ссылка в любой статье, а так же пункт в меню навигации по сайту. Соответственно туда где вам приспичит добавляем теги<a></a>
со следующими атрибутами:
- href #?w=600— указывает ширину окна,
- rel – уникальный атрибут окна,
- class="poplight" – класс для показа всплывающего окна.
Собрав все атрибуты воедино получим следующий вид ссылки:
<a class="poplight" rel="popup_contact" href="#?w=600">Контакты</a> |
Затем нам необходимо создать встроенную разметку для всплывающего окна. Разместить можно в любом месте страницы, ну например в нижней части содержания. Обратите внимание, что идентификатор всплывающего окна соответствует атрибуту rel тега <a></a>
. Это и будет связывать ссылку и всплывающее окно вместе.
Чтоб не нагружать вас излишним копанием в коде всей конструкции, в разметку окна, сразу встроил html код контактной формы:
<div id="popup_contact" class="popup_block"> <div class="note"> <img src="images/form/email.jpg" alt="Контакты" style="float:left;margin:5px 10px 5px 0; " /> <h1>Уважаемые друзья!</h1> <p> Обращаю Ваше внимание, что пункты отмеченные звездочкой, обязательны для заполнения. </p> </div> <form id="form" action="/" method="post"> <fieldset> <p class="first"> <label for="name">Имя *</label> <input type="text" name="name" id="name" size="30" /> </p> <p> <label for="email">Email *</label> <input type="text" name="email" id="email" size="30" /> </p> <p> <label for="web">Вебсайт (не обязательно)</label> <input type="text" name="web" id="web" size="30" /> </p> </fieldset> <fieldset> <p> <label for="message">Сообщение:</label> <textarea name="message" id="message" cols="30" rows="10"></textarea> </p> </fieldset> <p class="submit"><button type="submit">Отправить</button></p> </form> </div> |
Как вы видите всплывающее окно, это div
— контейнер с идентификатором popup_contact, который соответствует атрибуту rel
в активирующей ссылке.
Останавливаться на разметке контактной формы не буду, так как ее макет полностью идентичен форме, о которой рассказывал в статье: Стиль контактной формы CSS.
На ряду с формой, добавил небольшой информационный блок div id="note" с изображением и текстовой шелухой ( пояснением к форме). При неуемном желании всегда сможете изменить, или полностью исключить содержание этого блока из состава всплывающего окна.
CSS
Тихим сапом, без лишней суеты, подошли к стилям css, как для окошка, так и для формы. Со стилями сложностей возникнуть не должно, для придания «картине» ясности я прописал некоторые пояснения к селекторам. Важно ничего не напутать, да и не переусердствовать с экспериментами.
/*--Модальное окно--*/ .popup_block{ position: fixed; top: 50%; left: 50%; z-index: 99999; display: none; /*--по умолчанию скрыт--*/ float: left; -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; padding: 15px; border: 10px solid #6e6e6e; /*-- скругленные углы--*/ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; background: #fff; /*--тени для блока--*/ -webkit-box-shadow: 0px 0px 20px #000; -moz-box-shadow: 0px 0px 20px #000; box-shadow: 0px 0px 20px #000; color: #000; font-size: .9em; } /*--Фиксированное позиционирование для тупого IE6--*/ *html #fade { position: absolute; } *html .popup_block { position: absolute; } /*--блок заголовка--*/ .note{ margin:0 0 30px 0; } .note img{ float:left; margin:5px 10px 5px 0; width: 100px; height: 100px; } .note h1{ color: #008000; text-shadow: 0 1px 3px rgba(0,0,0,.3); font:24px Monotype Corsiva, Arial; } /* формируем кнопку закрытия */ .close { position: absolute; top: -18px; right: -18px; width: 24px; height: 24px; border: 2px solid #ccc; -webkit-border-radius: 15px; -moz-border-radius: 15px; -ms-border-radius: 15px; -o-border-radius: 15px; border-radius: 15px; background-color: rgba(61, 61, 61, 0.8); -webkit-box-shadow: 0px 0px 10px #000; -moz-box-shadow: 0px 0px 10px #000; box-shadow: 0px 0px 10px #000; text-align: center; text-decoration: none; font-weight: bold; line-height: 20px; -webkit-transition: all ease .8s; -moz-transition: all ease .8s; -ms-transition: all ease .8s; -o-transition: all ease .8s; transition: all ease .8s; } .close:before { color: rgba(255, 255, 255, 0.9); content: "X"; text-shadow: 0 -1px rgba(0, 0, 0, 0.9); font-size: 12px; } .close:hover { background-color: rgba(252, 20, 0, 0.8); /*--крутим кнопку при наведении--*/ -webkit-transform: rotate(360deg); -moz-transform: rotate(360deg); -ms-transform: rotate(360deg); -o-transform: rotate(360deg); transform: rotate(360deg); } /* контактная форма */ #form{ overflow: hidden; margin: 0 auto; padding-top: 10px; /* устанавливаем необходимую ширину формы в зависимости от дизайна ** форма отлично растягивается */ width: 100%; border: 1px solid #D3D3D3; /* закругляем углы */ border-radius:8px; background: none repeat scroll 0 0 #FFFFFF; /* добавляем тени для блока*/ box-shadow: 0 0 5px #CCCCCC, 1px 1px 0 #FFFFFF inset, -1px -1px 0 #FFFFFF inset, 0 0 15px #DDDDDD inset; text-align: left; } /* формируем элементы внутри формы */ #form fieldset{ display:inline; float:left; margin:0; margin-left:26px; padding:0; width: 42%; border:none; } #form p{ margin:.5em 0; } /* подписи к полям ввода */ #form label{ display:block; margin-bottom:1px; color:#5B5B5B; } #form input, #form textarea{ padding:3px; /* отключаем бордюры у инпутов и текстового поля */ border: none; /* закругляем углы полей ввода */ -webkit-border-radius:.3em; -moz-border-radius:.3em; border-radius:.3em; background-color: #F7F7F7; /* добавляем внутренние тени у инпутов и текстового поля */ box-shadow: inset 0 0 5px rgba(0,0,0,0.1), inset 0 1px 2px rgba(0,0,0,0.3); color: #5B5B5B; font:13px Trebuchet MS, Arial, Helvetica, Sans-Serif; } #form input { /* устанавливаем ширину инпутов */ width:90%; } /* изменяем оформление полей ввода при фокусе */ #form input:focus, #form textarea:focus { background: #F2F2F2; box-shadow: inset 0 0 5px rgba(0,0,0,0.2), inset 0 1px 2px rgba(0,0,0,0.4); color: #333; } #form textarea{ overflow:auto; width:100%; /* устанавливаем ширину текстового поля */ height:120px; } /* формируем нижний сектор формы */ #form p.submit{ clear:both; margin:0; padding: 10px 25px 20px; text-align:right; } /* оформляем кнопку отправки */ #form button{ /* устанавливаем необходимую ширину кнопки */ border: solid 1px #2f96b4; /* закругляем углы кнопки */ border-radius: 5px; background-color: #49AFCD; /* градиентная заливка для современных браузеров */ background-image:-moz-linear-gradient(center top , #5BC0DE, #2F96B4); background-image: -webkit-linear-gradient(center top, #5bc0de, #2f96b4); background-image: -ms-linear-gradient(#5bc0de, #2f96b4); background-image:-o-linear-gradient(center top , #5BC0DE, #2F96B4); /* добавляем внешние тени */ box-shadow: 0 1px 2px rgba(0,0,0,0.4); color:#fff; padding:0 12px; text-align:center; line-height:28px; /* градиент для IE6-9 */ filter: progid:DXImageTransform.Microsoft.Gradient(StartColorStr='#5BC0DE', EndColorStr='#2F96B4', GradientType=0); cursor:pointer; } /* изменяем оформление кнопки при наведении */ #form button:hover { border-color: #2C8BA5; box-shadow: none; } /* изменяем оформление кнопки при нажатии */ #form button:active { border-bottom: 1px solid #5BC0DE; background-image:-moz-linear-gradient(#2F96B4, #5BC0DE); /* Firefox */ background-image: -webkit-linear-gradient(#2F96B4, #5BC0DE); /* Chrome, Safari */ background-image: -ms-linear-gradient(#2F96B4, #5BC0DE); /* IE-10 */ background-image:-o-linear-gradient(#2F96B4, #5BC0DE); /* Opera */ /* добавляем внутренние тени */ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3) inset; /* градиент для IE6-9 */ filter: progid:DXImageTransform.Microsoft.Gradient(StartColorStr='#2F96B4', EndColorStr='#5BC0DE', GradientType=0); } /* конец формы */ |
Так как всплывающие окна могут иметь разный размер, мы не указываем в CSS popup_block края окна, вычислить необходимый размер это задача для jQuery.
Подключение JQuery
С разметкой, оформлением модального окна и контактной формы мы разобрались. Теперь, чтобы все это хозяйство заработало, необходимо воспользоваться магией JQuery, подключив плагин к документу. В начале документа между тегами <head>...</head>
, или же в подвале страницы, перед закрывающем тегом </body>
пропишите следующее:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script src="js/dm-modal.js"></script> |
На этом пожалуй и все, всплывающее окно с встроенной контактной формой готово. Все бы ничего, если бы не замшелый и убогий IEшка, с его патологической заторможенностью, в 6 и 7 версии браузера, даже с использованием фильтра, функция прозрачности слоя opacity не прокатывает. Ну да ладно, думается мне на IEшку можно и подзабить, жаль только пользователи, которые в извращенной форме подсажены на этот браузер, не увидят корректной работы всей конструкции.
Надеюсь все у вас получится, возникнут вопросы или дополнения, пишите в комментариях, в обсуждениях истину нароем обязательно.
Буду всем признателен, если поддержите проект — добавив блог в исключения AdBlock и поделитесь ссылкой на запись в своих соц-сетях:
Скажите можно ли это реализовать в joomla. Или может кто знает как можно сделать подобное чудо в joomla.
Здравствуйте. Огромное спасибо за материалы! Все установил и работает, кроме того, что когда я нажимаю «отправить», ничего не происходит... Думаю, что нужно прописать E-mail адрес, на который, собственно и будут приходить письма. Но проблема в том, что я не знаю куда и что прописать(( Помогите пожалуйста, а то завтра экзамен, нужно будет показать готовый сайт. Заранее благодарен.
Сайт уже закончен, но не работает эта кнопка...
Max, вечер добрый!
В статье описан способ интеграции контактной формы, точнее ее html оболочки, а так же оформление формы с помощью CSS. Без Php обработчика это просто красивая оболочка формы обратной связи. Php обработчик (скрипт), можно найти в инете, благо этого добра навалом. От вашего хостинга потребуется поддержка Php. Если таковая присутствует, то проблем нет.
Какую CMS (движок) для сайта вы использовали или сайт статический на Html?
Очень подробно и содержательно по этой теме расписано Здесь , заодно можно скачать готовый скрипт формы обратной связи.
Я сделал просто на html, без движка. Я еще не залил на сервер, сегодня должен залить... Если честно, я совсем новичок в этом деле, усердно стараюсь, но в php не разобрался еще... А на счет подробной и содержательной ссылки, я обязательно почитаю, просто, если бы вы подкинули пару идей, по поводу как сделать это побыстрее, я был бы признателен.
Если хостинг с поддержкой Php, проблем не возникнет. Если нет, то можно воспользоваться онлайн сервисами генераторов и конструкторов форм обратной связи, которые предоставляют вам бесплатно свои собственные Php обработчики, которые будут расположены на их серверах. Для примера посмотрите конструктор на ip-whois. Дизайн форм конечно не ахти какой, но компенсируется тем, что можно создать форму за пять секунд и еще за минуту поставить абсолютно на любой сайт, даже расположенный на хостинге без поддержки Php. Можно потом переписать пути и данные из кода их формы в свою. Не гарантирую, что точно сработает, сам не проверял ))) И еще один генератор форм обратной связи.
Удачи!
Я уже закинул ваш каркас... Можно ли на него пшп скрипт найти? Просто скажите, как правильно написать поисковую форму вопроса? Спасибо за терпение и понимание.
П.С. Я уже посоветовал этот сайт всем своим однокурсникам, только они говорят на французском, походу через гугл будут переводить...))
Max вбивайте в поиск «php скрипт отправки почты», желательно без кавычек ))) Но думается мне, что вы взялись за сложный вариант организации обратной связи. Надеюсь все у вас получится. Посмотрите видео урок и уже на базе полученной инфы, методом проб и ошибок подключите скрипт к вашей форме, главное чтобы мозг не вскипел и хватило терпения.
Max. Вдогонку к предыдущему комменту. Посмотрите как реализована данная форма в модальном окне, по моему уроку на сайте phototops.ru, см в самом низу в подвале — ссылка «Обратная связь». При желании можете связаться с админом сайта и узнать все технические детали. По моему у него все замечательно получилось и работает. Удачи!
Огромное спасибо!!!
Пожалуйста, всегда рад помочь. Спасибо вам, что читаете мои статьи. Заглядывайте почаще )))
Здравствуйте!
Подскажите, пожалуйста, как сделать так, чтобы после нажатия на кнопку «Отправить» в этом же модальном окне выводилось сообщение «Спасибо за заявку! Мы свяжемся с вами в ближайшее время»?
не могу привязать ссылку...
Тимур в комментариях да в самой статье я подробно описал как привязать ссылку на вызов модального окна, повторюсь специально для вас:
да да ... тупанул)) простите))
Ничего бывает)))
а файл jquery.min.js его тоже к себе нужно залить? если да то где его взять?)
Тимур, jquery.min.js это размещенный на Google отдельный файл библиотеки jQuery, заливать его к себе нет надобности, главное правильно прописать в html, как, в статье все подробно расписано.
когда нажимаю на контакты экран мутнеет и все((
Тимур, мне трудно не видя объект давать вам какой то совет. У вас не открывается всплывающее окно, вы вообще разместили каркас окна на странице html? Проверьте ссылку, должно быть href="#?w=600" rel="popup_contact" class="poplight", соответственно div окошка с идентификатором id="popup_contact" и классом class="popup_block".
Можете тупо из примера кусок кода окна вбить себе и все!)))