3 864 Codepen

Форма авторизации и регистрации

Совмещенная форма авторизации и регистрации в одном интерфейсе. Переключение сделано посредством табов с анимацией на CSS.
Само переключение табов сделан на JS, также в скрипте добавлена проверка валидации для форм.

HTML

<!-- 
Project: Validation form;
author: Peresunko Serhii;
ver: 1.0;
Tech: HMTL5,CSS3(SCSS), Pure jаvascript, font-awesome.css, animete.css;
-->

<div class="wrapper">
  <div class="enter animated fadeInDown">
  <a href="#">Enter</a>    
  </div>
  <div class="container_form">
    <ul class="info">
      <li class="active_link"><a href="#">Log In</a></li>
      <li><a href="#">Sign Up</a></li>
      <div class="close"><a href="#"><i class="fa fa-close"></i></a></div>
    </ul>
    <form action="" id="myForm">
      <div class="inputBox">
        <input type="text" class="username" placeholder="Username">
      </div>
      <div class="inputBox passBox">
        <input type="password" class="password" placeholder="Password (A-Z,a-z,0-9)">
      </div>
      <div class="inputBox emailBox">
        <input type="email" class="email"  placeholder="E-mail (@)">
      </div>
      <div class="inputBox">
        <input type="submit" value="Enter" class="sendBut">
      </div>
    </form>
  </div>
</div>

CSS

Дополнительные библиотеки:
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet" type="text/css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.css" rel="stylesheet" type="text/css">

@import url("https://fonts.googleapis.com/css?family=Roboto+Condensed");
html, body {
  display: flex;
  height: 100%;
  width: 100%;
  justify-content: center;
  align-items: center;
  font-family: 'Roboto Condensed', sans-serif;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.95) 50%), url("https://images.pexels.com/photos/889084/pexels-photo-889084.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940") no-repeat center center;
  background-size: auto;
}

.wrapper {
  position: relative;
  display: flex;
  align-items: center;
  width: 575px;
  height: 425px;
  border-radius: 3px;
  background: linear-gradient(45deg, rgba(69, 104, 220, 0.6) 0%, rgba(176, 106, 179, 0.9) 100%), url("https://images.pexels.com/photos/889084/pexels-photo-889084.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940") no-repeat center center;
  background-size: cover;
  overflow: hidden;
  -webkit-box-shadow: 0px 53px 37px -39px rgba(0, 0, 0, 0.7);
  -moz-box-shadow: 0px 53px 37px -39px rgba(0, 0, 0, 0.7);
  box-shadow: 0px 53px 37px -39px rgba(0, 0, 0, 0.7);
}
.wrapper .enter {
  position: absolute;
  left: 43%;
  transition: left .3s;
}
.wrapper .enter a {
  color: #ffffff;
  font-size: 18px;
  font-weight: 900;
  text-decoration: none;
  text-transform: uppercase;
  letter-spacing: 10px;
  transition: letter-spacing .3s;
}
.wrapper .enter:hover {
  left: 44.9%;
  transition: left .3s;
}
.wrapper .enter:hover a:hover {
  letter-spacing: 4px;
  transition: letter-spacing .3s;
}
.wrapper .active_enter {
  color: #ffffff;
  background: #ffffff;
  height: 4px;
  left: 0 !important;
  overflow: hidden;
  letter-spacing: 10px;
  transition: left .3s, height .3s ,letter-spacing .3s, background .3s;
}
.wrapper .active_enter a {
  color: #ffffff;
  letter-spacing: 4px;
  transition: color .3s, letter-spacing .3s;
}
.wrapper .container_form {
  position: absolute;
  right: 0;
  background: #ffffff;
  background-size: auto;
  padding: 25px 0 25px 0;
  width: 0px;
  height: 425px !important;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  box-sizing: border-box;
  overflow: hidden;
  transition: width .3s, padding .3s;
}
.wrapper .container_form .close {
  position: relative;
  left: 95px;
}
.wrapper .container_form .close a {
  color: #292929;
}
.wrapper .container_form .info {
  display: flex;
  padding: 0;
  list-style-type: none;
}
.wrapper .container_form .info li {
  color: #252525;
  font-size: 18px;
  margin-right: 15px;
  padding-bottom: 10px;
  transition: border-bottom .1s;
  border-bottom: 0 solid #4568dc;
}
.wrapper .container_form .info li a {
  color: #252525;
  text-decoration: none;
  transition: color .3s;
}
.wrapper .container_form .info li a:hover {
  color: #252525;
  transition: color .3s;
}
.wrapper .container_form .info li:hover {
  padding-bottom: 10px;
  border-bottom: 4px solid #4568dc;
  transition: border-bottom .1s;
}
.wrapper .container_form .info li:hover a {
  color: #4568dc;
}
.wrapper .container_form .info .active_link {
  padding-bottom: 10px;
  border-bottom: 4px solid #b06ab3;
}
.wrapper .container_form .info .active_link a {
  color: #b06ab3;
}
.wrapper .container_form #myForm .inputBox {
  position: relative;
  margin: 20px 0 20px 0;
  display: flex;
  border: 1px solid #f1f1f1;
  overflow: hidden;
  background: rgba(255, 255, 255, 0.1);
}
.wrapper .container_form #myForm .inputBox input {
  color: #252525;
  padding: 7px 7px 7px 10px;
  width: 195px;
  font-size: 14px;
  border-radius: 2px;
  border: 0;
  box-sizing: border-box;
  background: rgba(255, 255, 255, 0);
}
.wrapper .container_form #myForm .inputBox input::-webkit-input-placeholder {
  /* Chrome/Opera/Safari */
  color: silver !important;
  font-size: 12px;
}
.wrapper .container_form #myForm .inputBox input::-moz-placeholder {
  /* Firefox 19+ */
  color: silver !important;
  font-size: 12px;
}
.wrapper .container_form #myForm .inputBox input:-ms-input-placeholder {
  /* IE 10+ */
  color: silver !important;
  font-size: 12px;
}
.wrapper .container_form #myForm .inputBox input:-moz-placeholder {
  /* Firefox 18- */
  color: silver !important;
  font-size: 12px;
}
.wrapper .container_form #myForm .inputBox input[type="submit"] {
  color: #ffffff;
  letter-spacing: 2px;
  padding-top: 8px;
  font-size: 12px !important;
  text-transform: uppercase;
}
.wrapper .container_form #myForm .inputBox .sendBut {
  height: 30px !important;
  background: linear-gradient(15deg, #4568dc, #b06ab3);
  width: 255px;
  transition: background .3s;
}
.wrapper .container_form #myForm .inputBox .sendBut:hover {
  background: linear-gradient(115deg, #4568dc, #b06ab3);
  transition: background .3s;
}
.wrapper .container_form #myForm .inputBox i {
  position: relative;
  width: 30px;
  top: 7px;
  left: 16px;
}
.wrapper .container_form #myForm .inputBox i.fa-check {
  color: #4568dc;
}
.wrapper .container_form #myForm .inputBox i.fa-exclamation {
  color: #b06ab3;
  left: 20px;
}
.wrapper .container_form #myForm .passBox {
  margin: 0 !important;
}
.wrapper .container_form #myForm .emailBox {
  height: 0;
  margin: 0;
  border: 0px solid #f1f1f1;
  transition: height .3s, border .3s, margin .3s;
}
.wrapper .container_form #myForm .active_emailBox {
  height: 30px;
  border: 1px solid #f1f1f1;
  margin: 20px 0 20px 0;
  transition: height .3s, margin .3s;
}
.wrapper .active_container {
  width: 50%;
  padding: 25px;
  transition: width .3s, padding .3s;
}

