// // Progress bars // -------------------------------------------------- // // Progress animations // @-webkit-keyframes progress-bar-stripes { from { background-position: @line-height-computed 0; } to { background-position: 0 0; } } @keyframes progress-bar-stripes { from { background-position: @line-height-computed 0; } to { background-position: 0 0; } } // // Basic progress bar // .progress { display: block; width: 100%; height: @line-height-computed; margin-bottom: @line-height-computed; } .progress[value] { // Reset the default appearance appearance: none; // Remove Firefox and Opera border border: 0; // IE10 uses `color` to set the bar background-color color: #0074d9; } .progress[value]::-webkit-progress-bar { background-color: #eee; .border-radius(@border-radius-base); .box-shadow(inset 0 .1rem .1rem rgba(0,0,0,.1)); } .progress[value]::-webkit-progress-value::before { content: attr(value); } .progress[value]::-webkit-progress-value { background-color: #0074d9; border-top-left-radius: @border-radius-base; border-bottom-left-radius: @border-radius-base; } .progress[value="0"]::-webkit-progress-value { color: @gray-light; min-width: 2rem; background-color: transparent; background-image: none; } .progress[value="100"]::-webkit-progress-value { border-top-right-radius: @border-radius-base; border-bottom-right-radius: @border-radius-base; } // Firefox styles must be entirely separate or it busts Webkit styles. @-moz-document url-prefix() { .progress[value] { background-color: #eee; .border-radius(@border-radius-base); .box-shadow(inset 0 .1rem .1rem rgba(0,0,0,.1)); } .progress[value]::-moz-progress-bar { background-color: #0074d9; border-top-left-radius: @border-radius-base; border-bottom-left-radius: @border-radius-base; } .progress[value="0"]::-moz-progress-bar { color: @gray-light; min-width: 2rem; background-color: transparent; background-image: none; } .progress[value="100"]::-moz-progress-bar { border-top-right-radius: @border-radius-base; border-bottom-right-radius: @border-radius-base; } } // IE9 hacks to accompany custom markup. We don't need to scope this via media queries, but I feel better doing it anyway. @media screen and (~"min-width:0\0") { .progress { background-color: #eee; .border-radius(@border-radius-base); .box-shadow(inset 0 .1rem .1rem rgba(0,0,0,.1)); } .progress-bar { display: inline-block; height: @line-height-computed; text-indent: -999rem; // Simulate hiding of value as in native `` background-color: #0074d9; border-top-left-radius: @border-radius-base; border-bottom-left-radius: @border-radius-base; } .progress[width^="0"] { color: @gray-light; min-width: 2rem; background-color: transparent; background-image: none; } .progress[width="100%"] { border-top-right-radius: @border-radius-base; border-bottom-right-radius: @border-radius-base; } } // // Striped // .progress-striped[value]::-webkit-progress-value { #gradient > .striped(); background-size: @line-height-computed @line-height-computed; } .progress-striped[value]::-moz-progress-bar { #gradient > .striped(); background-size: @line-height-computed @line-height-computed; } @media screen and (~"min-width:0\0") { .progress-bar-striped { #gradient > .striped(); background-size: @line-height-computed @line-height-computed; } } // // Animated // .progress-animated[value]::-webkit-progress-value { animation: progress-bar-stripes 2s linear infinite; } .progress-animated[value]::-moz-progress-bar { animation: progress-bar-stripes 2s linear infinite; } @media screen and (~"min-width:0\0") { .progress-animated .progress-bar-striped { animation: progress-bar-stripes 2s linear infinite; } } // // Variations // .progress-success { .progress-variant(@progress-bar-success-bg); } .progress-info { .progress-variant(@progress-bar-info-bg); } .progress-warning { .progress-variant(@progress-bar-warning-bg); } .progress-danger { .progress-variant(@progress-bar-danger-bg); }