With the ~ selector, you can easily implement a global accessible boolean without using JavaScript.
To the very beginning of your document, add as much booleans as you want with a unique id and the hidden attribute set:
<input type="checkbox" id="sidebarShown" hidden />
<input type="checkbox" id="darkThemeUsed" hidden />
<!-- here begins actual content, for example: -->
<div id="container">
<div id="sidebar">
<!-- Menu, Search, ... -->
</div>
<!-- Some more content ... -->
</div>
<div id="footer">
<!-- ... -->
</div>
You can toggle the boolean by adding a label with the for attribute set:
<label for="sidebarShown">Show/Hide the sidebar!</label>
The normal selector (like .color-red) specifies the default properties. They can be overridden by following true / false selectors:
/* true: */
<checkbox>:checked ~ [sibling of checkbox & parent of target] <target>
/* false: */
<checkbox>:not(:checked) ~ [sibling of checkbox & parent of target] <target>
Note that <checkbox>, [sibling ...] and <target> should be replaced by the proper selectors. [sibling ...] can be a specific selector, (often if you’re lazy) simply \\* or nothing if the target is already a sibling of the checkbox.
Examples for the above HTML structure would be:
#sidebarShown:checked ~ #container #sidebar {
margin-left: 300px;
}
#darkThemeUsed:checked ~ #container,
#darkThemeUsed:checked ~ #footer {
background: #333;
}
See this fiddle for a implementation of these global booleans.