<html>
<head>
    <title>Alien</title>
    <link rel=stylesheet href="style.css"/>
</head>

<body>
    <div class="ufo">
        <div class="monster" style="color: #7cb342">
          <div class="body">
            <div class="ear"></div>
            <div class="ear"></div>
            <div class="vampi-mouth">
              <div class="vampi-tooth"></div>
            </div>
          </div>
          <div class="eye-lid">
            <div class="eyes">
              <div class="eye"></div>
            </div>
          </div>
        </div>
      </div>
    <script src="jquery-3.1.1.min.js"></script> 
    <script src="script.js"></script>   
</body>
</html>
body {
    background: #667db6; 
    background: linear-gradient(to right, #667db6, #0082c8, #0082c8, #667db6); 
    overflow: hidden;
  }
  .ufo {
    font-size: 25vmin;
    position:absolute;
    width: 100%;
    height:100%;
    cursor: pointer;
  }
  
  .monster {
    font-size: 0.7em;
    margin: 0 auto;
    width: 1em;
    height: 1.3em;
    border-radius: 0.5em 0.5em 0em 0em / 0.6em 0.6em 0em 0em;
    box-sizing: content-box;
    border: 0.07em solid transparent;
    position: relative;
    top: 2em;
    user-select: none;
    cursor: grab;
  }
  
  .monster.small {
    font-size: 4rem;
  }
  
  .body {
    width: 100%;
    height: 100%;
    background-color: currentColor;
    border-radius: inherit;
    position: relative;
    transform-origin: bottom center;
    animation: bouncebody alternate infinite 400ms 40ms ease-in-out;
  }
  .eyes, .eye-lid {
    text-align: center;
    display: flex;
    font-size: 0.65em;
    width: 1em;
    height: 1em;
    position: absolute;
    left: 0.25em;
    top: 0.3em;
  }
  
  .eye {
    position: relative;
    display: inline-block;
    border-radius: 50%;
    width: 75%;
    height: 75%;
    background-color: black;
    border-radius: 50%;
    transform-origin: 20px 23px;
  }
  .eye-lid{
    background-color: white;
    border-radius: 0.5em 0.5em 0.5em 0.5em / 0.6em 0.6em 0.4em 0.4em;
    box-shadow: 0.03em 0.14em rgba(0,0,0,0.1);
    animation-name: blink;
    animation-duration: 20s;
    animation-iteration-count: infinite;
  }
  
  .eye:after { /*pupil*/
    --pupil-size: 0.2em;
    position: absolute;
    top: 0.05em;
    left: 0.3em;
    width: var(--pupil-size);
    height: var(--pupil-size);
    background: white;
    border-radius: 50%;
    content: " ";
  }
  
  .mouth {
    font-size: 0.2em;
    width: 1em;
    height: 0.3em;
    background: black;
    border-radius: 1.5em 1.5em 0.5em 0.5em;
    position: absolute;
    bottom: 0.8em;
    left: 50%;
    transform: translateX(-50%);
  }
  
  .mouth::before {
    width: 50%;
    height: 30%;
    display: block;
    content: ' ';
    background-color: #ff8800;
    border-radius: 50% / 100% 100% 50% 50%;
    position:absolute;
    top: 50%;
    left: 50%;
    transform: translateY(-10%) translateX(-50%);
  }
  
  .vampi-mouth {
    position: absolute;
    background: black;
    overflow: hidden;
    font-size: 0.3em;
    width: 1em;
    height: 0.7em;
    left: 50%;
    bottom: 0.3em;
    transform: translateX(-50%);
    border-radius: 0.7em 0.7em 1.2em 1.2em;
  }
  
  .vampi-mouth::before {
    content: '';
    display: block;
    background: #ff8800;
    width: 100%;
    height: 0.2em;
    position: absolute;
    bottom: 0;
    border-radius: 50% 50% 0 0;
  }
  
  .vampi-tooth::before,
  .vampi-tooth::after,
  .vampi-tooth {
    --teeth-size: 0.25em;
    display: block;
    width: 0;
    height: 0;
    font-size: inherit;
    border-left: calc(var(--teeth-size) / 2) solid transparent;
    border-right: calc(var(--teeth-size) / 2) solid transparent;
    border-top: var(--teeth-size) solid #fff;
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
  }
  
  .vampi-tooth:before {
    content: '';
    transform: translateX(-150%) translateY(-100%);
  }
  
  .vampi-tooth:after {
    content: '';
    transform: translateX(50%) translateY(-100%);
  }
  
  .ear {
    position: absolute;
    top: -1.2em;
    transform-origin: bottom center;
    font-size: 0.3em;
    width: .8em;
    height: 1.5em;
    left: 18%;
    transform: rotate(-10deg);
    animation: antena_e 5s infinite;
  }
  
  .ear + .ear {
    left: auto;
    right: 18%;
    transform: rotate(10deg);
    animation: antena_d 5s infinite;
  }
  
  .ear:before {
    content: '';
    display: block;
    width: .8em;
    height: .8em;
    position: absolute;
    z-index: 2;
    left: 0;
    border-radius: 50%;
    background: currentColor;
    box-shadow: inset -.1em -.08em rgba(0,0,0,.1);
  }
  
  .ear:after {
    content: '';
    display: block;
    width: 0.3em;
    height: 100%;
    position: absolute;
    top: .2em;
    left: .3em;
    background: currentColor;
  }
  
  @keyframes blink {
    0%, 2%, 34%, 36%, 60%, 62%, 79%, 81%, 100% { transform: scaleX(1) scaleY(1); } 
    1%, 35%, 61%, 80% { transform: scaleX(1.3) scaleY(0.1); } 
  }
  
  @keyframes bounce { 
    to { transform: translateY(4%); } 
  }
  
  @keyframes bouncebody { 
    to { transform: scaleX(1.03) scaleY(0.97); } 
  }
  
  @keyframes antena_d { 50% {transform: rotate(20deg);} }
  @keyframes antena_e { 50% {transform: rotate(-20deg);} }

$(document).on('mousemove', function(e){
        var eye_x = $('.eye').offset().left - $('.eye').width()/2;
        var eye_y = $('.eye').offset().top - $('.eye').height()/2;
    
        var theta = (Math.atan2((e.pageY - eye_y),(e.pageX - eye_x)) *(180/Math.PI))+85;
        var mousex_constrained = constrain(e.pageX); 
        var mousey_constrained = constrain(e.pageY); 
        var transformString = "rotateZ("+theta+"deg)" + " translateX("+mousex_constrained+"px)" + " translateY("+mousey_constrained+"px)";
        
        $('.eye').css("transform", transformString);

        console.log(transformString);
     });

     function constrain (n) {
         return -n/150;
     }

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