<script type="module" src="https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.esm.js"></script>
<script nomodule src="https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.js"></script>
<div class="container">
<h1>Add Class to Element</h1>
<p class="subtitle">Interactive JavaScript Class Manipulation Demo</p>
<div class="demo-section">
<h2>
<ion-icon name="cube-outline"></ion-icon>
Basic Example
</h2>
<div class="demo-box" id="box1">
<p>Click the button to add a highlight class!</p>
<span class="status status-inactive" id="status1">Not Highlighted</span>
</div>
<div class="btn-group">
<button class="btn" id="addBtn1">
<ion-icon name="add-circle-outline"></ion-icon>
Add Class
</button>
<button class="btn btn-secondary" id="removeBtn1">
<ion-icon name="remove-circle-outline"></ion-icon>
Remove Class
</button>
<button class="btn btn-secondary" id="toggleBtn1">
<ion-icon name="repeat-outline"></ion-icon>
Toggle Class
</button>
</div>
</div>
<div class="info-box">
<h3>
<ion-icon name="code-slash-outline"></ion-icon>
Code Example
</h3>
<div class="code-block">
<span class="comment">// Add a single class</span>
element.<span class="keyword">classList</span>.<span class="keyword">add</span>(<span class="string">'highlight'</span>);
<span class="comment">// Remove a class</span>
element.<span class="keyword">classList</span>.<span class="keyword">remove</span>(<span class="string">'highlight'</span>);
<span class="comment">// Toggle a class</span>
element.<span class="keyword">classList</span>.<span class="keyword">toggle</span>(<span class="string">'highlight'</span>);
<span class="comment">// Add multiple classes</span>
element.<span class="keyword">classList</span>.<span class="keyword">add</span>(<span class="string">'class1'</span>, <span class="string">'class2'</span>, <span class="string">'class3'</span>);
<span class="comment">// Check if class exists</span>
<span class="keyword">if</span> (element.<span class="keyword">classList</span>.<span class="keyword">contains</span>(<span class="string">'highlight'</span>)) {
console.log(<span class="string">'Class exists!'</span>);
}
</div>
</div>
<div class="demo-section">
<h2>
<ion-icon name="layers-outline"></ion-icon>
Multiple Classes
</h2>
<div class="demo-box" id="box2">
<p>Add multiple classes at once!</p>
</div>
<div class="btn-group">
<button class="btn" id="addBordered">
<ion-icon name="square-outline"></ion-icon>
Add Border
</button>
<button class="btn" id="addRounded">
<ion-icon name="ellipse-outline"></ion-icon>
Add Rounded
</button>
<button class="btn" id="addShadow">
<ion-icon name="contrast-outline"></ion-icon>
Add Shadow
</button>
<button class="btn btn-secondary" id="addAll">
<ion-icon name="star-outline"></ion-icon>
Add All
</button>
<button class="btn btn-secondary" id="removeAll">
<ion-icon name="trash-outline"></ion-icon>
Remove All
</button>
</div>
</div>
<div class="demo-section">
<h2>
<ion-icon name="grid-outline"></ion-icon>
Toggle Multiple Elements
</h2>
<div class="multi-demo">
<div class="small-box" data-box="1">Box 1</div>
<div class="small-box" data-box="2">Box 2</div>
<div class="small-box" data-box="3">Box 3</div>
<div class="small-box" data-box="4">Box 4</div>
</div>
<p style="text-align: center; margin-top: 15px; color: #666; font-size: 14px;">
Click on any box to toggle its active state
</p>
</div>
<div class="info-box">
<h3>
<ion-icon name="information-circle-outline"></ion-icon>
Key Methods
</h3>
<ul>
<li><strong>classList.add()</strong> - Adds one or more classes to an element</li>
<li><strong>classList.remove()</strong> - Removes one or more classes from an element</li>
<li><strong>classList.toggle()</strong> - Toggles a class on/off</li>
<li><strong>classList.contains()</strong> - Checks if element has a specific class</li>
<li><strong>classList.replace()</strong> - Replaces an existing class with a new one</li>
</ul>
</div>
</div>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
background: linear-gradient(135deg, #ff6b6b 0%, #ee5a6f 50%, #c44569 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
}
.container {
background: white;
border-radius: 20px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
padding: 50px 40px;
width: 100%;
max-width: 700px;
}
h1 {
font-size: 32px;
color: #333;
margin-bottom: 10px;
font-weight: 600;
text-align: center;
}
.subtitle {
color: #666;
font-size: 15px;
margin-bottom: 40px;
text-align: center;
}
.demo-section {
background: #f8f9fa;
border-radius: 12px;
padding: 30px;
margin-bottom: 30px;
}
.demo-section h2 {
font-size: 20px;
color: #ff6b6b;
margin-bottom: 20px;
display: flex;
align-items: center;
gap: 10px;
}
.demo-box {
background: white;
border: 2px dashed #ddd;
border-radius: 12px;
padding: 30px;
text-align: center;
margin-bottom: 20px;
transition: all 0.4s ease;
}
.demo-box p {
color: #666;
font-size: 16px;
margin-bottom: 10px;
}
/* Classes to be added dynamically */
.highlight {
background: linear-gradient(135deg, #ff6b6b 0%, #ee5a6f 100%);
color: white;
border-color: #ff6b6b;
transform: scale(1.05);
box-shadow: 0 10px 30px rgba(255, 107, 107, 0.3);
}
.highlight p {
color: white;
}
.bordered {
border: 3px solid #ff6b6b;
border-style: solid;
}
.rounded {
border-radius: 50px;
}
.shadow {
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.2);
}
.animated {
animation: bounce 0.6s ease;
}
@keyframes bounce {
0%, 100% { transform: translateY(0); }
25% { transform: translateY(-10px); }
50% { transform: translateY(0); }
75% { transform: translateY(-5px); }
}
.btn {
background: linear-gradient(135deg, #ff6b6b 0%, #ee5a6f 100%);
color: white;
border: none;
border-radius: 10px;
padding: 12px 24px;
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
display: inline-flex;
align-items: center;
gap: 8px;
margin: 5px;
}
.btn:hover {
transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(255, 107, 107, 0.4);
}
.btn:active {
transform: translateY(0);
}
.btn-secondary {
background: linear-gradient(135deg, #95a5a6 0%, #7f8c8d 100%);
}
.btn-group {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
}
.code-block {
background: #2d2d2d;
color: #f8f8f2;
padding: 20px;
border-radius: 10px;
font-family: 'Courier New', monospace;
font-size: 14px;
overflow-x: auto;
margin: 20px 0;
line-height: 1.6;
}
.code-block .keyword {
color: #ff79c6;
}
.code-block .string {
color: #f1fa8c;
}
.code-block .comment {
color: #6272a4;
}
.info-box {
background: #fff5f5;
border-left: 4px solid #ff6b6b;
padding: 20px;
border-radius: 8px;
margin: 20px 0;
}
.info-box h3 {
color: #ff6b6b;
margin-bottom: 10px;
font-size: 18px;
display: flex;
align-items: center;
gap: 8px;
}
.info-box ul {
margin-left: 20px;
color: #555;
}
.info-box li {
margin: 8px 0;
}
.status {
display: inline-block;
padding: 6px 12px;
border-radius: 20px;
font-size: 13px;
font-weight: 600;
margin-top: 10px;
}
.status-active {
background: #d4edda;
color: #155724;
}
.status-inactive {
background: #f8d7da;
color: #721c24;
}
.multi-demo {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-top: 20px;
}
.small-box {
background: white;
border: 2px solid #ddd;
border-radius: 10px;
padding: 20px;
text-align: center;
transition: all 0.3s ease;
cursor: pointer;
}
.small-box:hover {
border-color: #ff6b6b;
}
.small-box.active {
background: linear-gradient(135deg, #ff6b6b 0%, #ee5a6f 100%);
color: white;
border-color: #ff6b6b;
transform: scale(1.05);
}
// Basic Example
const box1 = document.getElementById('box1');
const status1 = document.getElementById('status1');
const addBtn1 = document.getElementById('addBtn1');
const removeBtn1 = document.getElementById('removeBtn1');
const toggleBtn1 = document.getElementById('toggleBtn1');
function updateStatus() {
if (box1.classList.contains('highlight')) {
status1.textContent = 'Highlighted';
status1.className = 'status status-active';
} else {
status1.textContent = 'Not Highlighted';
status1.className = 'status status-inactive';
}
}
addBtn1.addEventListener('click', () => {
box1.classList.add('highlight');
updateStatus();
});
removeBtn1.addEventListener('click', () => {
box1.classList.remove('highlight');
updateStatus();
});
toggleBtn1.addEventListener('click', () => {
box1.classList.toggle('highlight');
updateStatus();
});
// Multiple Classes Example
const box2 = document.getElementById('box2');
const addBordered = document.getElementById('addBordered');
const addRounded = document.getElementById('addRounded');
const addShadow = document.getElementById('addShadow');
const addAll = document.getElementById('addAll');
const removeAll = document.getElementById('removeAll');
addBordered.addEventListener('click', () => {
box2.classList.add('bordered');
});
addRounded.addEventListener('click', () => {
box2.classList.add('rounded');
});
addShadow.addEventListener('click', () => {
box2.classList.add('shadow');
});
addAll.addEventListener('click', () => {
box2.classList.add('bordered', 'rounded', 'shadow', 'animated');
});
removeAll.addEventListener('click', () => {
box2.classList.remove('bordered', 'rounded', 'shadow', 'animated');
});
// Multiple Elements Example
const smallBoxes = document.querySelectorAll('.small-box');
smallBoxes.forEach(box => {
box.addEventListener('click', () => {
box.classList.toggle('active');
});
});
No comments yet. Be the first!