条形图右侧的百分比

时间:2018-09-22 06:45:28

标签: html css html5 css3

多亏了previous answer,我有了HTML的条形图。

但是,有一个问题。如果某个百分比低于10%,则可能导致输出无法读取。在这种情况下,如何告诉CSS将百分比放在填充的右侧?使用text-align: rightdisplay:inline-block对我不起作用。

Bar chart HTML

enter image description here

$(function() {
      $('.progress-fill span').each(function(){
        var percent = $(this).html();
        $(this).parent().css('width', percent);
      });
});
body {
  background: #999;
}

.container {
  width: 500px;
  margin: 20px;
  background: #fff;
  padding: 20px;
  overflow: hidden;
  float: left;
}

.horizontal .progress-bar {
  float: left;
  height: 18px;
  width: 100%;
  padding: 3px 0;
}

.horizontal .progress-track {
  position: relative;
  width: 100%;
  height: 20px;
  background: #ebebeb;
}

.horizontal .progress-fill {
  position: relative;
  background: #666;
  height: 20px;
  width: 50%;
  color: #fff;
  text-align: center;
  font-family: "Lato","Verdana",sans-serif;
  font-size: 12px;
  line-height: 20px;
}

.progress-group {
  display: flex;
}

.progress-label {
  width: 170px;
  text-align: right;
  padding-right: 10px;
}

.progress-label::after {
  content: ":";
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="container horizontal flat">
  <h2>Team performances</h2>
  <div class="progress-group">
    <div class="progress-label">Team cat</div>
    <div class="progress-bar horizontal">
      <div class="progress-track">
        <div class="progress-fill">
          <span>3%</span>
        </div>
      </div>
    </div>
  </div>
  <div class="progress-group">
    <div class="progress-label">Team blue</div>
    <div class="progress-bar horizontal">
      <div class="progress-track">
        <div class="progress-fill">
          <span>75%</span>
        </div>
      </div>
    </div>
  </div>
  <div class="progress-group">
    <div class="progress-label">Team tigers</div>
    <div class="progress-bar horizontal">
      <div class="progress-track">
        <div class="progress-fill">
          <span>60%</span>
        </div>
      </div>
    </div>
  </div>
  <div class="progress-group">
    <div class="progress-label">Team waves</div>
    <div class="progress-bar horizontal">
      <div class="progress-track">
        <div class="progress-fill">
          <span>20%</span>
        </div>
      </div>
    </div>
  </div>
  <div class="progress-group">
    <div class="progress-label">Team crazy</div>
    <div class="progress-bar horizontal">
      <div class="progress-track">
        <div class="progress-fill">
          <span>34%</span>
        </div>
      </div>
    </div>
  </div>
  <div class="progress-group">
    <div class="progress-label">Team Melt</div>
    <div class="progress-bar horizontal">
      <div class="progress-track">
        <div class="progress-fill">
          <span>82%</span>
        </div>
      </div>
    </div>
  </div>
</div>

1 个答案:

答案 0 :(得分:1)

$(function() {
      $('.progress-fill span').each(function(){
        var percent = $(this).html();
        $(this).parent().css('width', percent);

        // If filled area is less too small (you may change min width, put text on the right
        if($(this).parent().width() <= 30) {
            $(this).css({
                'color': '#999',
                'margin-left': $(this).parent().width() + 5
            });
        }
      });
});
body {
  background: #999;
}

.container {
  width: 500px;
  margin: 20px;
  background: #fff;
  padding: 20px;
  overflow: hidden;
  float: left;
}

.horizontal .progress-bar {
  float: left;
  height: 18px;
  width: 100%;
  padding: 3px 0;
}

.horizontal .progress-track {
  position: relative;
  width: 100%;
  height: 20px;
  background: #ebebeb;
}

.horizontal .progress-fill {
  position: relative;
  background: #666;
  height: 20px;
  width: 50%;
  color: #fff;
  text-align: center;
  font-family: "Lato","Verdana",sans-serif;
  font-size: 12px;
  line-height: 20px;
}

.progress-group {
  display: flex;
}

.progress-label {
  width: 170px;
  text-align: right;
  padding-right: 10px;
}

.progress-label::after {
  content: ":";
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="container horizontal flat">
  <h2>Team performances</h2>
  <div class="progress-group">
    <div class="progress-label">Team cat</div>
    <div class="progress-bar horizontal">
      <div class="progress-track progress-track-right">
        <div class="progress-fill">
          <span>3%</span>
        </div>
      </div>
    </div>
  </div>
  <div class="progress-group">
    <div class="progress-label">Team blue</div>
    <div class="progress-bar horizontal">
      <div class="progress-track">
        <div class="progress-fill">
          <span>75%</span>
        </div>
      </div>
    </div>
  </div>
  <div class="progress-group">
    <div class="progress-label">Team tigers</div>
    <div class="progress-bar horizontal">
      <div class="progress-track">
        <div class="progress-fill">
          <span>60%</span>
        </div>
      </div>
    </div>
  </div>
  <div class="progress-group">
    <div class="progress-label">Team waves</div>
    <div class="progress-bar horizontal">
      <div class="progress-track">
        <div class="progress-fill">
          <span>20%</span>
        </div>
      </div>
    </div>
  </div>
  <div class="progress-group">
    <div class="progress-label">Team crazy</div>
    <div class="progress-bar horizontal">
      <div class="progress-track">
        <div class="progress-fill">
          <span>34%</span>
        </div>
      </div>
    </div>
  </div>
  <div class="progress-group">
    <div class="progress-label">Team Melt</div>
    <div class="progress-bar horizontal">
      <div class="progress-track">
        <div class="progress-fill">
          <span>82%</span>
        </div>
      </div>
    </div>
  </div>
</div>