.progress_bar { position: absolute; --hbw: min(50%, 200px); left: calc(50% - var(--hbw)); right: calc(50% - var(--hbw)); bottom: 50%; height: 44px; } .progress_bar .message { color: black; position:absolute; height: 24px; line-height: 24px; top:0; left:4px; right:4px; text-align: left; text-shadow: 0px 0px 6px white; overflow: hidden; } .progress_bar .bar { background-color: white; position:absolute; height: 16px; bottom:4px; left:4px; right:4px; border: 1px solid #808080; line-height: 17px; color:black; text-align: center; box-shadow: 2px 2px 10px 0px rgba(50, 50, 50, 0.3); } .progress_bar .bar .progress { background-color: #f0a0a0; position:absolute; height: 16px; left:0; top:0; border:none; } .progress_bar .bar .percent { position:absolute; height: 16px; left:0; right:0; } /* undeterminate */ .progress_bar.undeterminate { display: inline-block; left: 0; right: 0; top: 44%; text-align: center; } .progress_bar.undeterminate:after { content: " "; display: inline-block; width: 32px; height: 32px; margin: 24px; border-radius: 50%; border: 6px solid #fff; border-color: red rgb(240, 180, 180) red rgb(240, 180, 180); animation: progress_undeterminate 1.2s linear infinite; } .progress_bar.undeterminate .message { text-align: center; } .progress_bar.undeterminate .bar { display: none; } @keyframes progress_undeterminate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }