Slithering highlight in login form
A Pen by Mikael Ainalem on CodePen.
<div class="page"> | |
<div class="container"> | |
<div class="left"> | |
<div class="login">Login</div> | |
<div class="eula">By logging in you agree to the ridiculously long terms that you didn't bother to read</div> | |
</div> | |
<div class="right"> | |
<svg viewBox="0 0 320 300"> | |
<defs> | |
<linearGradient | |
inkscape:collect="always" | |
id="linearGradient" | |
x1="13" | |
y1="193.49992" | |
x2="307" | |
y2="193.49992" | |
gradientUnits="userSpaceOnUse"> | |
<stop | |
style="stop-color:#ff00ff;" | |
offset="0" | |
id="stop876" /> | |
<stop | |
style="stop-color:#ff0000;" | |
offset="1" | |
id="stop878" /> | |
</linearGradient> | |
</defs> | |
<path d="m 40,120.00016 239.99984,-3.2e-4 c 0,0 24.99263,0.79932 25.00016,35.00016 0.008,34.20084 -25.00016,35 -25.00016,35 h -239.99984 c 0,-0.0205 -25,4.01348 -25,38.5 0,34.48652 25,38.5 25,38.5 h 215 c 0,0 20,-0.99604 20,-25 0,-24.00396 -20,-25 -20,-25 h -190 c 0,0 -20,1.71033 -20,25 0,24.00396 20,25 20,25 h 168.57143" /> | |
</svg> | |
<div class="form"> | |
<label for="email">Email</label> | |
<input type="email" id="email"> | |
<label for="password">Password</label> | |
<input type="password" id="password"> | |
<input type="submit" id="submit" value="Submit"> | |
</div> | |
</div> | |
</div> | |
</div> |
var current = null; | |
document.querySelector('#email').addEventListener('focus', function(e) { | |
if (current) current.pause(); | |
current = anime({ | |
targets: 'path', | |
strokeDashoffset: { | |
value: 0, | |
duration: 700, | |
easing: 'easeOutQuart' | |
}, | |
strokeDasharray: { | |
value: '240 1386', | |
duration: 700, | |
easing: 'easeOutQuart' | |
} | |
}); | |
}); | |
document.querySelector('#password').addEventListener('focus', function(e) { | |
if (current) current.pause(); | |
current = anime({ | |
targets: 'path', | |
strokeDashoffset: { | |
value: -336, | |
duration: 700, | |
easing: 'easeOutQuart' | |
}, | |
strokeDasharray: { | |
value: '240 1386', | |
duration: 700, | |
easing: 'easeOutQuart' | |
} | |
}); | |
}); | |
document.querySelector('#submit').addEventListener('focus', function(e) { | |
if (current) current.pause(); | |
current = anime({ | |
targets: 'path', | |
strokeDashoffset: { | |
value: -730, | |
duration: 700, | |
easing: 'easeOutQuart' | |
}, | |
strokeDasharray: { | |
value: '530 1386', | |
duration: 700, | |
easing: 'easeOutQuart' | |
} | |
}); | |
}); |
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/2.2.0/anime.min.js"></script> |
Slithering highlight in login form
A Pen by Mikael Ainalem on CodePen.
@import url('https://rsms.me/inter/inter-ui.css'); | |
::selection { | |
background: #2D2F36; | |
} | |
::-webkit-selection { | |
background: #2D2F36; | |
} | |
::-moz-selection { | |
background: #2D2F36; | |
} | |
body { | |
background: white; | |
font-family: 'Inter UI', sans-serif; | |
margin: 0; | |
padding: 20px; | |
} | |
.page { | |
background: #e2e2e5; | |
display: flex; | |
flex-direction: column; | |
height: calc(100% - 40px); | |
position: absolute; | |
place-content: center; | |
width: calc(100% - 40px); | |
} | |
@media (max-width: 767px) { | |
.page { | |
height: auto; | |
margin-bottom: 20px; | |
padding-bottom: 20px; | |
} | |
} | |
.container { | |
display: flex; | |
height: 320px; | |
margin: 0 auto; | |
width: 640px; | |
} | |
@media (max-width: 767px) { | |
.container { | |
flex-direction: column; | |
height: 630px; | |
width: 320px; | |
} | |
} | |
.left { | |
background: white; | |
height: calc(100% - 40px); | |
top: 20px; | |
position: relative; | |
width: 50%; | |
} | |
@media (max-width: 767px) { | |
.left { | |
height: 100%; | |
left: 20px; | |
width: calc(100% - 40px); | |
max-height: 270px; | |
} | |
} | |
.login { | |
font-size: 50px; | |
font-weight: 900; | |
margin: 50px 40px 40px; | |
} | |
.eula { | |
color: #999; | |
font-size: 14px; | |
line-height: 1.5; | |
margin: 40px; | |
} | |
.right { | |
background: #474A59; | |
box-shadow: 0px 0px 40px 16px rgba(0,0,0,0.22); | |
color: #F1F1F2; | |
position: relative; | |
width: 50%; | |
} | |
@media (max-width: 767px) { | |
.right { | |
flex-shrink: 0; | |
height: 100%; | |
width: 100%; | |
max-height: 350px; | |
} | |
} | |
svg { | |
position: absolute; | |
width: 320px; | |
} | |
path { | |
fill: none; | |
stroke: url(#linearGradient);; | |
stroke-width: 4; | |
stroke-dasharray: 240 1386; | |
} | |
.form { | |
margin: 40px; | |
position: absolute; | |
} | |
label { | |
color: #c2c2c5; | |
display: block; | |
font-size: 14px; | |
height: 16px; | |
margin-top: 20px; | |
margin-bottom: 5px; | |
} | |
input { | |
background: transparent; | |
border: 0; | |
color: #f2f2f2; | |
font-size: 20px; | |
height: 30px; | |
line-height: 30px; | |
outline: none !important; | |
width: 100%; | |
} | |
input::-moz-focus-inner { | |
border: 0; | |
} | |
#submit { | |
color: #707075; | |
margin-top: 40px; | |
transition: color 300ms; | |
} | |
#submit:focus { | |
color: #f2f2f2; | |
} | |
#submit:active { | |
color: #d0d0d2; | |
} |