Back
Explore the depths of enchanting interactions with a toggle button that opens and closes an animated portal.
<div class="portal-container">
<button class="portal-toggle" onclick="togglePortal()">
<span class="portal-text">Open Portal</span>
<div class="portal-light"></div>
</button>
<div class="portal-display">
<p>Welcome to the mystical realm!</p>
</div>
</div>
let portalOpen = false;
function togglePortal() {
const button = document.querySelector('.portal-toggle');
const portalDisplay = document.querySelector('.portal-display');
const portalText = document.querySelector('.portal-text');
portalOpen = !portalOpen;
if (portalOpen) {
portalDisplay.style.transform = 'scale(1)';
portalDisplay.style.opacity = '1';
portalText.textContent = 'Close Portal';
} else {
portalDisplay.style.transform = 'scale(0)';
portalDisplay.style.opacity = '0';
portalText.textContent = 'Open Portal';
}
}
.portal-container {
display: flex;
flex-direction: column;
align-items: center;
}
.portal-toggle {
background-color: #673ab7;
color: white;
border: none;
padding: 15px;
border-radius: 50px;
font-size: 18px;
cursor: pointer;
position: relative;
transition: background-color 0.3s;
}
.portal-toggle:hover {
background-color: #5e35b1;
}
.portal-light {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-radius: 50px;
background: radial-gradient(circle, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0) 70%);
opacity: 0;
transition: opacity 0.5s;
}
.portal-toggle:hover .portal-light {
opacity: 1;
}
.portal-display {
background-color: #ede7f6;
border: 2px solid #673ab7;
border-radius: 15px;
padding: 20px;
margin-top: 20px;
text-align: center;
transform: scale(0);
opacity: 0;
transition: transform 0.6s, opacity 0.6s;
box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.2), 0 0 10px rgba(0, 0, 0, 0.2);
}
This magical component combines form and fun, creating a delightful interaction for users as they enter and exit the mystical portal.<div class="portal-container">
<button class="portal-toggle" onclick="togglePortal()">
<span class="portal-text">Open Portal</span>
<div class="portal-light"></div>
</button>
<div class="portal-display">
<p>Welcome to the mystical realm!</p>
</div>
</div>
<script>
let portalOpen = false;
function togglePortal() {
const button = document.querySelector('.portal-toggle');
const portalDisplay = document.querySelector('.portal-display');
const portalText = document.querySelector('.portal-text');
portalOpen = !portalOpen;
if (portalOpen) {
portalDisplay.style.transform = 'scale(1)';
portalDisplay.style.opacity = '1';
portalText.textContent = 'Close Portal';
} else {
portalDisplay.style.transform = 'scale(0)';
portalDisplay.style.opacity = '0';
portalText.textContent = 'Open Portal';
}
}
</script>
<style>
.portal-container {
display: flex;
flex-direction: column;
align-items: center;
}
.portal-toggle {
background-color: #673ab7;
color: white;
border: none;
padding: 15px;
border-radius: 50px;
font-size: 18px;
cursor: pointer;
position: relative;
transition: background-color 0.3s;
}
.portal-toggle:hover {
background-color: #5e35b1;
}
.portal-light {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-radius: 50px;
background: radial-gradient(circle, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0) 70%);
opacity: 0;
transition: opacity 0.5s;
}
.portal-toggle:hover .portal-light {
opacity: 1;
}
.portal-display {
background-color: #ede7f6;
border: 2px solid #673ab7;
border-radius: 15px;
padding: 20px;
margin-top: 20px;
text-align: center;
transform: scale(0);
opacity: 0;
transition: transform 0.6s, opacity 0.6s;
box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.2), 0 0 10px rgba(0, 0, 0, 0.2);
}
</style>
Thank you for reading this article.
Comments