JS

class EnterPage {
  constructor(name){
    this.name = name;
  }
  openForm(){
    var enterBut = document.querySelector('.enter');
    var closeBut = document.querySelector(".close");
    enterBut.addEventListener('click', function(e){
      e.preventDefault();
      var form = document.querySelector(".container_form");
      if(!(form.classList=="active_container")){
        form.classList.toggle("active_container");
        this.classList.toggle("active_enter");
      }
    });
    closeBut.addEventListener('click', function(e){
      e.preventDefault();
      var form = document.querySelector(".container_form");
      if(!(form.classList=="active_container")){
        form.classList.toggle("active_container");
        enterBut.classList.toggle("active_enter");
      }
    });
  }
  formValid(){
    //     errors message
    function _check(field) {
        var el = document.createElement("i");
        var fa = el.classList.add("fa");
        var icon = el.classList.add("fa-check");
        var animation = el.classList.add("animated");
        var anim_type = el.classList.add("fadeInDown");
        var parent = field.parentNode;
        if (!(parent.childNodes[3])){
          parent.appendChild(el);
        } else {
         parent.childNodes[3].remove();
          _check(field);
        }
     }
    function _error(field) {
        var el = document.createElement("i");
        var fa = el.classList.add("fa");
        var icon = el.classList.add("fa-exclamation");
        var animation = el.classList.add("animated");
        var anim_type = el.classList.add("fadeInUp");
        var parent = field.parentNode;
        if (!(parent.childNodes[3])){
          parent.appendChild(el);
        } else {
         parent.childNodes[3].remove();
         field.value="";
          _error(field);
        }
     }
    //     data validation  
    function _userValid(){
      var username = document.querySelector(".username");
      if (username.value.match(/[a-z]/i)){
        _check(username);
      }
      else {
        _error(username);
        return false;
      }
    }
    function _passValid(){
      var password = document.querySelector(".password");
      if (password.value.match(/[A-Z,a-z,0-9]/) && password.value.length > 8){
        _check(password);
      }
      else {
        _error(password);
        return false;
      }
    }
    function _emailValid(){
      var email = document.querySelector(".email");
      if (email.value.match(/[a-z]+@+[a-z]+.+[a-z]/i)){
        _check(email);
      }
      else {
        _error(email);
        return false;
      }
    }
    // registration
    function _registration(){
      var menu = document.querySelector(".info");
      var li = menu.querySelectorAll("li");
      for (var i = 0 ; i< li.length; i++){
        li[i].addEventListener("click", function(){
          var emailBox = document.querySelector(".emailBox");
            if(!(li[1].classList.contains("active_link"))){
              li[1].classList.add("active_link");
              emailBox.classList.add("active_emailBox");
              li[0].classList.remove("active_link");
            } else {
              li[1].classList.remove("active_link");
              emailBox.classList.remove("active_emailBox");
              li[0].classList.add("active_link");
            }
        })
      }
    }
    _registration();
    
    var sendBut = document.querySelector('.sendBut');
    sendBut.addEventListener("click", function(e){
      e.preventDefault();
      _userValid();
      _passValid();
      _emailValid();
      if(_userValid()!=false && _passValid()!=false && _emailValid()!=false){
        
      } else {
        console.log("Please fix you mistake");
      }
    });
  }
}


var enterPage = new EnterPage();
enterPage.openForm();
enterPage.formValid();

Комментарии

  • Facebook
  • Вконтакте

Похожие статьи