Creating a Dynamic Water‑Ripple Login Page with HTML and CSS

This tutorial demonstrates how to build a visually appealing login interface using HTML and CSS, featuring a dynamic water‑ripple effect, animated elements, and custom form styling to provide users with a refreshing login experience.

Rare Earth Juejin Tech Community
Rare Earth Juejin Tech Community
Rare Earth Juejin Tech Community
Creating a Dynamic Water‑Ripple Login Page with HTML and CSS

This article presents a fun login interface built with HTML and CSS that incorporates a dynamic water‑ripple effect, giving users a cool visual experience when logging in.

Basic HTML structure

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="water.css">
    <link rel="stylesheet" href="form.css">
</head>

<body>
    <div class="main">
        <form>
            <p>用户名<br />
                <input type="text" class="textinput" placeholder="请输入用户名" />
            </p>
            <p>密码<br />
                <input type="password" class="textinput" placeholder="请输入密码" />
            </p>
            <p>
                <input id="remember" type="checkbox" /><label for="smtxt">记住密码</label>
            </p>
            <p>
                <input type="submit" value="登录" />
            </p>
            <p class="txt">还没有账户?<a href="#">注册</a></p>
        </form>
    </div>
</body>
</html>

The form contains fields for username and password, a "remember password" checkbox, a submit button, and a registration link, all styled later with CSS.

Form styling

form{
    opacity: 0.8;
    text-align: center;
    padding: 0px 100px;
    border-radius: 10px;
    margin: 120px auto;
}

p {
  -webkit-text-stroke: 1px #8e87c3;
}

The p elements are given a hollow‑text effect using -webkit-text-stroke.

Input field styling

.textinput{
    height: 40px;
    font-size: 15px;
    width: 100px;
    padding: 0 35px;
    border: none;
    background: rgba(250, 249, 249, 0.532);
    box-shadow: inset 4px 4px 10px rgba(160,162,158,0.814), 4px 4px 10px rgba(117,117,117,0.3), 15px 15px 30px rgba(72,70,70,0.193), inset -2px -2px 10px rgba(255,254,254,0.873);
    border-radius: 50px;
    -webkit-text-stroke: 0px;
    color: saddlebrown;
    outline-style: none;
}

The inputs receive a rounded shape, subtle shadows, and a semi‑transparent background to mimic a water droplet.

Submit button styling and hover effect

input[type="submit"]{
    width: 110px;
    height: 40px;
    text-align: center;
    outline-style: none;
    border-style: none;
    border-radius: 50px;
    background: rgb(31,209,218);
    -webkit-text-stroke: 0px;
    box-shadow: inset 4px 4px 10px rgba(160,162,158,0.814), 4px 4px 10px rgba(117,117,117,0.3), 15px 15px 30px rgba(72,70,70,0.193), inset -2px -2px 10px rgba(255,254,254,0.873);
}

input[type="submit"]:hover {
    background-color: rgb(31,218,78);
}

The button changes color on hover, providing a clear visual cue.

Link styling

a{
    text-decoration: none;
    color: rgba(236,20,20,0.433);
    -webkit-text-stroke: 1px;
}

a:hover {
    text-decoration: underline;
}

Links are styled with a semi‑transparent red color and gain an underline on hover.

Global reset and body background

*{
    margin: 0;
    padding: 0;
}
body{
    background: skyblue;
}

All elements have their margin and padding cleared, and the page background is set to sky blue.

Main container styling

.main{
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    width: 400px;
    height: 400px;
    box-sizing: border-box;
    border-radius: 50%;
    background: transparent;
    box-shadow: inset 15px 10px 40px rgba(158,158,158,0.303), 10px 10px 20px rgba(117,117,117,0.3), 15px 15px 30px rgba(72,70,70,0.193), inset -10px -10px 20px rgba(233,229,229,0.873);
    animation: move 6s linear infinite;
}

The container is centered using absolute positioning and transform, given a circular shape, transparent background, layered shadows, and a continuous animation.

Pseudo‑elements for moving droplets

.main::after{
    position: absolute;
    content: "";
    width: 40px;
    height: 40px;
    background: rgba(254,254,254,0.667);
    left: 80px;
    top: 80px;
    border-radius: 50%;
    animation: move2 6s linear infinite;
    filter: blur(1px);
}

.main::before{
    position: absolute;
    content: "";
    width: 20px;
    height: 20px;
    background: rgba(255,255,255,0.5);
    left: 130px;
    top: 70px;
    border-radius: 50%;
    animation: move3 6s linear infinite;
    filter: blur(1px);
}

Two pseudo‑elements act as small, semi‑transparent circles that move around the main container.

Keyframe animations

@keyframes move{
    25%{ border-radius: 52% 48% 59% 41% / 43% 49% 51% 57%; }
    50%{ border-radius: 42% 58% 49% 51% / 52% 36% 64% 48%; }
    75%{ border-radius: 52% 48% 49% 51% / 43% 49% 51% 57%; }
}

@keyframes move2{
    25%{ left: 80px; top: 110px; }
    50%{ left: 50px; top: 80px; }
    75%{ left: 80px; top: 120px; }
}

@keyframes move3{
    25%{ left: 100px; top: 90px; }
    50%{ left: 110px; top: 75px; }
    75%{ left: 130px; top: 100px; }
}

The move animation morphs the container’s border‑radius, while move2 and move3 animate the positions of the two pseudo‑elements.

Conclusion

All the code is provided above; feel free to copy, modify the styles, or experiment with different visual effects.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

frontendanimationCSSHTMLLogin FormWater Ripple Effect
Rare Earth Juejin Tech Community
Written by

Rare Earth Juejin Tech Community

Juejin, a tech community that helps developers grow.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.