Hello friends of JavaScript and CSS! Today I needed a small editor that allows me to conveniently edit the CSS :root variables of my theme in the browser. So I created this pen, and am now developing a more complex editor from it.
I'm happy to share the basic code with you guys. Feel free to do what you want with it, or improve the JavaScript code! By all means, let me know how you like the script, and write a comment!
What does it do?
The script creates a little editor widget based on the options array you must provide. It allows you to change the value of the :root CSS variable in your Stylesheet after changing a value in realtime.
What you need
At first you need some CSS code with your :root variables.
// Create some custom root variables
:root{
--boxcolor: orange;
--textcolor: #fff;
--padding: 20px;
--margin: 20px;
--fontsize-h2: 30px;
--fontsize-p: 18px;
}
// Use the variables for your CSS classes etc.
h2,p{
color: var(--textcolor);
}
h2{
font-size: var(--fontsize-h2);
}
p{
font-size: var(--fontsize-p);
}
.box{
margin: var(--margin);
padding: var(--padding);
background-color: var(--boxcolor);
}
Some HTML Markup
This is the most simple part of this tutorial. But of course it can be more complex. Imagine making a full website editable like this!
<div class="box">
<h2>JavaScript CSS Variable Editor</h2>
<p>Lorem Ipsum dolor paragraph is nice yeah...</p>
</div>
<div class="box">
<h2>Text Primary Color</h2>
<p>Lorem Ipsum dolor paragraph is nice yeah...</p>
</div>
<div class="box">
<h2>Text Primary Color</h2>
<p>Lorem Ipsum dolor paragraph is nice yeah...</p>
</div>
The JavaScript
The JavaSript does the magic.
document.addEventListener('DOMContentLoaded',function(){
// Entries for the Settings Widget
let options = [
{
label: 'Text Color',
type: 'color',
property: 'textcolor',
default: '#fff'
},
{
label: 'Box Color',
type: 'color',
property: 'boxcolor',
default: 'orange'
},
{
label: 'Padding',
type: 'range',
property: 'padding',
attributes: {min: "20", max: "90"},
default: '20'
},
{
label: 'Margin',
type: 'number',
property: 'margin',
attributes: {min: "20", max: "90"},
default: '20'
},
{
label: 'Font Size H2',
type: 'range',
property: 'fontsize-h2',
attributes: {min: "20", max: "90"},
default: '20'
},
{
label: 'Font Size Paragraph',
type: 'range',
property: 'fontsize-p',
attributes: {min: "18", max: "30"},
default: '14'
}
];
let styler_Editor = document.createElement('div');
styler_Editor.classList.add('styler-editor');
document.querySelector('body').appendChild(styler_Editor);
function setAttributes(el, attrs) {
for(var key in attrs) {
el.setAttribute(key, attrs[key]);
}
}
options.forEach((option, i) => {
let optionLabel = document.createElement('label');
optionLabel.innerHTML = option.label;
let optionField = document.createElement('input');
optionField.type = option.type;
optionField.value = option.default;
setAttributes(optionField,option.attributes);
styler_Editor.appendChild(optionLabel);
styler_Editor.appendChild(optionField);
optionField.addEventListener('change',function(){
switch(option.type){
case 'range':
document.documentElement.style.setProperty('--'+option.property,optionField.value+'px');
break;
case 'number':
document.documentElement.style.setProperty('--'+option.property,optionField.value+'px');
break;
case 'color':
document.documentElement.style.setProperty('--'+option.property,optionField.value);
break;
case 'text':
document.documentElement.style.setProperty('--'+option.property,optionField.value);
break;
}
});
});
});
And finally the CodePen
Here's the working example for you to play with. I do not know if it supports all browsers yet. This example has been tested with Google Chrome and Brave on a Macbook.
You might be interested in this...
Support my work:
► https://www.paypal.com/paypalme/typo3freelancer
► https://www.patreon.com/koehlersimon
Follow me:
► https://github.com/koehlersimon
► https://www.linkedin.com/in/typo3-freelancer/
► https://bitbucket.org/typo3freelancer/
► https://twitter.com/koehlersimon
► https://www.instagram.com/fullstackfreelancer/
Learn TYPO3 with the Video Training for Version 9 LTS of Wolfgang Wagner:
→ https://www.digistore24.com/redir/246076/GOCHILLA/
Your TYPO3 Developer & Freelancer - let's start a great TYPO3 project together!
→ https://simon-koehler.com/
TYPO3 Slug Editor for SEO Gurus:
→ https://extensions.typo3.org/extension/slug
TYPO3 Timeline Extension for frontend timelines:
→ https://extensions.typo3.org/extension/ce_timeline
TYPO3 Font Awesome Extension for awesome icons:
→ https://extensions.typo3.org/extension/faicon
USA Hosting with Bluehost:
→ https://www.bluehost.com/track/simonkoehler
Island Hosting with Orange Website:
→ https://affiliate.orangewebsite.com/idevaffiliate.php?id=10827_0_3_1
Top comments (0)