JSFiddle - React, Tailwind, and code Playground
HTML
<div class="parent">
<input type="text" id="email" required>
<label for="email">Email</label>
</div>
CSS
html {
height: 100%;
font-size: 62.5%;
}
body {
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
height: 100%;
font-family: sans-serif;
}
*,
::before,
::after {
box-sizing: inherit;
}
.parent {
position: relative;
}
.parent > input {
height: 4.8rem;
padding: 0.8rem 0.5em;
border-radius: 0.6rem;
border: 1px solid;
font-size: 1.6rem;
line-height: 1.875;
}
.parent > input:focus {
padding-top: 1.6rem;
padding-right: 0.5em;
padding-left: 0.5em;
box-shadow: 0 0 0 1px black; /* outline alternative */
outline: none;
}
.parent > input:required:valid {
padding-top: 1.6rem;
padding-right: 0.5em;
padding-left: 0.5em;
}
.parent > label {
position: absolute;
top: 50%;
left: 0.5em;
color: dimgray;
transform: translateY(-50%);
transition-property: font-size, transform;
transition-duration: 0.2s;
transition-timing-function: ease-out;
font-size: 1.6rem;
line-height: 1.5;
}
.parent > input:focus + label,
.parent > input:required:valid + label {
left: 0.8em;
color: black;
transform: translateY(-2.4rem);
font-size: 1.2rem;
}