JSFiddle - React, Tailwind, and code Playground
by mangaip
HTML
<aside id="toc">
<b class="toc">Daftar Isi:</b>
</aside>
<div>
Imperdiet proin fermentum leo vel. Nibh ipsum consequat nisl vel. Netus et malesuada fames ac. Sed libero enim sed faucibus turpis in eu mi. Sit amet risus nullam eget. Viverra tellus in hac habitasse platea dictumst vestibulum rhoncus est. Eleifend mi in nulla posuere sollicitudin aliquam ultrices sagittis orci.</div>
<h2>Test Head 1</h2>
<div>
Imperdiet proin fermentum leo vel. Nibh ipsum consequat nisl vel. Netus et malesuada fames ac. Sed libero enim sed faucibus turpis in eu mi. Sit amet risus nullam eget. Viverra tellus in hac habitasse platea dictumst vestibulum rhoncus est. Eleifend mi in nulla posuere sollicitudin aliquam ultrices sagittis orci.
</div>
<h2>Test Head 2</h2>
<div>
Imperdiet proin fermentum leo vel. Nibh ipsum consequat nisl vel. Netus et malesuada fames ac. Sed libero enim sed faucibus turpis in eu mi. Sit amet risus nullam eget. Viverra tellus in hac habitasse platea dictumst vestibulum rhoncus est. Eleifend mi in nulla posuere sollicitudin aliquam ultrices sagittis orci.
</div>
<h2>Test Head 3</h2>
<div>
Imperdiet proin fermentum leo vel. Nibh ipsum consequat nisl vel. Netus et malesuada fames ac. Sed libero enim sed faucibus turpis in eu mi. Sit amet risus nullam eget. Viverra tellus in hac habitasse platea dictumst vestibulum rhoncus est. Eleifend mi in nulla posuere sollicitudin aliquam ultrices sagittis orci.
</div>
<h3>Sub Head 3.1</h3>
<div>
Imperdiet proin fermentum leo vel. Nibh ipsum consequat nisl vel. Netus et malesuada fames ac. Sed libero enim sed faucibus turpis in eu mi. Sit amet risus nullam eget. Viverra tellus in hac habitasse platea dictumst vestibulum rhoncus est. Eleifend mi in nulla posuere sollicitudin aliquam ultrices sagittis orci.
</div>
<h3>Sub Head 3.2</h3>
<div>
Imperdiet proin fermentum leo vel. Nibh ipsum consequat nisl vel. Netus et malesuada fames ac. Sed libero enim sed faucibus turpis in eu mi. Sit amet risus nullam eget. Viverra...
CSS
toc {
display: none
}
#toc {
border-left: 6px dotted rgba(153, 163, 173, .08);
padding-left: 1.125rem;
font-size: 14px;
font-size: .875rem
}
@media only screen and (max-width:480px) {
#toc {
padding-left: .75rem
}
}
#toc a {
text-decoration: none
}
#toc b.toc {
text-transform: uppercase
}
#toc ol {
padding-left: 1rem;
margin: 0 0 1.5625rem
}
#toc ol li {
margin: 8px 0
}
#toc ol li ol {
padding-left: 1rem;
margin: 0
}
#toc-0:before,
#toc-1:before,
#toc-2:before,
#toc-3:before,
#toc-4:before,
#toc-5:before,
#toc-6:before,
#toc-7:before,
#toc-8:before,
#toc-9:before,
#toc-10:before,
#toc-11:before,
#toc-12:before,
#toc-13:before,
#toc-14:before,
#toc-15:before {
content: " ";
margin-top: -72px;
height: 72px;
display: block;
visibility: hidden
}
.tabbed-toc {
margin: 0 auto;
position: relative
}
.tabbed-toc .loading {
display: block;
padding: 2px 12px;
color: #eee
}
.tabbed-toc li,
.tabbed-toc ol,
.tabbed-toc ul {
margin: 0;
padding: 0;
list-style: none
}
.tabbed-toc .toc-tabs {
width: 20%;
float: left;
background: rgba(51, 51, 51, .03);
font-size: 12px;
font-size: .75rem
}
.tabbed-toc .toc-tabs li a {
display: block;
overflow: hidden;
text-transform: uppercase;
text-decoration: none;
padding: 12px
}
.tabbed-toc .toc-tabs li a:hover {
background-color: rgba(0, 0, 0, .05)
}
.tabbed-toc .toc-tabs li a.active-tab {
background: rgba(0, 0, 0, .05);
position: relative;
z-index: 5
}
.tabbed-toc .toc-content,
.tabbed-toc .toc-line {
width: 80%;
float: right;
border-left: 5px solid rgba(0, 0, 0, .07);
-webkit-box-sizing: border-box;
box-sizing: border-box
}
.tabbed-toc .toc-line {
float: none;
display: block;
position: absolute;
top: 0;
right: 0;
bottom: 0
}
.tabbed-toc .panel {
position: relative;
z-index: 5
}
.tabbed-toc .panel li a {
display: block;
position: relative;
padding: 8px 12px;
overflow: hidden
}
.tabbed-toc .panel li time {
...
JavaScript
//<![CDATA[
/* www.cssscript.com/generating-a-table-of-contents-with-pure-javascript-toc */
!function(e){"use strict";function f(e){if("string"!=typeof e)return 0;var t=e.match(/\d/g);return t?Math.min.apply(null,t):1}function r(e){var c,i,n,t,r,o,a=e.selector,l=e.scope,u=document.createElement("ol"),d=u,p=(c=e.overwrite,i=e.prefix,function(e,t,n){e.textContent;var r=i+"-"+n;t.textContent=e.textContent;var o=!c&&e.id||r;o=encodeURIComponent(o),e.id=o,t.href="#"+o});return n=a,t=l,r=[],o=document.querySelectorAll(t),Array.prototype.forEach.call(o,function(e){var t=e.querySelectorAll(n);r=r.concat(Array.prototype.slice.call(t))}),r.reduce(function(e,t,n){var r=f(t.tagName),o=h(d,r-e)||u,c=document.createElement("li"),i=document.createElement("a");return p(t,i,n),o.appendChild(c).appendChild(i),d=c,r},f(a)),u}function t(e){var t=(e=function(e,t){for(var n in t)t.hasOwnProperty(n)&&t[n]&&(e[n]=t[n]);return e}({selector:"h1, h2, h3, h4, h5, h6",scope:"body",overwrite:!1,prefix:"toc"},e)).selector;if("string"!=typeof t)throw new TypeError("selector must be a string");if(!t.match(/^(?:h[1-6],?\s*)*$/g))throw new TypeError("selector must contains only h1-6");var n=location.hash;return n&&setTimeout(function(){location.hash="",location.hash=n},0),r(e)}var h=function(e,t){return t<0?h(e.parentElement,t+1):0<t?function(e,t){for(;t--;){var n=document.createElement("ol");e.appendChild(n),e=n}return e}(e,t):e.parentElement};"function"==typeof define&&define.amd?define("toc",[],function(){return t}):e.initTOC=t}(window);var aside=document.getElementById("toc"),toc=initTOC({selector:"h2, h3",scope:".post-body"});null!=aside&&aside.appendChild(toc);
//]]>