Premium OTP Verification Form HTML

5 views 335 lines 6-digit OTP input with auto-focus styling
Mobile/email OTP verification UI
HTML • 335 lines
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">

<title>OTP Verification</title>

<style>

:root{
    --primary:#6366f1;
    --secondary:#8b5cf6;
    --accent:#06b6d4;
}

*{
    margin:0;
    padding:0;
    box-sizing:border-box;
    font-family:Inter,sans-serif;
}

body{
    min-height:100vh;
    display:flex;
    justify-content:center;
    align-items:center;
    padding:20px;
    overflow:hidden;

    background:
    linear-gradient(
        135deg,
        #020617,
        #172554,
        #312e81
    );
}

/* Animated Background */

.blob{
    position:absolute;
    border-radius:50%;
    filter:blur(90px);
    opacity:.5;
    animation:float 10s ease-in-out infinite;
}

.blob1{
    width:350px;
    height:350px;
    background:#6366f1;
    top:-100px;
    left:-100px;
}

.blob2{
    width:300px;
    height:300px;
    background:#06b6d4;
    right:-100px;
    bottom:-100px;
}

@keyframes float{
    50%{
        transform:translateY(-40px);
    }
}

/* Card */

.card{

    width:100%;
    max-width:500px;

    background:
    rgba(255,255,255,.08);

    backdrop-filter:blur(20px);

    border:1px solid rgba(255,255,255,.1);

    border-radius:30px;

    padding:40px;

    text-align:center;

    box-shadow:
    0 25px 60px rgba(0,0,0,.4);

    animation:show .8s ease;
}

@keyframes show{

    from{
        opacity:0;
        transform:translateY(30px);
    }

    to{
        opacity:1;
        transform:translateY(0);
    }
}

/* Phone Icon */

.phone{

    width:120px;
    height:120px;

    margin:auto;
    margin-bottom:25px;

    border-radius:30px;

    background:
    linear-gradient(
        135deg,
        var(--primary),
        var(--accent)
    );

    display:flex;
    justify-content:center;
    align-items:center;

    font-size:50px;

    animation:bounce 3s infinite;
}

@keyframes bounce{

    50%{
        transform:translateY(-10px);
    }
}

h2{
    color:white;
    margin-bottom:10px;
}

p{
    color:#cbd5e1;
    margin-bottom:30px;
}

/* OTP Boxes */

.otp{

    display:flex;
    justify-content:center;
    gap:10px;

    margin-bottom:25px;
}

.otp input{

    width:55px;
    height:60px;

    border:none;
    outline:none;

    border-radius:15px;

    text-align:center;

    font-size:24px;

    color:white;

    background:
    rgba(255,255,255,.08);

    transition:.3s;
}

.otp input:focus{

    transform:translateY(-3px);

    border:1px solid #06b6d4;

    box-shadow:
    0 0 20px rgba(6,182,212,.4);
}

/* Timer */

.timer{

    color:#94a3b8;

    margin-bottom:20px;
}

.timer span{
    color:#06b6d4;
}

/* Verify Button */

.btn{

    width:100%;

    padding:15px;

    border:none;

    border-radius:14px;

    color:white;

    font-size:16px;

    cursor:pointer;

    background:
    linear-gradient(
        135deg,
        var(--primary),
        var(--accent)
    );

    transition:.4s;
}

.btn:hover{

    transform:translateY(-3px);

    box-shadow:
    0 15px 35px rgba(99,102,241,.4);
}

/* Resend */

.resend{

    margin-top:20px;
}

.resend a{

    color:#06b6d4;

    text-decoration:none;
}

.resend a:hover{
    text-decoration:underline;
}

/* Mobile */

@media(max-width:500px){

.card{
    padding:25px;
}

.otp{
    gap:6px;
}

.otp input{
    width:42px;
    height:50px;
    font-size:20px;
}

}

</style>
</head>
<body>

<div class="blob blob1"></div>
<div class="blob blob2"></div>

<div class="card">

    <div class="phone">
        📱
    </div>

    <h2>Verify OTP</h2>

    <p>
        Enter the 6-digit code sent to
        your mobile number
    </p>

    <div class="otp">

        <input maxlength="1">
        <input maxlength="1">
        <input maxlength="1">
        <input maxlength="1">
        <input maxlength="1">
        <input maxlength="1">

    </div>

    <div class="timer">
        Code expires in
        <span>01:29</span>
    </div>

    <button class="btn">
        Verify OTP
    </button>

    <div class="resend">
        Didn't receive code?
        <a href="#">Resend OTP</a>
    </div>

