var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); var outerColor = 'rgba(68,205,37,1)'; var innerColor = 'rgba(255,252,0,1)'; var w = 200; var h = 50; canvas.width = w; canvas.height = h; function gradient(dir) { var grad = ctx.createLinearGradient(dir[0], dir[1], dir[2], dir[3]); grad.addColorStop(0, outerColor); grad.addColorStop(0.5, innerColor); grad.addColorStop(1.0, outerColor); return grad; } // idea: render background gradient and a clipped "bow" function background() { ctx.fillStyle = gradient([0, 0, 0, h]); ctx.fillRect(0, 0, w, h); } function bow() { ctx.save(); ctx.beginPath(); ctx.moveTo(0, 0); ctx.lineTo(w, h); ctx.lineTo(w, 0); ctx.lineTo(0, h); ctx.clip(); ctx.fillStyle = gradient([0, 0, w, 0]); ctx.fillRect(0, 0, w, h); ctx.restore(); } background(); bow();
<canvas id="canvas"></canvas>