<div class="buttons">
<button id="red" class="selected">Red</button>
<button id="blue">Blue</button>
<button id="green">Green</button>
</div>
<div class="content">The colors are based on the selected scheme</div>
xxxxxxxxxx
.content {
display: inline-block;
padding: 1rem;
border: 1px solid black;
}
/* Theme specific styling */
.content {
color: var(--primary-dark);
background: var(--primary);
}
/* Helpers */
.buttons {
margin-bottom: 1rem;
}
button {
padding: 0.25rem 0.5rem;
background: lightgray;
border: none;
border-radius: 4px;
}
button.selected {
border: 1px solid darkgray;
}
xxxxxxxxxx
const cssFiles = {
red: 'JjLOVdW',
green: 'OJvOGVB',
blue: 'MWVORaw'
}
function selectSchema(schema) {
// Select button and unselect the other button
document.querySelectorAll('button').forEach(el => el.classList.remove('selected'));
document.getElementById(schema).classList.add('selected');
// Find reference to palette sheet in CodePen. In a real app you can just use an id attribute.
const baseUrl = 'https://codepen.io/fevanwijk/pen/';
const stylesheets = document.querySelectorAll(`[href^="${baseUrl}"]`);
const palettesheet = Array.from(stylesheets).find(sheet => Object.values(cssFiles).some(id => sheet.href.match(id)));
// Replace CSS file
palettesheet.href = baseUrl + cssFiles[schema] + '.css';
}
document.getElementById('red').addEventListener('click', () => {
selectSchema('red');
});
document.getElementById('blue').addEventListener('click', (e) => {
selectSchema('blue');
});
document.getElementById('green').addEventListener('click', (e) => {
selectSchema('green');
});
This Pen doesn't use any external JavaScript resources.