</div>

</body>
</html>
Live Preview HTML preview
Raw Code • 335 lines
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">

<title>OTP Verification</title>

<style>

:root{
    --primary:#6366f1;
    --secondary:#8b5cf6;
    --accent:#06b6d4;
}

*{
    margin:0;
    padding:0;
    box-sizing:border-box;
    font-family:Inter,sans-serif;
}

body{
    min-height:100vh;
    display:flex;
    justify-content:center;
    align-items:center;
    padding:20px;
    overflow:hidden;

    background:
    linear-gradient(
        135deg,
        #020617,
        #172554,
        #312e81
    );
}

/* Animated Background */

.blob{
    position:absolute;
    border-radius:50%;
    filter:blur(90px);
    opacity:.5;
    animation:float 10s ease-in-out infinite;
}

.blob1{
    width:350px;
    height:350px;
    background:#6366f1;
    top:-100px;
    left:-100px;
}

.blob2{
    width:300px;
    height:300px;
    background:#06b6d4;
    right:-100px;
    bottom:-100px;
}

@keyframes float{
    50%{
        transform:translateY(-40px);
    }
}

/* Card */

.card{

    width:100%;
    max-width:500px;

    background:
    rgba(255,255,255,.08);

    backdrop-filter:blur(20px);

    border:1px solid rgba(255,255,255,.1);

    border-radius:30px;

    padding:40px;

    text-align:center;

    box-shadow:
    0 25px 60px rgba(0,0,0,.4);

    animation:show .8s ease;
}

@keyframes show{

    from{
        opacity:0;
        transform:translateY(30px);
    }

    to{
        opacity:1;
        transform:translateY(0);
    }
}

/* Phone Icon */

.phone{

    width:120px;
    height:120px;

    margin:auto;
    margin-bottom:25px;

    border-radius:30px;

    background:
    linear-gradient(
        135deg,
        var(--primary),
        var(--accent)
    );

    display:flex;
    justify-content:center;
    align-items:center;

    font-size:50px;

    animation:bounce 3s infinite;
}

@keyframes bounce{

    50%{
        transform:translateY(-10px);
    }
}

h2{
    color:white;
    margin-bottom:10px;
}

p{
    color:#cbd5e1;
    margin-bottom:30px;
}

/* OTP Boxes */

.otp{

    display:flex;
    justify-content:center;
    gap:10px;

    margin-bottom:25px;
}

.otp input{

    width:55px;
    height:60px;

    border:none;
    outline:none;

    border-radius:15px;

    text-align:center;

    font-size:24px;

    color:white;

    background:
    rgba(255,255,255,.08);

    transition:.3s;
}

.otp input:focus{

    transform:translateY(-3px);

    border:1px solid #06b6d4;

    box-shadow:
    0 0 20px rgba(6,182,212,.4);
}

/* Timer */

.timer{

    color:#94a3b8;

    margin-bottom:20px;
}

.timer span{
    color:#06b6d4;
}

/* Verify Button */

.btn{

    width:100%;

    padding:15px;

    border:none;

    border-radius:14px;

    color:white;

    font-size:16px;

    cursor:pointer;

    background:
    linear-gradient(
        135deg,
        var(--primary),
        var(--accent)
    );

    transition:.4s;
}

.btn:hover{

    transform:translateY(-3px);

    box-shadow:
    0 15px 35px rgba(99,102,241,.4);
}

/* Resend */

.resend{

    margin-top:20px;
}

.resend a{

    color:#06b6d4;

    text-decoration:none;
}

.resend a:hover{
    text-decoration:underline;
}

/* Mobile */

@media(max-width:500px){

.card{
    padding:25px;
}

.otp{
    gap:6px;
}

.otp input{
    width:42px;
    height:50px;
    font-size:20px;
}

}

</style>
</head>
<body>

<div class="blob blob1"></div>
<div class="blob blob2"></div>

<div class="card">

    <div class="phone">
        📱
    </div>

    <h2>Verify OTP</h2>

    <p>
        Enter the 6-digit code sent to
        your mobile number
    </p>

    <div class="otp">

        <input maxlength="1">
        <input maxlength="1">
        <input maxlength="1">
        <input maxlength="1">
        <input maxlength="1">
        <input maxlength="1">

    </div>

    <div class="timer">
        Code expires in
        <span>01:29</span>
    </div>

    <button class="btn">
        Verify OTP
    </button>

    <div class="resend">
        Didn't receive code?
        <a href="#">Resend OTP</a>
    </div>

</div>

</body>
</html>
Code copied to clipboard!