JSFiddle - React, Tailwind, and code Playground
by Felis Catus
HTML
<div class="thread">
<input type="checkbox" class="hierarchic" id="c1">
<label for="c1">Hierarchic</label>
<div class="post">
<div class="content">
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,
totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.
</div>
<div class="comments">
<div class="comment" data-level="1" style="order: 100;">
</div>
<div class="comment" data-level="1" style="order: 200;">
</div>
<div class="comment" data-level="1" style="order: 300;">
</div>
<div class="comment" data-level="2" style="order: 210;">
</div>
<div class="comment" data-level="1" style="order: 400;">
</div>
<div class="comment" data-level="2" style="order: 110;">
</div>
<div class="comment" data-level="1" style="order: 500;">
</div>
<div class="comment" data-level="2" style="order: 510;">
</div>
<div class="comment" data-level="3" style="order: 111;">
</div>
<div class="comment" data-level="2" style="order: 220;">
</div>
<div class="comment" data-level="1" style="order: 1111111112;">
far comment
</div>
<div class="comment" data-level="2" style="order: 1111111111;">
less far comment
</div>
</div>
</div>
</div>
SCSS
.post, .comment {
padding: 10px 5px;
margin: 3px 0;
}
.hierarchic:checked+label+.post .comments {
display: flex;
flex-direction: column;
.comment {
&[data-level='1'] {
margin-left: 0px;
background: #eee;
}
&[data-level='2'] {
margin-left: 10px;
background: #ddd;
}
&[data-level='3'] {
margin-left: 20px;
background: #ccc;
}
}
}
JavaScript
function randtext(words){
var text = "";
var alphabet = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,u,v,w,x,y,z".split(",");
var wordCount = 1+(Math.random()*words|0);
for(var i=0; i<wordCount; i++) {
var rand = null;
for (var x=0; x<3+(Math.random()*5|0); x++) {
rand = Math.floor(Math.random() * alphabet.length);
text += alphabet[rand][(x==0 && (i==0 || Math.random()>0.8)) ? 'toUpperCase' : 'toLowerCase']();
}
if (i<wordCount-1)
text += " ";
else
text += ".";
}
return text;
}
Array.prototype.slice.call(document.querySelectorAll('.comment'))
.forEach(function(el){el.innerText = el.innerText || randtext(80)});