I need to make a Bootstrap progress bar which is filled by a gradient color (lets say red to green). My CSS currently looks like this:
.progress-lf {
position: relative;
height: 31px;
background-color: rgba(51, 51, 51, 0.4)
}
.progress-lf span {
position: absolute;
display: block;
font-weight: bold;
color: #d2d2d2;
width: 100%;
top:6px;
}
.progress-lf .gradient {
background-color: transparent;
background-image: -ms-linear-gradient(left, #E34747 0%, #5FB365 100%);
background-image: -moz-linear-gradient(left, #E34747 0%, #5FB365 100%);
background-image: -o-linear-gradient(left, #E34747 0%, #5FB365 100%);
background-image: -webkit-gradient(linear, left top, right top, color-stop(0, #E34747), color-stop(100, #5FB365));
background-image: -webkit-linear-gradient(left, #E34747 0%, #5FB365 100%);
background-image: linear-gradient(to right, #E34747 0%, #5FB365 100%);
}
and the HTML to go with it is this:
<div class="progress progress-lf">
<div class="progress-bar gradient" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo mt_rand(0,100);?>%;">
<span>60% Complete</span>
</div>
</div>
This displays the gradient but for the above example (60%), it displays the entire gradient color spectrum across the active 60% region. I need to change this so that (for example) for 60%, only 60% of the gradient color spectrum are displayed.
Anybody have any ideas on how to achieve this? I'd prefer a pure CSS solution but if jQuery is required to achieve this, that would also be OK.
Modify the element that has the gradient, from progress-bar to progress.
And. to mask it, use a white box-shadow on progress-bar.
Changes required to the style:
The gradient in .progress will be visible thru the transparent background in progress-bar.
But outside the progress-bar, it will be masked by the shadow
In order for you to dynamically alter the 'amount', I would suggest using jquery (or vanilla js, whichever is preferred) to adjust the progress bar.
I have used the data-attribute in order to complete the value of the progress bar, as well as the text (so you only need to change it in one place).
This means that all you have to do is change the
attribute to a value between 0 and 100%.
Demo
this realistically is only using two elements, so should be pretty good performance wise.
NOTE
There seems to be quite a bit of jQuery used in this answer; and this is due to the DEMO and not actual use.