Taken from this question:
setting height greater than width is needed to get the layout right between browsers. Applying left and right padding will also help with layout and positioning.
For Chrome, use -webkit-appearance: slider-vertical.
For IE, use writing-mode: bt-lr.
For Firefox, add an orient="vertical" attribute to the html. Pity that they did it this way. Visual styles should be controlled via CSS, not HTML.
You're welcome to view the code at the original question.
About the gradient thing, it can be easily accomplished by setting the background with css to a linear gradient. The full code:
input[type=range][orient=vertical]
{
writing-mode: bt-lr; /* IE */
-webkit-appearance: slider-vertical; /* WebKit */
width: 20px;
height: 175px;
padding: 0 5px;
}
.gradientbg{
background: -webkit-linear-gradient(green, white, red);
background: -o-linear-gradient(green, white, red);
background: -moz-linear-gradient(green, white, red);
background: linear-gradient(green, white, red);
}
<input class="gradientbg" type="range" orient="vertical">