form label focusIn/focusOut

by Faisal Khan Janjua

HTML

<div class="atForm">
  <form>
    <div class="mainForm col-xs-12 col-sm-6">
      <label>Your Name</label>
      <input type="text" value="this is val" />
    </div>

    <div class="mainForm col-xs-12 col-sm-6">
      <label>Email Address</label>
      <input type="email" value="this is val" />
    </div>

    <div class="mainForm col-xs-12 col-sm-4">
      <label>Phone</label>
      <input type="text" value="this is val" />
    </div>

    <div class="mainForm col-xs-12 col-sm-8">
      <label>Subject</label>
      <input type="text" />
    </div>

    <div class="mainForm col-xs-12">
      <label>Your Message</label>
      <textarea>value="this is val"</textarea>
    </div>
    <div class="mainForm col-xs-12">
      <label>Your Message</label>
      <select>
        <option value="">this is null</option>
        <option value="12">this is null</option>
      </select>
    </div>
    <div class="mainForm col-xs-12">
      <button type="submit" class="btn formBtnSend">Send Message</button>
      <p>We'll do our best to get back to you within 6-8 working hours.</p>
    </div>

  </form>
</div>

SCSS

$primary: #1ABC9C;
$secondary: #333;
$white: #FFF;
$dullWhite: #F0F0F0;

@mixin transition($trnsTime:300ms) {
  -o-transition: all ease-in-out $trnsTime;
  -ms-transition: all ease-in-out $trnsTime;
  -moz-transition: all ease-in-out $trnsTime;
  -webkit-transition: all ease-in-out $trnsTime;
  transition: all ease-in-out $trnsTime;
}

.atForm {
  & .mainForm {
    position: relative;
    margin-bottom: 20px;
  }

  & label {
    top: 0;
    left: 0;
    z-index: 4;
    color: #666;
    margin-top: 10px;
    margin-left: 26px;
    font-size: 20px;
    font-weight: 300;
    position: absolute;
    @include transition(150ms);
    font-family: 'Lato', sans-serif;

    &.still {
      font-size: 13px;
      margin-top: -8px;
      font-weight: 400;
      margin-left: 14px;
      color: $secondary;
      @include transition(200ms);
    }

    &.focused {
      color: $primary;
    }
  }

  & input,
  & textarea {
    z-index: 6;
    width: 100%;
    border: none;
    color: #666;
    display: block;
    font-size: 24px;
    font-weight: 400;
    background: none;
    border-radius: 0;
    position: relative;
    letter-spacing: 1px;
    padding: 8px 10px 4px 10px;
    @include transition(150ms);
    border-bottom: 1px solid #DDD;
    font-family: 'Lato', sans-serif;

    &:focus {
      outline: none;
      border-bottom: 1px solid $primary;
    }
  }

  & textarea {
    min-width: 100%;
    max-width: 100%;
    max-height: 220px;
    min-height: 90px;
  }

  & .formBtnSend,
  & .formBtnSend:focus {
    outline: none;
    display: block;
    font-weight: 500;
    margin: 10px auto;
    margin-top: 36px;
    padding: 8px 26px 6px;
    color: $secondary;
    background: $white;
    border-radius: 20px;
    text-transform: uppercase;
    font-family: 'Raleway', sans-serif;
    border: 2px solid $secondary;
    @include transition(200ms);

    &:hover {
      color: $dullWhite;
      background: $secondary;
    }

    &+p {
      margin: 0;
      font-size: 12px;
     ...

JavaScript

$(document).ready(function() {
  function formFields() {
    $('.atForm .mainForm').each(function() {
      if ($(this).find('input, textarea').length > 0) {
        if ($(this).find('input, textarea').val().length > 0) {
          $(this).find('label').addClass('still');
        }
      }
      if ($(this).find('select').length > 0) {
        $(this).find('label').addClass('still');
      }
    });
    $(".atForm .mainForm").focusin(function() {
      $(this).find('label').addClass('focused still');
      $(this).focusout(function() {
        $(this).find('label').removeClass('focused');
        if ($(this).find('input, textarea').val().length < 1) {
          $(this).find('label').removeClass('still');
        }
      });
    });
  }
  formFields();
});