JSFiddle - React, Tailwind, and code Playground

by nilloc

HTML

<div id='app' class='container stack'>
  
  <div class='code-row container stack'>
    <div class='number'>1</div>
    <div class='code-holder indent-1 container horizontal'>
      <code class='code-block'>testFunctionCall( <code class='code-block argument'>argument</code> );</code>
    </div>
  </div>
  
  <div class='code-row container stack'>
    <div class='number'>2</div>
    <div class='code-holder indent-1 container horizontal'>
      <code class='code-block open'>motor</code>
      <code class='dot'>.</code>
      <code class='code-block'>testFunctionCall( <code class='code-block argument'>argument</code> );</code>
    </div>
  </div>
  
  <div class='code-row container stack'>
    <div class='number'>3</div>
    <div class='code-holder indent-1 container horizontal'>
      <div class='code-block'><div class='block-collapse lines-3'></div>while( <code class='code-block argument'>argument</code> ){</div>
    </div>
  </div>
  
  <div class='code-row container stack'>
    <div class='number'>4</div>
    <div class='code-holder indent-1 container horizontal'>
      <code class='space'>&nbsp;</code>
      <code class='space'>&nbsp;</code>
      <code class='code-block open'>motor</code>
      <code class='dot'>.</code>
      <code class='code-block'>testFunctionCall( <code class='code-block argument'>argument</code> );</code>
    </div>
  </div>
  
  <div class='code-row container stack'>
    <div class='number'>5</div>
    <div class='code-holder indent-1 container horizontal'>
      <code class='code-block'>}</code>
    </div>
  </div>
  
</div>

SCSS

* { box-sizing: border-box }

#app{
  background:#333;
  position:absolute;
  top:0;
  bottom:0;
  left:0;
  right:0;
  font:16px monospace;
  
  div{
    position:relative;
    background:rgba(255,255,255,0.25);
  }
  
  .code-row{
    left:0;
    right:0;
    height:40px;
    
    & .indent-1{
      padding-left:100px;
    }
    
    &:hover{
      background:#c07712;
    }
    

    
    .code-holder{
      min-height:40px;
      padding-top:2px;
      padding-bottom:2px;
      
      .code-block{
        background:rgba(255,255,255,0.5);
        border-radius:4px;
        display:inline-block;
        height:36px;
        padding:8px;
        &:hover{
          background:rgba(255,255,255,0.75);
          cursor:pointer;
          .code-block{
            &:hover{
              background:rgba(255,255,255,1);
            }
            background:rgba(55,55,55,0.3);
            height:30px;
            padding:5px 8px;
            margin-top:-5px;
          }
        }
        .code-block{
          height:30px;
          padding:5px 8px;
          margin-top:-5px;
        }
        .block-collapse{
          position:absolute;
          left:-30px;
          top:10px;
          border-radius:20px;
          width:20px;
          min-height:20px;
          background:#bada55;
          z-index:20;
          
          @for $i from 1 through 10 {
            &.lines-#{$i}{
               height:($i * 40px) - 20px;
            }
          }
        }  
      }
    }
    
    .dot, .space, .tab{
      padding:0;
      margin-left:-4px;
      margin-right:-4px;
    }
    
    .number{
      position:absolute;
      left:0;
      top:0;
      width:60px;
      min-height:40px;
      text-align:center;
      padding:10px;
    }
  }
}