<div class="calculator-container">
<h1>Find Your Birth Year & Zodiac Sign</h1>
<div class="input-group">
<label for="ageInput">Enter Your Age:</label>
<input type="number" id="ageInput" placeholder="e.g., 30">
</div>
<button id="calculateButton">Calculate!</button>
<div id="results-container" class="results hidden">
<p>Your Birth Year: <span id="birthYearOutput"></span></p>
<p>Your Zodiac Sign: <span id="zodiacSignOutput"></span></p>
</div>
<div id="error-message" class="error hidden">
<p>Please enter a valid age (a positive number).</p>
</div>
</div>
body {
font-family: sans-serif;
background-color: #f4f4f4;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
}
.calculator-container {
background-color: #fff;
padding: 30px;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
text-align: center;
width: 400px;
}
h1 {
color: #333;
margin-bottom: 25px;
}
.input-group {
margin-bottom: 20px;
}
label {
display: block;
margin-bottom: 8px;
color: #555;
font-weight: bold;
}
input[type="number"] {
width: 100%;
padding: 12px;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 16px;
box-sizing: border-box; /* Important to include padding in width */
}
button {
background-color: #5cb85c; /* Green button */
color: white;
padding: 12px 25px;
border: none;
border-radius: 5px;
font-size: 18px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: #4cae4c; /* Darker green on hover */
}
.results, .error {
margin-top: 25px;
padding: 15px;
border-radius: 5px;
background-color: #e9ecef;
border: 1px solid #ced4da;
}
.results p, .error p {
margin: 0;
color: #495057;
font-size: 16px;
}
.results.hidden, .error.hidden {
display: none; /* Initially hide results and error */
}
.completed { /* Example of reusing .completed class if you want to add it later */
text-decoration: line-through;
color: gray;
}
function validateAge(age) {
if (typeof age !== "number" || age <= 0 || age > 120) {
return "Invalid age";
} else {
return age; // Age is good to go!
}
}
function getBirthYear(age) {
const currentYear = new Date().getFullYear(); // Use current year dynamically
const birthYear = currentYear - age;
return birthYear;
}
function getZodiacSign(birthYear) {
const signs = [
"Monkey",
"Rooster",
"Dog",
"Pig",
"Rat",
"Ox",
"Tiger",
"Rabbit",
"Dragon",
"Snake",
"Horse",
"Sheep",
];
return signs[birthYear % 12];
}
document.addEventListener('DOMContentLoaded', () => {
const calculateButton = document.getElementById('calculateButton');
const ageInput = document.getElementById('ageInput');
const birthYearOutput = document.getElementById('birthYearOutput');
const zodiacSignOutput = document.getElementById('zodiacSignOutput');
const resultsContainer = document.getElementById('results-container');
const errorMessage = document.getElementById('error-message');
calculateButton.addEventListener('click', () => {
const ageInputValue = parseInt(ageInput.value); // Get input value as number
const validatedAge = validateAge(ageInputValue); // Validate using function
if (validatedAge === "Invalid age") {
errorMessage.classList.remove('hidden'); // Show error message
resultsContainer.classList.add('hidden'); // Hide results if they were visible
return; // Stop further calculation
}
errorMessage.classList.add('hidden'); // Hide error message if it was visible
const birthYear = getBirthYear(validatedAge); // Calculate birth year using function
const zodiacSign = getZodiacSign(birthYear); // Get zodiac sign using function
birthYearOutput.textContent = birthYear;
zodiacSignOutput.textContent = zodiacSign;
resultsContainer.classList.remove('hidden'); // Show results
});
});
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.