JSFiddle - React, Tailwind, and code Playground
HTML
<div class="form-step">
<div class="input-group">
</div>
<div class="type-window div-center">
<label class="radio-container">
<input type="radio" class="radio-input" id="etplan" name="plan">
<div class="custom-radio div-center">
<span class="radio-label">1 plan</span>
</div>
</label>
<label class="radio-container">
<input type="radio" class="radio-input" id="toplan" name="plan">
<div class="custom-radio">
<span class="radio-label">2 plan</span>
</div>
</label>
<label class="radio-container">
<input type="radio" class="radio-input" id="etagelejlighed" name="plan">
<div class="custom-radio">
<span class="radio-label">Etagelejlighed med ståadgang via altan eller svalegang</span>
</div>
</label>
</div>
<div class="">
<a href="#" class="btn btn-next width-50 ml-auto">Next</a>
</div>
</div>
<div class="form-step">
<div class="input-group">
<div class="grid-container">
<div class="grid-item">
<div class="image-section">
<img decoding="async" src="https://vinduespudser.dk//wp-content/uploads/2024/01/01vindue1.webp" alt="Vindue 1 rude">
</div>
<div class="content-section">
<div class="window-text">Vindue 1 rude</div>
<div class="number-input-container">
<!-- lejlighed -->
<input type="number" class="lejlighed-item" id="lejlighed-item2Count" name="lejlighed-item2Count" min="0" value="0" style="display: none;">
<input type="hidden" id="lejlighed-item2Price" name="lejlighed-item2Price" value="127">
<!-- 1. sal -->
<input type="number" class="sal-item" id="sal-item2Count" name="sal-item2Count" min="0" value="0" style="display:...
CSS
.container {
max-width: 1000px;
margin: 20px auto;
background-color: #ffffff;
border-radius: 10px;
overflow: hidden;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
:root {
--primary-color: #1a7efb;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
/* Global Stylings */
label {
display: block;
margin-bottom: 0.5rem;
}
input {
width: 100%;
padding: 0.75rem;
border: 1px solid #ccc;
border-radius: 0.25rem;
}
.width-50 {
width: 50%;
}
.ml-auto {
margin-left: auto;
}
.text-center {
text-align: center;
}
.div-center {
display: grid;
padding-bottom: 30px;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
justify-items: center;
}
/* Progressbar */
.progressbar {
position: relative;
display: flex;
justify-content: space-between;
counter-reset: step;
margin: 0rem 0rem 4rem;
}
.progressbar::before,
.progress {
content: "";
position: absolute;
top: 50%;
transform: translateY(-50%);
height: 4px;
width: 100%;
background-color: #dcdcdc;
}
.progress {
background-color: var(--primary-color);
width: 0%;
transition: 0.3s;
}
.progress-step {
width: 2.1875rem;
height: 2.1875rem;
background-color: #dcdcdc;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
z-index: 1;
}
.progress-step::before {
counter-increment: step;
content: counter(step);
}
.progress-step::after {
content: attr(data-title);
position: absolute;
top: calc(100% + 0.5rem);
font-size: 0.85rem;
color: #666;
}
.progress-step-active {
background-color: var(--primary-color);
color: #f3f3f3;
}
/* Form */
.form {
margin: 0 auto;
padding: 1rem;
}
.form-step {
display: none;
}
.form-step-active {
display: block;
}
.input-group {
margin: 2rem 0;
}
/* Button */
.btns-group {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
}
.btn {
padding: 0.75rem;
display: block;
text-decoration: none;
background-color:...
JavaScript
document.addEventListener('DOMContentLoaded', function () {
var radioContainers = document.querySelectorAll('.form-step .type-window');
var numberInputContainers = document.querySelectorAll('.form-step .number-input-container');
console.log("radioContainers:", radioContainers);
radioContainers.forEach(function (radioContainer, index) {
var radioButtons = radioContainer.querySelectorAll('input[name="plan"]');
var numberInputContainer = numberInputContainers[index];
radioButtons.forEach(function (radioButton) {
radioButton.addEventListener('change', function () {
hideAllNumberInputContainers();
if (radioButton.id === 'etplan') {
showNumberInputContainer(numberInputContainer, 'stue-item');
} else if (radioButton.id === 'toplan') {
showNumberInputContainer(numberInputContainer, 'stue-item');
showNumberInputContainer(numberInputContainer, 'sal-item');
} else if (radioButton.id === 'etagelejlighed') {
showNumberInputContainer(numberInputContainer, 'lejlighed-item');
}
});
});
});
function hideAllNumberInputContainers() {
numberInputContainers.forEach(function (container) {
var inputs = container.querySelectorAll('input[type="number"]');
inputs.forEach(function (input) {
input.style.display = 'none';
});
});
};
function showNumberInputContainer(container, selector) {
var inputs = container.getElementsByClassName(selector);
Array.from(inputs).forEach(function (input) {
input.style.display = 'inline-block';
});
}
});