You can use the following code to have a beautiful background on dark themed websites. In this code the vertical lines move slowly together and each has a crystalline appearance. Clicking on the color theme page changes these lines, which makes this background more attractive.


HTML
<!-- This script got from www.devanswer.com -->
<div id="fps"></div>
<div id="info">
  Click on the Canvas for new Colors :)
</div>
<div id="bg_glow"></div>
<div id="overlay"></div>
<canvas id="canvas"></canvas><div id="bcl"><a style="font-size:8pt;text-decoration:none;" href="http://www.devanswer.com">Developers Answer</a></div>
                        

CSS
html, body {
    overflow: hidden;
    background: #000;
    padding: 0px;
    margin: 0px;
}
#canvas {
    cursor: crosshair;
    z-index: 2;
    position: absolute;
    top: 0;
    left: 0;
}
#overlay {
    background: radial-gradient(ellipse at center, rgba(0,0,0,.0) 10%, rgba(0,0,0,.8) 80%, rgba(0,0,0,1) 90%, rgba(0,0,0,1) 100%);
    z-index: 3;
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
}
#bg_glow {
    z-index: 1;
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
}
#info {
    z-index: 4;
    position: absolute;
    color: #fff;
    top: 0px;
    left: 0px;
    background: rgba(60,60,60,.6);
    padding: 5px;
}
#overlay:hover {
    cursor: pointer;
}
#fps {
    position: absolute;
    top: 0px;
    right: 0px;
    z-index: 5;
}
Javascript
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var bgg = document.getElementById("bg_glow");
w = ctx.canvas.width = window.innerWidth;
h = ctx.canvas.height = window.innerHeight;
window.onresize = function () {
    w = ctx.canvas.width = window.innerWidth;
    h = ctx.canvas.height = window.innerHeight;
    maxHeight = h * .9
    minHeight = h * .5;
    dots = [];
    pushDots();
    ctx.globalCompositeOperation = "lighter";
};
document.getElementById("overlay").onclick = function () {
    hue = Math.random() * 360;
    bgg.style.background = "radial-gradient(ellipse at center, hsla(" + hue + ",50%,50%,.8) 0%,rgba(0,0,0,0) 100%)";
    dots = [];
    pushDots();
}
dots = [{}];
mx = 0; my = 0;
md = 100;
maxWidth = 15;
minWidth = 2;
maxHeight = h * .9
minHeight = h * .5;
maxSpeed = 35;
minSpeed = 6;
hue = 230;
hueDif = 50; // Hue +/-
glow = 10; // Set to 0 for better performance
ctx.globalCompositeOperation = "lighter";

function pushDots(num) {
    for (i = 1; i < md; i++) {
        dots.push({
            x: Math.random() * w,
            y: Math.random() * h / 2,
            h: Math.random() * (maxHeight - minHeight) + minHeight,
            w: Math.random() * (maxWidth - minWidth) + minWidth,
            c: Math.random() * ((hue + hueDif) - (hue - hueDif)) + (hue - hueDif),
            m: Math.random() * (maxSpeed - minSpeed) + minSpeed
        });
    }
} pushDots();
function render() {
    ctx.clearRect(0, 0, w, h);
    for (i = 1; i < dots.length; i++) {
        ctx.beginPath();
        grd = ctx.createLinearGradient(dots[i].x, dots[i].y, dots[i].x + dots[i].w, dots[i].y + dots[i].h);
        grd.addColorStop(.0, "hsla(" + dots[i].c + ",50%,50%,.0)");
        grd.addColorStop(.2, "hsla(" + dots[i].c + 20 + ",50%,50%,.5)");
        grd.addColorStop(.5, "hsla(" + dots[i].c + 50 + ",70%,60%,.8)");
        grd.addColorStop(.8, "hsla(" + dots[i].c + 80 + ",50%,50%,.5)");
        grd.addColorStop(1., "hsla(" + (dots[i].c + 100) + ",50%,50%,.0)");
        ctx.shadowBlur = glow;
        ctx.shadowColor = "hsla(" + (dots[i].c) + ",50%,50%,1)";
        ctx.fillStyle = grd;
        ctx.fillRect(dots[i].x, dots[i].y, dots[i].w, dots[i].h);
        ctx.closePath();
        dots[i].x += dots[i].m / 100;
        if (dots[i].x > w + maxWidth) {
            dots.splice(i, 1);
            dots.push({
                x: 0,
                y: Math.random() * h,
                h: Math.random() * (maxHeight - minHeight) + minHeight,
                w: Math.random() * (maxWidth - minWidth) + minWidth,
                c: Math.random() * ((hue + hueDif) - (hue - hueDif)) + (hue - hueDif),
                m: Math.random() * (maxSpeed - minSpeed) + minSpeed
            });
        }
    } window.requestAnimationFrame(render);
}
bgg.style.background = "radial-gradient(ellipse at center, hsla(" + hue + ",50%,50%,.8) 0%,rgba(0,0,0,0) 100%)";
render();