<div class="container">
  <div class="form-header">
    <h1>Material Design Form</h1>
    <h2>By Alexey Smelyanets</h2>
  </div>
  <form>
    <h3>Login</h3>
    <div class="form-group">
      <input class="" type="email" name="email">
      <label for="email">Email</label>
      <div class="error">Email is incorrect.</div>
      <span class="bar"></span>
    </div>
    <div class="form-group">
      <input class="" type="password" name="password" />
      <label for="password">Password</label>
      <div class="visible"></div>
      <span class="bar"></span>
    </div>
    <div class="form-submit">
      <button type="submit">Submit</button>
    </div>
  </form>
</div>
@import url(https://fonts.googleapis.com/css?family=Roboto);
html,
body {
  font-family: 'Roboto', sans-serif;
  margin: 0;
  padding: 0;
  background: #eee;
}

* {
  font-family: 'Roboto', sans-serif;
  font-size: 100%;
  font-weight: normal;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  border: none;
  box-shadow: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}

h1,
h2,
h3 {
  margin: 0;
  padding: 0;
}

.container {
  max-width: 400px;
  height: 500px;
  margin: 0 auto;
}

.form-header {
  margin: 32px 0;
  padding: 0 16px;
  text-align: center;
}

h1 {
  font-size: 32px;
  color: rgba(0, 0, 0, .87);
}

h2 {
  font-size: 18px;
  color: rgba(0, 0, 0, .54);
}

h3 {
  font-size: 18px;
  line-height: 64px;
  width: 100%;
  height: 64px;
  padding: 0 16px;
  color: #fff;
  background: #1976d2;
  -webkit-border-top-left-radius: 2px;
  -webkit-border-top-right-radius: 2px;
  -moz-border-top-left-radius: 2px;
  -moz-border-top-right-radius: 2px;
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
}

form {
  position: relative;
  width: 100%;
  height: auto;
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
  background: #fff;
  -webkit-box-shadow: 0 1px 2.5px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
  -moz-box-shadow: 0 1px 2.5px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
  box-shadow: 0 1px 2.5px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
}

.form-group {
  position: relative;
  max-width: 100%;
  height: 72px;
  margin: 0 16px;
}

input {
  font-size: 16px;
  font-size: 16px;
  position: absolute;
  bottom: 0;
  left: 0;
  display: block;
  width: 100%;
  padding: 8px 0 16px;
  color: rgba(0, 0, 0, .87);
  background: transparent;
}

input[type='text'],
input[type='password'] {
  padding: 8px 24px 16px 0;
}

input:focus {
  outline: none;
}

label {
  font-size: 16px;
  position: absolute;
  top: 21px;
  left: 0;
  display: block;
  width: 100%;
  padding: 16px 0 8px;
  -webkit-transition: all .45s;
  -moz-transition: all .45s;
  -ms-transition: all .45s;
  -o-transition: all .45s;
  transition: all .45s;
  pointer-events: none;
  color: rgba(0, 0, 0, .54);
}

input:focus + label {
  font-size: 12px;
  top: 0;
  left: 0;
  color: #2196f3;
}

input:focus + label::after,
input.fixed + label::after {
  content: ':';
}

input.fixed + label {
  font-size: 12px;
  top: 0;
  left: 0;
  color: rgba(0, 0, 0, .54);
}

input:focus.fixed + label {
  color: #2196f3;
}

input ~ .bar {
  position: absolute;
  bottom: 0;
  width: 100%;
  height: 1px;
  margin-bottom: 7px;
  background: rgba(0, 0, 0, .12);
}

input ~ .bar::before,
input ~ .bar::after {
  position: absolute;
  bottom: 0;
  width: 0;
  height: 2px;
  content: '';
  -webkit-transition: all .45s;
  -moz-transition: all .45s;
  -ms-transition: all .45s;
  -o-transition: all .45s;
  transition: all .45s;
  background: #2196f3;
}

input ~ .bar::before {
  left: 50%;
}

input ~ .bar::after {
  right: 50%;
}

input:focus ~ .bar::before,
input:focus ~ .bar::after {
  width: 50%;
}

input:invalid ~ .error {
  display: block;
}

input:invalid ~ .bar,
input:invalid ~ .bar::before,
input:invalid ~ .bar::after {
  background: #f44336;
}

input:valid ~ .error {
  display: none;
}

input ~ .error {
  font-size: 12px;
  line-height: 24px;
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  width: 100%;
  height: 24px;
  margin-bottom: -18px;
  padding: 0;
  pointer-events: none;
  color: #f44336;
  background: transparent;
}

input ~ .error::after {
  position: absolute;
  right: 0;
  width: 24px;
  height: 24px;
  content: '';
  background: transparent url(http://5.firepic.org/5/images/2016-01/19/1e8aj91282u1.png) no-repeat local center;
}

input ~ .visible {
  position: absolute;
  right: 0;
  bottom: 0;
  width: 24px;
  height: 24px;
  margin-bottom: 14px;
  cursor: pointer;
  background: transparent url(http://5.firepic.org/5/images/2016-01/19/ex2xjvosoxrm.png) no-repeat local center;
}

input ~ .visible:active {
  background: transparent url(http://5.firepic.org/5/images/2016-01/19/mgz13k7aprvk.png) no-repeat local center;
}

.form-submit {
  width: 100%;
  height: auto;
  padding: 16px;
}

button {
  font-size: 16px;
  position: relative;
  overflow: hidden;
  width: 100%;
  height: 36px;
  padding: 0;
  cursor: pointer;
  text-transform: uppercase;
  color: #fff;
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
  background: #1976d2;
}

button:hover {
  background: #2196f3;
  -webkit-box-shadow: 0 1px 2.5px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
  -moz-box-shadow: 0 1px 2.5px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
  box-shadow: 0 1px 2.5px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
}

.ripple {
  position: absolute;
  display: block;
  -webkit-transform: scale(0);
  -moz-transform: scale(0);
  -o-transform: scale(0);
  transform: scale(0);
  -webkit-border-radius: 50%;
  -moz-border-radius: 50%;
  border-radius: 50%;
  background: rgba(255, 255, 255, .3);
}

.animate {
  -webkit-animation: ripple .65s linear;
  -moz-animation: ripple .65s linear;
  -ms-animation: ripple .65s linear;
  -o-animation: ripple .65s linear;
  animation: ripple .65s linear;
}

@-webkit-keyframes ripple {
  100% {
    -webkit-transform: scale(2.5);
    opacity: 0;
  }
}

@-moz-keyframes ripple {
  100% {
    -moz-transform: scale(2.5);
    opacity: 0;
  }
}

@-o-keyframes ripple {
  100% {
    -o-transform: scale(2.5);
    opacity: 0;
  }
}

@keyframes ripple {
  100% {
    transform: scale(2.5);
    opacity: 0;
  }
}
$(document).ready(function() {
  var $input = $('input[type="email"],input[type="password"]');
  $input.val('');
  $input.change(function() {
    var $this = $(this);
    if ($this.val().length > 0) {
      $this.addClass('fixed');
    } else {
      $this.removeClass('fixed');
    }
  });

  var $pass = $('input[name="password"]');
  $('.visible').mousedown(function() {
    $pass.attr('type', 'text');
  });
  $('.visible').mouseup(function() {
    $pass.attr('type', 'password');
  });

  var ink, d, x, y;
  $('button').click(function(e) {
    if ($(this).find('.ripple').length === 0) {
      $(this).prepend("<span class='ripple'></span");
    }
    ripple = $(this).find('.ripple');
    ripple.removeClass('animate');
    if (!ripple.height() && !ripple.width()) {
      d = Math.max($(this).outerWidth(), $(this).outerHeight());
      ripple.css({
        height: d,
        width: d
      });
    }
    x = e.pageX - $(this).offset().left - ripple.width() / 2;
    y = e.pageY - $(this).offset().top - ripple.height() / 2;
    ripple.css({
      top: y + 'px',
      left: x + 'px'
    }).addClass('animate');
  });
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js