JSFiddle - React, Tailwind, and code Playground

by Ron Valstar

HTML

<div class="loadthis">
    <h1>Table below</h1>
    <table>
      <tr class="text">
        <td>elit</td>
        <td>cumque</td>
        <td>earum</td>
      </tr>

      <tr class="text">
        <td>consectetur adipisicing</td>
        <td>ipsum dolor sit</td>
        <td>sequi repellendus</td>
      </tr>

      <tr class="text">
        <td>cumque sed earu</td>
        <td>repellat eos minus</td>
        <td>quae</td>
      </tr> 
    </table>

    <div class="card">
      <div class="card__column"><img class="card__image" src="https://source.unsplash.com/random/150×150" width="150" height="150" alt="a random image" /></div>
      <div class="card__column">
        <h3 class="card__title">Laboriosam veritatis</h3>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ea earum, harum incidunt laboriosam veritatis voluptatum. Ad blanditiis deleniti dignissimos doloribus facere hic illo illum incidunt itaque magnam, nemo nostrum sequi.</p>
      </div>
    </div>

    <hr>
  </div>

SCSS

html {
      font-family: Arial, sans-serif;
      font-size: 1rem;
      line-height: 160%;
    }

    .skeleton {
      text-shadow: 1px 0 0 currentColor;
      animation: pulse 3s infinite;
      word-break: break-all;
    }
    img.skeleton, .skeleton img {
      background-color: currentColor;
    }

    table {
      margin: 1rem 0 2rem;
    }
    td {
      padding-left: 1rem;
    }

    @keyframes pulse {
      0% {
        color: #DDD;
      }
      61.8033% {
        color: #AAA;
      }
      100% {
        color: #DDD;
      }
    }

    .card {
      display: flex;
      margin-bottom: 2rem;
      padding: 1rem;
      box-shadow: 0 0 0 1px #333 inset;
    }
    .card__image {
      margin-right: 1rem;
    }
    .card__title {
      margin-top: 0;
    }

    hr {
      border: 0;
      height: 1rem;
      background-color: #333;
    }

JavaScript

const block = '▇' // '▋'
    Array(2).fill(1).forEach((o,indexVariation)=>{
      const load = document.querySelector('.loadthis').cloneNode(true)
      load.classList.add('index'+indexVariation)
      load.classList.add('skeleton')
      //
      Array.from(load.querySelectorAll('h1,h2,h3,h4,p,td')).forEach(elm=>{
        const {textContent} = elm
        elm.textContent = [
          block.repeat(textContent.length)
          , textContent.replace(/[^\s]/g, block)
        ][indexVariation]
      })
      Array.from(load.querySelectorAll('img')).forEach(img=>{
        img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
      })

      //
      document.body.appendChild(load)
    })