JSFiddle - React, Tailwind, and code Playground
by pkysylevych
HTML
<div class="form">
<div class="name-section">
<input type="text" name="name" autocomplete="off" required />
<label for="name" class="label-name">
<span class="content-name">Name</span>
</label>
</div>
</div>
CSS
body{
height: 60vh;
display: flex;
justify-content: space-around;
align-items: center;
flex-direction: column;
font-family: sans-serif;
}
.form{
width: 50%;
position: relative;
height: 50px;
overflow: hidden;
}
.form input{
width: 100%;
height: 100%;
color: #595f6e;
padding-top: 30px;
border: none;
outline: none;
}
.form label{
position: absolute;
bottom: 0px;
left: 0%;
width: 100%;
height: 100%;
pointer-events: none;
border-bottom: 1px solid black;
}
.form label::after{
content: "";
position: absolute;
left: 0px;
bottom: -1px;
height: 100%;
width: 100%;
border-bottom: 3px solid #5fa8d3;
transform: translateX(-100%);
transition: transform 0.3s ease;
}
.content-name{
position: absolute;
bottom: 5px;
left: 0px;
transition: all 0.3s ease;
}
.form input:focus + .label-name .content-name,
.form input:valid + .label-name .content-name{
transform: translateY(-150%);
font-size: 14px;
color: #5fa8d3;
}
.form input:focus + .label-name::after,
.form input:valid + .label-name::after {
transform: translateX(0%);
}