JSFiddle - React, Tailwind, and code Playground
by David Avellan
HTML
<div class="acidjs-css3-treeview">
<ul>
<li>
<input type="checkbox" id="node-0" /><label><input type="checkbox" /><span></span></label><label for="node-0">Striking</label>
<ul>
<li>
<input type="checkbox" id="node-0-0" /><label><input type="checkbox" /><span></span></label><label for="node-0-0">Footwork</label>
<ul>
<li><input type="checkbox" id="node-0-0-0" /><label><input type="checkbox" /><span></span></label><label for="node-0-0-0">Stance</label></li>
<li><input type="checkbox" id="node-0-0-1" /><label><input type="checkbox" /><span></span></label><label for="node-0-0-1">Basic Movement</label></li>
<li><input type="checkbox" id="node-0-0-2" /><label><input type="checkbox" /><span></span></label><label for="node-0-0-2">Pendulum Steps</label></li>
<li><input type="checkbox" id="node-0-0-3" /><label><input type="checkbox" /><span></span></label><label for="node-0-0-3">Shuffle Steps</label></li>
<li><input type="checkbox" id="node-0-0-4" /><label><input type="checkbox" /><span></span></label><label for="node-0-0-4">Circling</label></li>
<li><input type="checkbox" id="node-0-0-5" /><label><input type="checkbox" /><span></span></label><label for="node-0-0-5">Peek a boo</label></li>
<li><input type="checkbox" id="node-0-0-6" /><label><input type="checkbox" /><span></span></label><label for="node-0-0-6">Pivoting</label></li>
<li><input type="checkbox" id="node-0-0-7" /><label><input type="checkbox" /><span></span></label><label for="node-0-0-7">Switch Stance</label></li>
<li><input type="checkbox" id="node-0-0-8" /><label><input type="checkbox" /><span></span></label><label for="node-0-0-8">Shifting</label></li>
</ul>
</li>
<li>
<input type="checkbox" id="node-0-1" /><label><input type="checkbox" /><span></span></label><label...
CSS
/*
* Imageless CSS3 Treeview with Checkbox Support
* @namespace window.AcidJs
* @class CSS3Treeview
* @version 3.0
* @author Martin Ivanov
* @url developer website: http://wemakesites.net/
* @url developer twitter: https://twitter.com/#!/wemakesitesnet
* @url developer blog http://acidmartin.wordpress.com/
**/
/*
* Do you like this solution? Please, donate:
* https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QFUHPWJB2JDBS
**/
.acidjs-css3-treeview,
.acidjs-css3-treeview *
{
padding: 0;
margin: 0;
list-style: none;
}
.acidjs-css3-treeview label[for]::before,
.acidjs-css3-treeview label span::before
{
content: "\25b6";
display: inline-block;
margin: 2px 0 0;
width: 13px;
height: 13px;
vertical-align: top;
text-align: center;
color: #e74c3c;
font-size: 8px;
line-height: 13px;
}
.acidjs-css3-treeview li ul
{
margin: 0 0 0 22px;
}
.acidjs-css3-treeview *
{
vertical-align: middle;
}
.acidjs-css3-treeview
{
font: normal 11px/16px "Segoe UI", Arial, Sans-serif;
}
.acidjs-css3-treeview li
{
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.acidjs-css3-treeview input[type="checkbox"]
{
display: none;
}
.acidjs-css3-treeview label
{
cursor: pointer;
}
.acidjs-css3-treeview label[for]::before
{
-webkit-transform: translatex(-24px);
-moz-transform: translatex(-24px);
-ms-transform: translatex(-24px);
-o-transform: translatex(-24px);
transform: translatex(-24px);
}
.acidjs-css3-treeview label span::before
{
-webkit-transform: translatex(16px);
-moz-transform: translatex(16px);
-ms-transform: translatex(16px);
-o-transform: translatex(16px);
transform: translatex(16px);
}
.acidjs-css3-treeview input[type="checkbox"][id]:checked ~ label[for]::before
{
content: "\25bc";
}
.acidjs-css3-treeview input[type="checkbox"][id]:not(:checked) ~ ul
{
display: none;
}
...
JavaScript
$(".acidjs-css3-treeview").delegate("label input:checkbox", "change", function() {
var
checkbox = $(this),
selectNestedListCheckbox = checkbox.parents("li").children("label").children("input"),
siblingCheckboxes = checkbox.parentsUntil("ul","li").children("label").children("input");
if(checkbox.is(":checked")) {
return selectNestedListCheckbox.prop("checked", true);
}
selectNestedListCheckbox.prop("checked", false);
});