<!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">
<link rel="stylesheet" href="style.css">
<title>Document</title>
</head>
<body>
<section class="signup-flow">
<div class="name-screen">
<form class="name-form">
<label for="name">Name</label>
<input type="text" id="name" name="name">
<button>Next</button>
</form>
</div>
<div class="email-screen hidden">
<div class="back-button"><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20"
fill="currentColor">
<path fill-rule="evenodd"
d="M9.707 16.707a1 1 0 01-1.414 0l-6-6a1 1 0 010-1.414l6-6a1 1 0 011.414 1.414L5.414 9H17a1 1 0 110 2H5.414l4.293 4.293a1 1 0 010 1.414z"
clip-rule="evenodd" />
</svg>Back</div>
<form class="email-form">
<label for="email">Email</label>
<input type="email" id="email" name="email">
<button>Next</button>
</form>
</div>
<div class="birthday-screen hidden">
<div class="back-button"><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20"
fill="currentColor">
<path fill-rule="evenodd"
d="M9.707 16.707a1 1 0 01-1.414 0l-6-6a1 1 0 010-1.414l6-6a1 1 0 011.414 1.414L5.414 9H17a1 1 0 110 2H5.414l4.293 4.293a1 1 0 010 1.414z"
clip-rule="evenodd" />
</svg>Back</div>
<form class="birthday-form">
<label for="birthday">Birthday</label>
<input type="date" id="birthday" name="birthday">
<button>Next</button>
</form>
</div>
<div class="password-screen hidden">
<div class="back-button"><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20"
fill="currentColor">
<path fill-rule="evenodd"
d="M9.707 16.707a1 1 0 01-1.414 0l-6-6a1 1 0 010-1.414l6-6a1 1 0 011.414 1.414L5.414 9H17a1 1 0 110 2H5.414l4.293 4.293a1 1 0 010 1.414z"
clip-rule="evenodd" />
</svg>Back</div>
<form class="password-form">
<label for="password">Password</label>
<input type="password" id="password" name="password">
<button>Submit</button>
</form>
</div>
<div class="success-screen hidden">
<img src="https://i.ibb.co/KrQS1yq/green-check.png" alt="">
</div>
</section>
<script src="app.js"></script>
</body>
</html>
// CSS Rest
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
}
body {
line-height: 1;
box-sizing: border-box;
}
ol,
ul {
list-style: none;
}
blockquote,
q {
quotes: none;
}
blockquote:before,
blockquote:after,
q:before,
q:after {
content: "";
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
img {
width: 100%;
}
/* —————————————————————————————————— */
body {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
position: relative;
overflow: hidden;
}
form {
width: 20rem;
display: flex;
flex-direction: column;
gap: 1rem;
}
label {
font-weight: 900;
font-size: 2rem;
}
input {
padding: 0.5em 1em;
}
button {
width: 10rem;
padding: 0.5em 0;
}
.back-button {
display: flex;
align-items: center;
font-size: 1.5rem;
position: absolute;
top: 1rem;
left: 1rem;
}
.back-button:hover {
color: red;
cursor: pointer;
}
svg {
width: 1.5rem;
margin-right: 0.2em;
}
.success-screen {
text-align: center;
user-select: none;
}
.success-screen img {
width: 15rem;
}
.greet {
font-size: 2rem;
}
.hidden {
display: none;
}
const userInformation = {
name: "",
email: "",
birthday: "",
password: "",
};
const allScreens = {
nameScreen: document.querySelector(".name-screen"),
emailScreen: document.querySelector(".email-screen"),
birthdayScreen: document.querySelector(".birthday-screen"),
passwordScreen: document.querySelector(".password-screen"),
};
const successScreen = document.querySelector(".success-screen");
function handleSubmit(user) {
const newH1 = document.createElement("h1");
newH1.innerText = `Hey ${user.name}!`;
newH1.classList.add("greet");
successScreen.append(newH1);
const newP = document.createElement("p");
newP.innerText = "Thanks for signing up!";
newP.classList.add("greet");
successScreen.append(newP);
successScreen.classList.toggle("hidden");
}
const allScreensArry = Object.values(allScreens);
for (let i = 0; i < 4; i++) {
allScreensArry[i].addEventListener("submit", function (event) {
event.preventDefault();
userInformation[`${Object.keys(userInformation)[i]}`] =
event.target.elements[0].value;
this.classList.toggle("hidden");
if (allScreensArry[i + 1]) {
allScreensArry[i + 1].classList.toggle("hidden");
} else {
handleSubmit(userInformation);
}
});
}
const backButtons = document.querySelectorAll(".back-button");
for (let i = 0; i < 3; i++) {
backButtons[i].addEventListener("click", () => {
Object.values(allScreens)[i + 1].classList.toggle("hidden");
Object.values(allScreens)[i].classList.toggle("hidden");
});
}
View Compiled
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.