Progress Bar with HTML and CSS

前端 未结 15 894
耶瑟儿~
耶瑟儿~ 2020-12-02 05:13

I want to create a progress bar like in the below image:

\"Progress

I have no idea about

相关标签:
15条回答
  • 2020-12-02 05:29

    In modern browsers you could use a CSS3 & HTML5 progress Element!

    progress {
      width: 40%;
      display: block; /* default: inline-block */
      margin: 2em auto;
      padding: 3px;
      border: 0 none;
      background: #444;
      border-radius: 14px;
    }
    progress::-moz-progress-bar {
      border-radius: 12px;
      background: orange;
    
    }
    /* webkit */
    @media screen and (-webkit-min-device-pixel-ratio:0) {
      progress {
        height: 25px;
      }
    }
    progress::-webkit-progress-bar {
        background: transparent;
    }  
    progress::-webkit-progress-value {  
      border-radius: 12px;
      background: orange;
    } 
    <progress max="100" value="40"></progress>

    0 讨论(0)
  • 2020-12-02 05:30

    I like this one:

    • Article
    • Demo
    • Downloads

    very slick with only this as HTML and the rest CSS3 that is backwards compatible (although it will have less eyecandy)

    Edit Added code below, but taken directly from the page above, all credit to that author

    .meter {
      height: 20px;
      /* Can be anything */
      position: relative;
      background: #555;
      -moz-border-radius: 25px;
      -webkit-border-radius: 25px;
      border-radius: 25px;
      padding: 10px;
      -webkit-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
      -moz-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
      box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
    }
    
    .meter>span {
      display: block;
      height: 100%;
      -webkit-border-top-right-radius: 8px;
      -webkit-border-bottom-right-radius: 8px;
      -moz-border-radius-topright: 8px;
      -moz-border-radius-bottomright: 8px;
      border-top-right-radius: 8px;
      border-bottom-right-radius: 8px;
      -webkit-border-top-left-radius: 20px;
      -webkit-border-bottom-left-radius: 20px;
      -moz-border-radius-topleft: 20px;
      -moz-border-radius-bottomleft: 20px;
      border-top-left-radius: 20px;
      border-bottom-left-radius: 20px;
      background-color: #f1a165;
      background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f1a165), color-stop(1, #f36d0a));
      background-image: -webkit-linear-gradient(top, #f1a165, #f36d0a);
      background-image: -moz-linear-gradient(top, #f1a165, #f36d0a);
      background-image: -ms-linear-gradient(top, #f1a165, #f36d0a);
      background-image: -o-linear-gradient(top, #f1a165, #f36d0a);
      -webkit-box-shadow: inset 0 2px 9px rgba(255, 255, 255, 0.3), inset 0 -2px 6px rgba(0, 0, 0, 0.4);
      -moz-box-shadow: inset 0 2px 9px rgba(255, 255, 255, 0.3), inset 0 -2px 6px rgba(0, 0, 0, 0.4);
      position: relative;
      overflow: hidden;
    }
    <div class="meter">
      <span style="width: 33%"></span>
      <!-- I use my viewmodel in MVC to calculate the progress and then use @Model.progress to place it in my HTML with Razor -->
    </div>

    0 讨论(0)
  • 2020-12-02 05:32

    Using setInterval.

    var totalelem = document.getElementById("total");
    var progresselem = document.getElementById("progress");
    var interval = setInterval(function(){
        if(progresselem.clientWidth>=totalelem.clientWidth)
        {
            clearInterval(interval);
            return;
        }
        progresselem.style.width = progresselem.offsetWidth+1+"px";
    },10)
    .outer
    {
        width: 200px;
        height: 15px;
        background: red;
    }
    .inner
    {
        width: 0px;
        height: 15px;
        background: green;
    }
    <div id="total" class="outer">
        <div id="progress" class="inner"></div>
    </div>

    Using CSS Transtitions.

    function loading()
    {
        document.getElementById("progress").style.width="200px";
    }
    .outer
    {
        width: 200px;
        height: 15px;
        background: red;
    }
    .inner
    {
        width: 0px;
        height: 15px;
        background: green;
        -webkit-transition:width 3s linear;
        transition: width 3s linear;
    }
    <div id="total" class="outer">
        <div id="progress" class="inner"></div>
    </div>
    <button id="load" onclick="loading()">Load</button>

    0 讨论(0)
  • 2020-12-02 05:34

    Create an element which shows the left part of the bar (the round part), also create an element for the right part. For the actual progress bar, create a third element with a repeating background and a width which depends on the actual progress. Put it all on top of the background image (containing the empty progress bar).

    But I suppose you already knew that...

    Edit: When creating a progress bar which do not use textual backgrounds. You can use the border-radius to get the round effect, as shown by Rikudo Sennin and RoToRa!

    0 讨论(0)
  • 2020-12-02 05:34
    .bar {
    background - color: blue;
    height: 40 px;
    width: 40 px;
    border - style: solid;
    border - right - width: 1300 px;
    border - radius: 40 px;
    animation - name: Load;
    animation - duration: 11 s;
    position: relative;
    animation - iteration - count: 1;
    animation - fill - mode: forwards;
    }
    
    @keyframes Load {
    100 % {
        width: 1300 px;border - right - width: 5;
    }
    
    0 讨论(0)
  • 2020-12-02 05:36

    http://jsfiddle.net/cwZSW/1406/

    #progress {
        background: #333;
        border-radius: 13px;
        height: 20px;
        width: 300px;
        padding: 3px;
    }
    
    #progress:after {
        content: '';
        display: block;
        background: orange;
        width: 50%;
        height: 100%;
        border-radius: 9px;
    }
    <div id="progress"></div>

    0 讨论(0)
提交回复
热议问题