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)});