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