Робимо відмінну систему реєстрації з використанням PHP, MySQL та jQuery. Покрокова реєстрація засобами jQuery PHP форма реєстрації у стилі Facebook

Якщо вам необхідно зробити один із розділів свого сайту доступним обмеженому, але невизначеному колу осіб, найпростіше це зробити за допомогою реєстрації та авторизації користувачів. Є багато способів авторизації користувачів. Можна використовувати інструменти веб-сервера та інструменти мови програмування. Ми поговоримо про випадок, коли використовуються сесії PHP.

Ймовірно, ви хотіли б побачити сучасніший спосіб створення такої форми. Повне його сучасне та актуальне уявлення у мене поки що в планах, зате ви можете побачити, що форму зворотного зв'язку можна побудувати за допомогою об'єктно-орієнтованих прийомів у PHP.

Для початку обговоримо всі кроки, які зробимо далі. Що нам взагалі потрібне? Нам потрібен сценарій, який реєструватиме користувача, авторизуватиме користувача, переадресовуватиме користувача кудись після авторизації. Також нам потрібно буде створити сторінку, яку буде захищено від доступу неавторизованих користувачів. Для реєстрації та авторизації нам необхідно буде створити HTML-форми. Інформацію про зареєстрованих користувачів ми зберігатимемо у базі даних. Це означає, що нам ще потрібен скрипт підключення до СУБД. Усю роботу ми виконуватимемо функції, які ми самі напишемо. Ці функції ми збережемо окремий файл.

Отже, нам потрібні такі файли:

  • з'єднання із СУБД;
  • функції користувача;
  • авторизація;
  • реєстрація;
  • захищена сторінка;
  • сценарій завершення роботи користувача;
  • сценарій, що перевіряє статус авторизації користувача;
  • таблиця стилів для найпростішого оформлення сторінок.

Все це буде безглуздо, якщо у вас немає відповідної таблиці у базі даних. Запустіть інструмент управління своїм СУБД (PhpMyAdmin або командний рядок, як зручніше) і виконайте в ньому наступний запит:

CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT, `login` char(16) NOT NULL, `password` char(40) NOT NULL, `reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Наші файли зі сценаріями я назву так (всі вони будуть лежати в одному каталозі):

  • database.php;
  • functions.php;
  • login.php;
  • registration.php;
  • index.php;
  • logout.php;
  • checkAuth.php;
  • style.css

Призначення кожного з них, напевно, вам зрозуміле. Почнемо зі скрипту з'єднання із СУБД. Ви його вже бачили. Просто збережіть код цього скрипта у файлі з ім'ям database.php. Функції користувача ми будемо оголошувати у файлі functions.php . Як це все працюватиме? Неавторизований користувач намагається отримати доступ до захищеного документа index.php , система перевіряє чи авторизований користувач, якщо користувач не авторизований, він переадресовується на сторінку авторизації. На сторінці авторизації користувач має бачити форму авторизації. Давайте зробимо її.

Авторизація користувачів

зареєструйтесь.

Тепер нашій формі потрібно надати якогось вигляду. Заодно визначимо правила інших елементів. Я, забігаючи наперед, наведу вміст таблиці стилів повністю.

/* файл style.css */ .row ( margin-bottom:10px; width:220px; ) .row label ( display:block; font-weight:bold; ) .row input.text ( font-size:1.2em; padding:2px 5px; ) .to_reg ( font-size:0.9em; ) .instruction ( font-size:0.8em; color:#aaaaaa; margin-left:2px; cursor:default; ) .error ( color:red; margin-left:3px;

Якщо все зроблено правильно, у вас у броузері має бути таке:

Звичайно ж, у нас немає поки жодного зареєстрованого користувача, і щоб авторизуватися, потрібно зареєструватися. Давайте зробимо форму реєстрації.

Реєстрація користувачів

" />

Ви, напевно, звернули увагу на те, що в HTML коді присутні змінні PHP. Вони є вмістом атрибутів текстових полів форм, вміст контейнерів, призначених для виведення помилок. Але ми не ініціалізували ці змінні. Давайте зробимо це.

Реєстрація користувачів

" />
В імені користувача можуть бути лише символи латинського алфавіту, цифри, символи "_", "-", ".". Довжина імені користувача повинна бути не коротшою за 4 символи і не довшою за 16 символів
У паролі можна використовувати лише символи латинського алфавіту, цифри, символи "_", "!", "(", ")". Пароль повинен бути не коротшим за 6 символів і не довшим за 16 символів
Повторіть введений пароль

В атрибуті action тега form не вказано параметр. У цьому випадку при надсиланні даних форми оброблятися вони будуть у тому ж сценарії, з якого вони й відправлялися. Значить, нам потрібно написати код, який обробляє дані форми. Але давайте спочатку обмовимо алгоритм їхньої обробки.

Нам потрібно, щоб поля логіну та паролю не були порожніми. Потім необхідно перевірити логін на відповідність до вимог. Пароль також повинен відповідати описаним вимогам, а повторно вказаний пароль повинен з ним збігатися і, крім того, вони мають бути ідентичними. Якщо якась із цих умов не виконується, обробка даних форми повинна бути припинена, в масив повідомлень про помилку має бути записане відповідне сповіщення, і воно має бути відображене користувачеві. Для зручності користувача ми збережемо введений ним логін (якщо він його вказав), записавши його значення масив $fields .

Якщо все нормально, у вікні вашого броузера, звернувшись до документа registration.php, ви маєте побачити приблизно таку форму:

Тепер, скажімо, користувач натиснув на кнопку реєстрації, не заповнив поля форми. Відповідно до нашого алгоритму, логін та пароль не можуть бути порожніми. Якщо ця умова не виконується, реєстрація неможлива. Ми пам'ятаємо, що обробка даних форми відбувається в поточному сценарії. Значить, нам потрібно змінити його код, додавши відповідні перевірки. Відразу ж обмовимо і такі перевірки. Якщо введено і логін, і пароль, потрібно перевірити їхню відповідність зазначеним вимогам. Для перевірки логіну і пароля ми створимо функції користувача у файлі functions.php.

/** * functions.php * Файл з функціями користувача */ // Підключаємо файл з параметрами підключення до СУБД require_once("database.php"); // Перевірка імені користувача function checkLogin($str) ( // Ініціалізуємо змінну з можливим повідомленням про помилку $error = ""; // Якщо немає рядка з логіном, повертаємо повідомлення про помилку if(!$str) ( $error = " Ви не ввели ім'я користувача"; return $error; ) /** * Перевіряємо ім'я користувача за допомогою регулярних виразів бути символи "_", "-", "." */ $pattern = "/^[-_.az\d](4,16)$/i"; $result = preg_match($pattern, $str) ; // Якщо перевірка не пройшла, повертаємо повідомлення про помилку if(!$result) ( $error = "Неприпустимі символи в імені користувача або ім'я користувача занадто коротке (довге)"; return $error; ) // Якщо все нормально, повернемо значення true return true; ) // Перевірка пароля користувача function checkPassword($str) ( // Ініціалізуємо змінну з можливим повідомленням про помилку $error = ""; // Якщо відсутня е рядок з логіном, повертаємо повідомлення про помилку if(!$str) ( $error = "Ви не ввели пароль"; return $error; ) /** * Перевіряємо пароль користувача за допомогою регулярних виразів * Пароль повинен бути не коротшим за 6, не довшим за 16 символів * У ньому повинні бути символи латинського алфавіту, цифри, * у ньому можуть бути символи "_", "!", " (", ")" */ $pattern = "/^[_!)(.az\d](6,16)$/i"; $result = preg_match($pattern, $str); // Якщо перевірка не пройшла, повертаємо повідомлення про помилку if(!$result) ( $error = "Неприпустимі символи в паролі користувача або пароль занадто короткий (довгий)"; return $error; ) // Якщо все нормально, повернемо значення true return true; )

Тепер потрібно змінити файл registration.php, щоб задіяти оголошені нами функції. До сценарію ми додамо умову, яка перевіряє натискання кнопки реєстрації. Усередині цієї умови запускається перевірка логіну та паролів. У випадку, якщо якась із перевірок завершується невдачею, ми знову відображаємо форму і виводимо повідомлення про помилку. Якщо помилок немає, ми реєструємо користувача, форму реєстрації при цьому вже не відображаємо, повідомляємо користувача про успішну реєстрацію, і за допомогою функції header() переадресовуємо його до форми авторизації.

Ви успішно реєструвалися в системі. Зараз ви будете переадресовані до сторінки авторизації. Якщо цього не сталося, перейдіть на неї за прямим посиланням.

"; header("Refresh: 5; URL = login.php"); ) // Інакше повідомляємо користувачеві про помилку else ( $errors["full_error"] = $reg; ) ) )> ?> Реєстрація користувачів
" />
В імені користувача можуть бути лише символи латинського алфавіту, цифри, символи "_", "-", ".". Довжина імені користувача повинна бути не коротшою за 4 символи і не довшою за 16 символів
У паролі можна використовувати лише символи латинського алфавіту, цифри, символи "_", "!", "(", ")". Пароль повинен бути не коротшим за 6 символів і не довшим за 16 символів
Повторіть введений пароль

У скрипті ви мали помітити ще одну нову функцію — registration() . А ми її ще не оголошували. Давайте зробимо це.

// Функція реєстрації користувача function registration($login, $password) ( // Ініціалізуємо змінну з можливим повідомленням про помилку $error = ""; // Якщо немає рядка з логіном, повертаємо повідомлення про помилку if(!$login) ( $ error = "Не вказано логін"; // Пишемо рядок запиту $sql = "SELECT `id` FROM `users` WHERE `login`="" . $login . """; // Робимо запит до бази $query = mysql_query($sql) or die( ""); // Дивимося на кількість користувачів з таким логіном, якщо є хоч один, // повертаємо повідомлення про помилку if(mysql_num_rows($query) > 0) ( $error = "Користувач із зазначеним логіном вже зареєстрований"; return $ error; ) // Якщо такого користувача немає, реєструємо його // Пишемо рядок запиту $sql = "INSERT INTO `users` (`id`,`login`,`password`) VALUES (NULL, "" . $login ." ","". $password. "")"; // Робимо запит до бази $query = mysql_query($sql) or die("

Неможливо додати користувача: " . mysql_error() . ". Помилка сталася у рядку " . __LINE__ . "

"); // Не забуваємо відключитися від СУБД mysql_close(); // Повертаємо значення true, що повідомляє про успішну реєстрацію користувача return true; )

Якщо все нормально, ваш користувач буде зареєстровано. Можете потестувати форму. Спробуйте зареєструвати користувачів із однаковими логінами. Після успішної реєстрації користувач буде переадресований до форми авторизації. Раніше ми створили розмітку для відображення цієї форми. Оскільки в її атрибуті action не вказано жодного параметра, дані, надіслані формою, будуть оброблятися у цьому сценарії. Значить, нам потрібно написати код для обробки, і додати його в документ login.php.

Авторизація користувачів

;">

Якщо ви не зареєстровані у системі, зареєструйтесь.

Ви, мабуть, помітили, що у скрипті авторизації у нас з'явилася ще одна незнайома функція – authorization(). Ця функція повинна авторизувати користувача, попередньо перевіривши, чи існує в базі даних зареєстрований користувач із таким логіном та паролем. Якщо такого користувача не буде знайдено, авторизація буде перервана, на екран буде виведено повідомлення про невдачу. У разі успішної перевірки функція authorization() запустить сесію, і запише в неї значення логіну та пароля користувача, повідомить сценарій про успішність авторизації, і сценарій перенаправить користувача на захищену сторінку ресурсу.

/** * Функція авторизації користувача. * Авторизація користувачів у нас буде здійснюватися * за допомогою сесій PHP. */ function authorization($login, $password) ( // Ініціалізуємо змінну з можливим повідомленням про помилку $error = ""; // Якщо немає рядка з логіном, повертаємо повідомлення про помилку if(!$login) ( $error = " Не вказано логін"; return $error; ) elseif(!$password) ( $error = "Не вказано пароль"; return $error; ) // Перевіряємо, чи вже не зареєстрований користувач // Підключаємося до СУБД connect(); // Нам потрібно перевірити, чи є такий користувач серед зареєстрованих // Складаємо рядок запиту $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" AND `password`="".$password ."""; // Виконуємо запит $query = mysql_query($sql) or die("

Неможливо виконати запит: ". mysql_error().". Помилка сталася у рядку " . __LINE__ . "

"); // Якщо користувача з такими даними немає, повертаємо повідомлення про помилку if(mysql_num_rows($query) == 0) ( $error = "Користувач із зазначеними даними не зареєстрований"; return $error; ) // Якщо користувач існує , запускаємо сесію session_start(); // І записуємо в неї логін та пароль користувача // Для цього ми використовуємо суперглобальний масив $_SESSION $_SESSION["login"] = $login; $_SESSION["password"] = $password; / Не забуваємо закривати з'єднання з базою даних mysql_close(); // Повертаємо true для повідомлення про успішну авторизацію користувача return true;

Коли користувач потрапляє на захищену сторінку, перевірте коректність даних про його авторизацію. Для цього нам знадобиться ще одна функція користувача. Назвемо її checkAuth(). Її завданням буде звіряння даних авторизації користувача з тими, що зберігаються в нашій базі. Якщо дані не співпадуть, користувач буде перенаправлено на сторінку авторизації.

Function checkAuth($login, $password) ( // Якщо немає логіну або пароля, повертаємо false if(!$login || !$password) return false; // Чи перевіряємо зареєстрований такий користувач // Підключаємося до СУБД connect(); // Складаємо рядок запиту $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" AND `password`="".$password."""; // Виконуємо запит $ query = mysql_query($sql) or die("

Неможливо виконати запит: ". mysql_error().". Помилка сталася у рядку " . __LINE__ . "

"); // Якщо користувача з такими даними немає, повертаємо false; if(mysql_num_rows($query) == 0) ( return false; ) // Не забуваємо закривати з'єднання з базою даних mysql_close(); // Інакше повертаємо true return true; )

Тепер, коли користувач потрапив до захищеної сторінки, ми повинні викликати функцію перевірки даних авторизації. Сценарій виклику та перевірки ми помістимо в окремий файл checkAuth.php та підключатимемо його до тих сторінок, які будуть закритими для загального доступу.

/** * Скрипт перевірки авторизації користувачів */ // Запускаємо сесію, з якої будемо отримувати логін і пароль // авторизованих користувачів session_start(); // Підключаємо файл з функціями користувача require_once("functions.php"); /** * Щоб визначити чи авторизований користувач, нам потрібно * перевірити чи існують у базі даних записи для його логіна * та пароля. Для цього скористаємося функцією користувача * перевірки коректності даних авторизованого користувача. * Якщо ця функція поверне false, то авторизації немає. * За відсутності авторизації ми просто переадресовуємо користувача до сторінки авторизації. */ // Якщо в сесії присутні дані і про логіну, і про пароль, // перевіряємо їх if(isset($_SESSION["login"]) && $_SESSION["login"] && isset($_SESSION["password" ]) && $_SESSION["password"]) ( // Якщо перевірка існуючих даних завершується невдачею if(!checkAuth($_SESSION["login"], $_SESSION["password"])) ( // Переадресовуємо користувача на сторінку авторизації header("location: login.php"); // Припиняємо виконання скрипту exit; ) ) // Якщо даних або про логіну, або про пароль користувача немає, // вважаємо що авторизації немає, переадресовуємо користувача // на сторінку авторизації else ( header("location: login.php"); // Припиняємо виконання сценарію exit;

А тепер давайте створимо код нашої захищеної сторінки. Він буде досить простий.

Авторизація та реєстрація користувачів

Успішна авторизація.

Ви отримали доступ до захищеної сторінки. Ви можете вийти із системи.

Як бачите, у захищеному документі ми підключаємо лише один файл – checkAuth.php. Інші файли підключаються вже в інших сценаріях. Тому наш код не виглядає громіздким. Реєстрацію та авторизацію користувачів ми організували. Тепер необхідно дозволити користувачам виходити із системи. Для цього ми створимо сценарій у файлі logout.php.

/** * Скрипт виходу користувача із системи. Оскільки користувачі авторизуються через сесії, їх логін і пароль зберігаються в суперглобаному масиві $_SESSION. Щоб здійснити * вихід із системи, досить просто знищити значення * масиву $_SESSION["login"] і $_SESSION["password"], після чого ми переадресовуємо користувача до сторінки авторизації */ // Обов'язково запускаємо сесію session_start(); unset($_SESSION["login"]); unset($_SESSION["password"]); header("location: login.php");

Скрипт реєстрації, авторизації та перевірки користувачів готовий. Ви можете використовувати його у себе, доповнювати, змінювати під ваші потреби. Якщо у вас будуть питання, можете ставити їх у коментарях. Ви можете завантажити всі файли, про які тут йшлося, упаковані в один архів .

P.S. Я в курсі, що краще писати об'єктно-орієнтований код, знаю, що передавати та зберігати пароль у відкритому вигляді не варто, що інформацію, що заноситься до бази даних, необхідно попередньо перевіряти. Я знаю. Про це я тут не говоритиму.

Адаптивне з функціями форм входу та реєстрації, з можливістю динамічного перемикання, без перезавантаження сторінки. Після появи вікна користувач може легко перемикатися з однієї в іншу, і при необхідності, вибрати опцію зміни пароля.
Сьогодні ми розглянемо як все це можна реалізувати за допомогою зв'язування невеликого, але дуже функціонального плагіну jQuery та нових стандартів CSS3.

Цей метод буде корисним, якщо ви захочете зробити так, щоб форми входу та реєстрації були доступні для користувачів на кожній сторінці вашого сайту. При вході на сайт або реєстрації користувачі не будуть перенаправлені на іншу сторінку, і зможуть виконувати всі необхідні дії «не відходячи від каси», все на одній сторінці.

Оформлення зовнішнього вигляду форм, що спливають реалізовано за допомогою CSS3, загальна вага плагіна зовсім не великий, відгук і завантаження модального вікна, відбувається практично без затримок.
Стовідсотково адаптивний макет, висота та ширина модального вікна з формами, автоматично встановлюються відповідно до розмірів екранів пристроїв.

Приклад подивилися, тепер давайте, розберемо у деталях всі основні компоненти модального вікна та форм, для того щоб навчитися використовувати їх у себе на сайті.
Робота спливаючого вікна з формами входу та реєстрації, побудована на популярній бібліотеці JavaScript, виконуваному плагіні jQuey і сформованих стилях CSS. Всі ці інструменти потрібно підключити до вашого сайту. Остання актуальна версія бібліотеки jQuey можна підключити безпосередньо з Google, сам файл плагіна main.js і готовий набір сформованих стилів style.css знайдете в архіві.
Javascript прописуємо перед тегом, що закриває, стилі CSS можна скопіювати та додати до файлу стилів.css вашого сайту.

HTML Структура:

Базовий контейнер модальних вікон на затемненому фоні та вбудовані форми з елементами управління розміщуємо в тілі сторінки. Для більшого розуміння, розмежував сектори та додав коментарі. Всі елементи конструкції, міцно пов'язані з CSS через певні класи, так що змінити дизайн форм відповідно до загального дизайну ваших сайтів, не складе особливих труднощів.

< div class = "cd-user-modal" > < div class = "cd-user-modal-container" > < ul class = "cd-switcher" > < li>< a href= "#0" >Вхід < li>< a href= "#0" >Реєстрація < div id= "cd-login" > < form class = "cd-form" > < p class = "fieldset" > < label class = "image-replace cd-email" for = "signin-email" >E-mail < input class = id= "signin-email" type= "email" placeholder= "E-mail" > < span class = "cd-error-message" >Тут повідомлення про помилку! < p class = "fieldset" > < label class = "image-replace cd-password" for = "signin-password" >Пароль < input class = "full-width has-padding has-border" id= "signin-password" type= "text" placeholder= "(!LANG:Пароль" > !}< a href= "#0" class = "hide-password" >Приховати < span class = "cd-error-message" >Тут повідомлення про помилку! < p class = "fieldset" > < input type= "checkbox" id= "remember-me" checked> < label for = "remember-me" >Запам'ятати мене < p class = "fieldset" > < input class = "full-width" type= "submit" value= "Увійти" > < p class = "cd-form-bottom-message" >< a href= "#0" >Забули свій пароль? < div id= "cd-signup" > < form class = "cd-form" > < p class = "fieldset" > < label class = "image-replace cd-username" for = "signup-username" >Ім'я користувача < input class = "full-width has-padding has-border" id="signup-username" type="text" placeholder= "Ім'я користувача"> < span class = "cd-error-message" >Тут повідомлення про помилку! < p class = "fieldset" > < label class = "image-replace cd-email" for = "signup-email" >E-mail < input class = "full-width has-padding has-border" id= "signup-email" type= "email" placeholder= "(!LANG:E-mail" > !}< span class = "cd-error-message" >Тут повідомлення про помилку! < p class = "fieldset" > < label class = "image-replace cd-password" for = "signup-password" >Пароль < input class = "full-width has-padding has-border" id= "signup-password" type= "text" placeholder= "(!LANG:Пароль" > !}< a href= "#0" class = "hide-password" >Приховати < span class = "cd-error-message" >Тут повідомлення про помилку! < p class = "fieldset" > < input type= "checkbox" id= "accept-terms" > < label for = "accept-terms" >Я згоден з< a href= "#0" >умовами < p class = "fieldset" > < input class = "full-width has-padding" type= "submit" value= "Створити акаунт"> < div id= "cd-reset-password" > < p class = "cd-form-message" >Забули пароль? Будь ласка, введіть адресу електронної пошти. Ви отримаєте посилання, щоб створити новий пароль. < form class = "cd-form" > < p class = "fieldset" > < label class = "image-replace cd-email" for = "reset-email" >E-mail < input class = "full-width has-padding has-border" id= "reset-email" type= "email" placeholder= "(!LANG:E-mail" > !}< span class = "cd-error-message" >Тут повідомлення про помилку! < p class = "fieldset" > < input class = "full-width has-padding" type= "submit" value= "Відновити пароль"> < p class = "cd-form-bottom-message" >< a href= "#0" >Повернутись до входу < a href= "#0" class = "cd-close-form" >Закрити

  • Вхід
  • Реєстрація

Тут повідомлення про помилку!

Приховати Тут повідомлення про помилку!

Забули свій пароль?

Тут повідомлення про помилку!

Тут повідомлення про помилку!

Приховати Тут повідомлення про помилку!

Забули пароль? Будь ласка, введіть адресу електронної пошти. Ви отримаєте посилання, щоб створити новий пароль.

Тут повідомлення про помилку!

Повернутись до входу

Закрити



CSS Стилі:

Базовий шаблон та елементи управління форм автор виконав у популярному, плоскому стилі (Flat), з явним упором на мінімалізм. Нічого зайвого, у міру прозоре тло затемнення, легкі для сприйняття кольору, добре підібраний шрифт та іконки, для позначення полів введення. За допомогою властивостей CSS, ви легко зможете змінити будь-який елемент форм.

.cd-user-modal ( position : fixed ; top : 0 ; left : 0 ; width : 100% ; height : 100% ; background : rgba (52 , 54 , 66 , 0.9 ) ; z-index : 3 ; y : auto ; cursor : pointer ; visibility : hidden ; opacity : 0 ; s 0 , visibility 0 0.3s ; ) .cd-user-modal .is-visible ( visibility : visible ; opacity : 1 ; -webkit-transition: opacity 0.3s 0 , visibility 0 0 ; -moz-transition: opacity 0.3s 0 , visibility 0 0 ; transition : opacity 0.3s 0 , visibility 0 0 ; ) .cd-user-modal . transform: translateY(0 ) ; -ms-transform: translateY(0 ) ; -o-transform: translateY(0 ) ; transform : translateY(0 ) ; 90%; dth: 600px; background: #FFF; margin: 3em auto 4em; cursor: auto; border-radius : 0.25em; -webkit-transform: translateY(-30px ); -moz-transform: translateY(-30px ); -ms-transform: translateY(-30px ); -o-transform: translateY(-30px ); transform : translateY(-30px ); -webkit-transition-property: -webkit-transform; -moz-transition-property: -moz-transform; transition-property : transform; -webkit-transition-duration: 0.3s; -moz-transition-duration: 0.3s; transition-duration : 0.3s; ) .cd-user-modal-container .cd-switcher : after ( content : "" ; display : table ; clear : both ; ) .cd-user-modal-container .cd-switcher li ( width : 50% ; float : left ; text-align : center ; ) .cd-user-modal-container .cd-switcher li: first-child a (border-radius: .25em 0 0 0 ; ) -switcher li: last-child a ( border-radius : 0 .25em 0 0 ; ) .cd-user-modal-container .cd-switcher a ( display : block ; width : 100% ; height : 50px ; line-height : 50px ;background : #d2d8d8 ; color : #809191 ; ) .cd-user-modal-container .cd-switcher a.selected ( background : #FFF ; color : #505260 ; ) : 600px ) ( .cd-user-modal-container ( margin : 4em auto ; ) .cd-user-modal-container .cd-switcher a ( height : 70px ; line-height : 70px ; ) ) .cd-form ( padding: 1. 4em; ) .cd-form .fieldset ( position : relative ; margin : 1.4em 0 ; ) .cd-form .fieldset : first-child ( margin-top : 0 ; ) .cd-form .fieldset : last-child ( margin- bottom : 0 ; ) .cd-form label ( font-size : 14px ; font-size : 0.875rem ; ) .cd-form label.image-replace ( /* замінити текст із іконою */ display: inline-block; position: absolute; left: 15px; top: 50%; bottom: auto; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50% ); -ms-transform: translateY(-50%); -o-transform: translateY(-50%); transform : translateY(-50% ); height: 20px; width: 20px; overflow: hidden; text-indent: 100% ; white-space: nowrap; color: transparent; text-shadow: none; background-repeat: no-repeat; background-position: 50% 0 ; } /* Іконки полів введення */ .cd-form label .cd-username { background-image: url("../img/cd-icon-username.svg") ; } .cd-form label .cd-email { background-image: url("../img/cd-icon-email.svg") ; } .cd-form label .cd-password { background-image: url("../img/cd-icon-password.svg") ; } .cd-form input { margin: 0 ; padding: 0 ; border-radius: 0.25em; } .cd-form input .full-width { width: 100% ; } .cd-form input .has-padding { padding: 12px 20px 12px 50px; } .cd-form input .has-border { border: 1px solid #d2d8d8; -webkit-appearance : none; -moz-appearance : none; -ms-appearance : none; -o-appearance : none; appearance : none; } .cd-form input .has-border: focus { border-color: #343642 ; box-shadow: 0 0 5px rgba(52 , 54 , 66 , 0.1 ) ; outline: none; } .cd-form input .has-error { border: 1px solid #d76666; } .cd-form input [ type = password ] { /* простір для кнопки Сховати */ padding-right: 65px; } .cd-form input [ type = submit ] { padding: 16px 0 ; cursor: pointer; background: #2f889a; color: #FFF; font-weight: bold; border: none; -webkit-appearance : none; -moz-appearance : none; -ms-appearance : none; -o-appearance : none; appearance : none; } .no-touch .cd-form input [ type = submit ] : hover, .no-touch .cd-form input [ type = submit ] : focus { background: #3599ae; outline: none; } .cd-form .hide-password { display: inline-block; position: absolute; right: 0 ; top: 0 ; padding: 6px 15px; border-left: 1px solid #d2d8d8; top: 50% ; bottom: auto; -webkit-transform : translateY (-50% ) ; -moz-transform : translateY (-50% ) ; -ms-transform : translateY (-50% ) ; -o-transform : translateY (-50% ) ; transform: translateY (-50% ) ; font-size: 14px; font-size: 0.875rem; color: #343642 ; } .cd-form .cd-error-message { display: inline-block; position: absolute; left: -5px; bottom: -35px; background: rgba(215 , 102 , 102 , 0.9 ) ; padding: .8em; z-index: 2 ; color: #FFF; font-size: 13px; font-size: 0.8125rem; border-radius: 0.25em; /* запобігання клікам та дотику */ pointer-events: none; visibility: hidden; opacity: 0 ; -webkit-transition : opacity 0.2s 0 , visibility 0 0.2s; -moz-transition : opacity 0.2s 0 , visibility 0 0.2s; transition: opacity 0.2s 0 , visibility 0 0.2s; } .cd-form .cd-error-message:: after { /* куточок повідомлення про помилку */ content: "" ; position: absolute; left: 22px; bottom: 100% ; height: 0 ; width: 0 ; border-left: 8px solid transparent; border-right: 8px solid transparent; border-bottom: 8px solid rgba(215 , 102 , 102 , 0.9 ) ; } .cd-form .cd-error-message.is-visible { opacity: 1 ; visibility: visible; -webkit-transition : opacity 0.2s 0 , visibility 0 0 ; -moz-transition : opacity 0.2s 0 , visibility 0 0 ; transition: opacity 0.2s 0 , visibility 0 0 ; } @media only screen and (min-width: 600px) { .cd-form { padding: 2em; } .cd-form .fieldset { margin: 2em 0 ; } .cd-form .fieldset: first-child { margin-top: 0 ; } .cd-form .fieldset: last-child { margin-bottom: 0 ; } .cd-form input .has-padding { padding: 16px 20px 16px 50px; } .cd-form input [ type = submit ] { padding: 16px 0 ; } } .cd-form-message { padding: 1.4em 1.4em 0 ; font-size: 14px; font-size: 0.875rem; line-height: 1.4 ; text-align: center; } @media only screen and (min-width: 600px) { .cd-form-message { padding: 2em 2em 0 ; } } .cd-form-bottom-message { position: absolute; width: 100% ; left: 0 ; bottom: -30px; text-align: center; font-size: 14px; font-size: 0.875rem; } .cd-form-bottom-message a { color: #FFF; text-decoration: underline; } .cd-close-form { /* стиль X кнопки зверху праворуч */ display: block; position: absolute; width: 40px; height: 40px; right: 0 ; top: -40px; background: url("../img/cd-icon-close.svg") no-repeat center center; text-indent: 100% ; white-space: nowrap; overflow: hidden; } @media only screen and (min-width: 1170px) { .cd-close-form { display: none; } } #cd-login, #cd-signup, #cd-reset-password { display: none; } #cd-login.is-selected, #cd-signup.is-selected, #cd-reset-password.is-selected { display: block; }

Cd-user-modal ( position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(52, 54, 66, 0.9); z-index: 3; overflow-y : auto, cursor: pointer, visibility: hidden, opacity: 0; 0, visibility 0 0.3s; ) .cd-user-modal.is-visible ( visibility: visible; opacity: 1; -webkit-transition: opacity 0.3s 0, visibility 0 0; -moz-transition: opacity 0.3s 0 , visibility 0 0; transition: opacity 0.3s 0, visibility 0 0; ) .cd-user-modal.is-visible .cd-user-modal-container ( -webkit-transform: translateY(0); -moz-transform : translateY(0); -ms-transform: translateY(0); -o-transform: translateY(0); transform: translateY(0); ) cd-user-modal-container ( position: relative; %;max-width:600px;background:#FFF;margin:3em auto 4em;cursor:auto;border-radius:0.25em;-webkit-transform: translateY(-30px); translateY(-30px); -ms-transform: translateY(-30px); -o-transform: translateY(-30px); transform: translateY(-30px); -webkit-transition-property: -webkit-transform; -moz-transition-property: -moz-transform; transition-property: transform; -webkit-transition-duration: 0.3s; -moz-transition-duration: 0.3s; transition-duration: 0.3s; ) .cd-user-modal-container .cd-switcher:after ( content: ""; display: table; clear: both; ) .cd-user-modal-container .cd-switcher li ( width: 50%; float : left; text-align: center; . -switcher li:last-child a ( border-radius: 0 .25em 0 0; ) .cd-user-modal-container .cd-switcher a ( display: block; width: 100%; height: 50px; line-height : 50px; background: #d2d8d8; color: #809191; ) .cd-user-modal-container .cd-switcher a.selected ( background: #FFF; color: #505260; ) : 600px) ( .cd-user-modal-container ( margin: 4em auto; ) .cd-user-modal-container .cd-switcher a ( height: 70px; line-height: 70px; ) ) .cd-form ( padding: 1.4em; ) .cd-form .fieldset ( position: relative; margin: 1.4em 0; ) .cd-form .fieldset:first-child ( margin-top: 0; ) .cd-form .fieldset:last -child ( margin-bottom: 0; ) .cd-form label ( font-siz e: 14px; font-size: 0.875rem; ) .cd-form label.image-replace ( /* замінити текст з іконою */ display: inline-block; position: absolute; left: 15px; top: 50%; bottom: auto; -webkit-transform: translateY(- 50%);-moz-transform: translateY(-50%); -ms-transform: translateY(-50%); : 20px, width: 20px, overflow: hidden, text-indent: 100%; white-space: nowrap; color: transparent; text-shadow: none; background-repeat: no-repeat; ) /* Іконки полів введення */ .cd-form label.cd-username (background-image: url("). ./img/cd-icon-username.svg"); ) .cd-form label.cd-email ( background-image: url("../img/cd-icon-email.svg"); ) .cd -form label.cd-password ( background-image: url("../img/cd-icon-password.svg"); ) .cd-form input ( margin: 0; padding: 0; border-radius: 0.25 em;) .cd-form input.full-width (width: 100%; ) .cd-form input.has-padding ( padding: 12px 20px 12px 50px; ) solid #d2d8d8; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; -o-appearance: none; appearance: none; ) -color: #343642; box-shadow: 0 0 5px rgba(52, 54, 66, 0.1); outline: none; ). form input ( /* простір для кнопки Приховати */ padding-right: 65px; ) .cd-form input ( padding: 16px 0; cursor: pointer; background: #2f889a; color: #FFF; font-weight: bold; border : none;-webkit-appearance: none;-moz-appearance: none;-ms-appearance: none; -o-appearance: none; appearance: none; ) .no-touch .cd-form input:hover, .no-touch .cd-form input:focus ( background: #3599ae; outline: none; ) .cd-form .hide-password ( display: inline-block; position: absolute, right: 0; top: 0; padding: 6px 15px; border-left: 1px solid #d2d8d8; top: 50%; transform: translateY(-50%); -ms-transform: translateY(-50%); -o-transform: translateY(-50%); transform: translateY(-50%); size: 0.875rem; color: #343642; ) .cd-form .cd-error-message ( display: inline-block; 102, 0.9), padding: .8em; z-index: 2; color: #FFF; font-size: 13px; font-size: 0.8125rem; border-radius: 0.25em; -events: none; visibility: hidden; opacity: 0; -webkit-transition: opacity 0.2s 0, visibility 0 0.2s; visi bility 0 0.2s; ) .cd-form .cd-error-message::after ( /* куточок повідомлення про помилку */ content: ""; position: absolute; left: 22px; bottom: 100%; height: 0; width: 0; border -left: 8px solid transparent; border-right: 8px solid transparent; 1; visibility: visible; -webkit-transition: opacity 0.2s 0, visibility 0 0; -moz-transition: opacity 0. 2s 0, visibility 0 0; transition: opacity 0.2s 0, visibility 0 0; ) @media only screen and (min-width: 600px) ( .cd-form ( padding: 2em; ) .cd-form .fieldset ( margin: 2em 0; ) .cd-form .fieldset:first-child ( margin- top: 0; ) .cd-form .fieldset:last-child ( margin-bottom: 0; ). 0; ) ) .cd-form-message ( padding: 1.4em 1.4em 0; font-size: 14px; font-size: 0.875rem; line-height: 1.4; text-align: center; ) (min-width: 600px) ( .cd-form-message ( padding: 2em 2em 0; ) ) .cd-form-bottom-message ( position: absolute; width: 100%; left: 0; bottom: -30px; text-align: center; font-size: 14px; font-size: 0.875rem; ) .cd-form-bottom-message a (color: #FFF; text-decoration: underline; ) * стиль X кнопки вгорі праворуч */ display: block; position: absolute; width: 40px; height: 40px; right: 0; top: -40px; ") no-repeat center center; text-indent: 100 %; white-space: nowrap; overflow: hidden; ) @media only screen and (min-width: 1170px) ( .cd-close-form ( display: none; ) ) #cd-login, #cd-signup, #cd-reset-password ( display: none; ) # cd-login.is-selected, #cd-signup.is-selected, #cd-reset-password.is-selected ( display: block; )

В ефекті переходу появи додано затримку, щоб добитися плавного зникнення модального вікна при закритті.

Примітка. Розмір шрифту всіх полів введення встановлено за замовчуванням 16px. Це запобігає автоматичному масштабуванню, яке відбувається під час перегляду на мобільних пристроях.

Авторська, буржуїнська версія плагіну знаходиться. Там же ви зможете завантажити оригінал.
Російську версію, можете забрати з мого Яндекс.Диска, всі необхідні файли, дбайливо запаковані в один архів, перед цим не забудьте подивитися, повністю адаптований, живий приклад роботи цього чудового плагіна jQuery:

З повагою Андрій

У цьому уроці ми створимо стильну форму авторизації на сайті, ви можете її знайти у Futurico UI Pro, створеному Володимиром Кудіновим. Для створення форми ми будемо використовувати CSS3 та jQuery.

Крок 1 - HTML-розмітка

Почнемо із створення HTML-розмітки. Створимо форму з чотирма input-ами (ім'я користувача, пароль, чекбокс та кпонка "submit") прапорець ми обернемо в тег span, який ми будемо використовувати для стилізації цього прапорця. Потім обернемо форму та заголовок у тег DIV та призначимо йому клас "login-form".