JSFiddle - React, Tailwind, and code Playground
HTML
<div id="viz"></div>
CSS
body {
background: black;
}
#viz {
position: relative;
margin: 20vh auto;
text-align: center;
height: 100px;
line-height: 100px;
}
.bar {
position: relative;
vertical-align: top;
width: 2px;
color: #677E8A;
margin: 0 1px;
display: inline-block;
}
.bar:before, .bar:after {
content: "";
position: absolute;
top: 0;
bottom: 0;
}
.bar:after {
background: currentColor;
z-index: 2;
left: 0;
right: 0;
}
.bar:before {
left: -1px;
right: -1px;
transform-origin: 50% 50%;
transform: scaleY(3);
color: inherit;
background: linear-gradient(to top, black, #5555ff, black);
filter: blur(2px);
z-index: 1;
}
JavaScript
for (let i = 0; i < 100; i++) {
let bar = document.createElement("div");
bar.classList.add("bar");
viz.appendChild(bar);
}
let bars = document.querySelectorAll(".bar");
function update(dt) {
dt = dt || 0;
for (let bar of bars) {
bar.style.height = (Math.random()*100)+"px";
}
}
window.setInterval(update, 100);