Июль 3, 2014 Запись была обновлена
Проверка заполнения формы на HTML5 + CSS3
Практически на каждом сайте можно увидеть форму регистрации. Конечно есть такие, кто просто брал чужую форму, вставлял себе, а потом пользователь хочет зарегистрироваться, но не может. Бывают такие случаи что при регистрации определенный пароль допускается и у вас получается зарегистрироваться, но затем когда вы пытаетесь войти на сайт, появляется ошибка что это недопустимый пароль, и так сайт теряет определенное количество посетителей, поэтому будьте внимательны.
Реальный пример можно увидеть здесь:
Посмотреть примерСкачать
Это уже не первый урок на данную тему, возможно вы не видели прошлые и они вам будут интересны:
- Проверка заполнения форм на HTML5+стили
- Форма регистрации и входа на CSS3+HTML5
- Пользовательские стили для формы на чистом CSS без Javascript
HTML часть
Давайте посмотрим из чего же состоит данная форма:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <form class="contact_form" action="#" method="post" name="contact_form"> <ul> <li> <h2>Напишите нам</h2> <span class="required_notification">* поля обязательные к заполнению</span> </li> <li> <label for="name">Имя:</label> <input type="text" placeholder="Петров Александр" required /> </li> <li> <label for="email">Email:</label> <input type="email" name="email" placeholder="name@sitehere.ru" required /> <span class="form_hint">Например "name@sitehere.ru"</span> </li> <li> <label for="website">Веб-сайт:</label> <input type="url" name="website" placeholder="https://sitehere.ru" required pattern="(http|https)://.+"/> <span class="form_hint">Например "https://sitehere.ru"</span> </li> <li> <label for="message">Сообщение:</label> <textarea name="message" cols="40" rows="6" required ></textarea> </li> <li> <button class="submit" type="submit">Отправить</button> </li> </ul> </form> |
Если вы изучали прошлые уроки, то вам будут знакомы такие атрибуты как placeholder и required.
Но всё же повторю еще раз:
placeholder — присутствие данного атрибута означает что на фоне данного текстового поля будет текст, заданный в значении данного атрибута. А при вводе он исчезает.
required — если у поля есть данный атрибут, значит поле является обязательным для заполнения.
И мы не использовали Javascript потому что HTML5 позволяет нам сделать с помощью своих функций.
Также здесь есть новый атрибут pattern="(http|https)://.+" — он задает то, с чего должен начинаться веб-адрес сайта, иначе будет ошибка.
CSS часть
Теперь с HTML-частью мы закончили и надо придать вид нашей форме. Т.к. все элементы формы находятся в неупорядоченном списке, следовательно с помощью соответствующих селекторов будет задавать стили:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | .contact_form ul { width:750px; list-style-type:none; list-style-position:outside; margin:0px; padding:0px; } .contact_form li{ padding:12px; border-bottom:1px solid #eee; position:relative; } .contact_form li:first-child, .contact_form li:last-child { border-bottom:1px solid #777; } |
Последнее свойство значит что мы задаем границу первому и последнему элементу списка. Далее определим основные стили для элементов формы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | .contact_form label { width:150px; margin-top: 3px; display:inline-block; float:left; padding:3px; } .contact_form input { height:20px; width:220px; padding:5px 8px; } .contact_form textarea { padding:8px; width:300px; } .contact_form button { margin-left:156px; } |
А сейчас напишем стили, когда поля активны и когда нет:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | .contact_form input, .contact_form textarea { border:1px solid #aaa; box-shadow: 0px 0px 3px #ccc, 0 10px 15px #eee inset; border-radius:2px; padding-right:30px; -moz-transition: padding .25s; -webkit-transition: padding .25s; -o-transition: padding .25s; transition: padding .25s; } .contact_form input:focus, .contact_form textarea:focus { background: #fff; border:1px solid #555; box-shadow: 0 0 3px #aaa; padding-right:70px; } |
Далее задаем стили когда произошел некорректный ввод:
1 2 3 4 5 6 7 8 9 10 11 12 13 | .contact_form input:required, .contact_form textarea:required { background: #fff url(images/red_asterisk.png) no-repeat 98% center; } .contact_form input:required:valid, .contact_form textarea:required:valid { background: #fff url(images/valid.png) no-repeat 98% center; box-shadow: 0 0 5px #5cd053; border-color: #28921f; } .contact_form input:focus:invalid, .contact_form textarea:focus:invalid { background: #fff url(images/invalid.png) no-repeat 98% center; box-shadow: 0 0 5px #d45252; border-color: #b03535 } |
Осталось совсем чуть-чуть :). Предпоследним шагом необходимо задать стили для подсказок:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | .form_hint { background: #d45252; border-radius: 3px 3px 3px 3px; color: white; margin-left:8px; padding: 1px 6px; z-index: 999; /* значит что подсказка будет перекрывать все элементы */ position: absolute; /* можно подсказку разбить на две строки */ display: none; } .form_hint::before { content: "\25C0"; color:#d45252; position: absolute; top:1px; left:-6px; } .contact_form input:focus + .form_hint {display: inline;} .contact_form input:required:valid + .form_hint {background: #28921f;} .contact_form input:required:valid + .form_hint::before {color:#28921f;} |
И последним действием будет задание стиля кнопке «Отправить»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | button.submit { background-color: #68b12f; background: -webkit-gradient(linear, left top, left bottom, from(#68b12f), to(#50911e)); background: -webkit-linear-gradient(top, #68b12f, #50911e); background: -moz-linear-gradient(top, #68b12f, #50911e); background: -ms-linear-gradient(top, #68b12f, #50911e); background: -o-linear-gradient(top, #68b12f, #50911e); background: linear-gradient(top, #68b12f, #50911e); border: 1px solid #509111; border-bottom: 1px solid #5b992b; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; box-shadow: inset 0 1px 0 0 #9fd574; -webkit-box-shadow: 0 1px 0 0 #9fd574 inset ; -moz-box-shadow: 0 1px 0 0 #9fd574 inset; -ms-box-shadow: 0 1px 0 0 #9fd574 inset; -o-box-shadow: 0 1px 0 0 #9fd574 inset; color: white; font-weight: bold; padding: 6px 20px; text-align: center; text-shadow: 0 -1px 0 #396715; } button.submit:hover { opacity:.85; cursor: pointer; } button.submit:active { border: 1px solid #20911e; box-shadow: 0 0 10px 5px #356b0b inset; -webkit-box-shadow:0 0 10px 5px #356b0b inset ; -moz-box-shadow: 0 0 10px 5px #356b0b inset; -ms-box-shadow: 0 0 10px 5px #356b0b inset; -o-box-shadow: 0 0 10px 5px #356b0b inset; } |
Вывод
Ну вот и все! 🙂 Интернет-технологии настолько быстро развиваются, что вы и заметить не успеете как все будут применять связку HTML5+CSS3. Конечно надо предусматривать как будет выглядеть тот или иной элемент в старых браузерах, но и про новые возможности забывать нельзя!
Успехов!
Источник: webdesign.tutsplus.com
Спасибо за ваше обращение!
Мы свяжемся с вами в течение 2-х часов (график работы: пн-пт, с 10 до 19)
Добрый день, в этом месте (action=»#» ) должен находится файл php, но у вас там решётка, в результате форма не отправляется. Что нужно указать вместо решётки чтоб форма отправлялась или сохранялась в отдельный файл или что то еще???? Меня интересует форма отправки форма без php и java потому что хостинг не поддерживает их.
Михаил, в этом месте необходимо написать action=»result.php». Где файл result.php и занимается отправкой данных формы. Без поддержки php вы не сможете отправить содержимое формы, например, на email.
Спасибо! А существует html без дополнительных?
Просто создать форму можно с помощью HTML и CSS, но вот чтобы она «ожила» необходимо использовать php (java, .Net или другой язык веб программирования).
Ясно, спасибо.
Здравствуйте! Никак не могу прописать атрибут required. Вот пример одного кода:
<form class="form-horizontal" method="POST" action="index1.php">
<div class="form-horizontal">
<div class="texttext">
<input class="input" type="text" name="name" onfocus="if (this.value == 'Фамилия Имя Отчество') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Фамилия Имя Отчество';}" value="Фамилия Имя Отчество">
</div>
<div class="texttext">
<input class="input" type="text" name="adress" onfocus="if (this.value == 'E-mail') {this.value = '';}" onblur="if (this.value == '') {this.value = 'E-mail';}" value="E-mail">
</div>
<div class="texttext">
<input class="input" type="text" name="phone" onfocus="if (this.value == 'Ваш телефон') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Ваш телефон';}" value="Ваш телефон">
</div>
Проверила файл index1.php вроде все нормально. Не подскажете, как мне прописать правило для обязательного заполнения? А то у меня на сайте форм таких много и все отправляются без данных. Письма приходят пустые…
Если Вы не можете реализовать с помощью атрибутов, то рекомендую посмотреть еще данные статьи на сайте:
Проверка заполнения форм на HTML5+стили
Проверка заполнения формы на сайте
Если они также вызовут затруднения, то посмотрите как реализовать проверку с помощью PHP. Если и этот вариант покажется сложным, то попробуйте сделать валидацию полей формы с помощью jQuery. Материала в интернете по данной теме достаточно.
Спасибо! Посмотрю, если разберусь:)
Прописываю css формы в свой файл style.css, но на сайте форма отображается без css. Кеш чистил. С другого браузера смотрел.
Роман, значит, плохо прописываете. Внимательно смотрите на классы, не перекрывают ли ваши стили.
Я переименовал все классы ниже в css на свои имена и форме тоже. Не помогает.