Se podría utilizar uno div y una imagen, como mencioné anteriormente en un comentario. Aquí hay una manera en que podrías hacerlo. (No completamente probado, por lo que podría romperse.)
HTML:
<div id="progressBar"></div>
CSS:
#progressBar {
width: 200px;
height: 20px;
background: url('http://o.imm.io/x9E.jpg') no-repeat;
background-position: -200px 0px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
JS:
function setProgress(target,value) {
var oldPosition = $(target).css("backgroundPosition");
// Log the old position
console.log("Old position: " + oldPosition);
var newPosition = parseInt(oldPosition) + parseInt(value);
// Log the new position
console.log("New position: " + newPosition);
$(target).animate({backgroundPosition: newPosition + 'px 0px'})
}
Editar: I añade el redondeado esquinas y funciona exactamente como lo especificó, sin problemas con las esquinas redondeadas.
Editar 2: Comprueba la versión JSBin de este código.
Editar 3: Como dijo el OP, necesitaban que la barra de progreso fuera de un tamaño flexible. Esta implementación no hará eso. Voy a recomendar (como lo he hecho antes) el uso del jQueryUI Progress Bar. Es fácil de usar y bastante ligero.
Editar 4: Yo he llegado con otra implementación de este, lo que requiere un poco más de Javascript, pero puedes probarlo aquí: http://jsfiddle.net/ntnz4/7/
pregunta cómo llenar la barra de progreso o solo el fondo – Starx
El fondo cuyo ancho es proporcional al valor de la barra de progreso. –
Para solucionar el 4to ejemplo, simplemente coloque el color de relleno rojo * detrás del contenedor y haga que el fondo del contenedor sea blanco en las esquinas y transparente en el medio. – mpen