【问题标题】:How to assign custom color to progress bar bootsrap 4如何为进度条引导程序 4 分配自定义颜色
【发布时间】:2020-08-27 10:03:33
【问题描述】:

伙计们,我有进度条:

<div class="progress"><div class="progress-bar" style="width:{{a.49}}%">{{a.49}} %</div> </div>

如何根据 CSS 中的条件为进度条分配自定义颜色? :

if a.49 < 50 color red
if a.49 > 50 but less than 70 color orange
if a.49 > 70 color green

非常感谢您的帮助。

我根据答案尝试但无法得到确定的结果:

a=50

 <div class="progress">
 <div class="progress-bar" style="width:{{a}} %; background:{% if a < 50 %}red{% elif a > 70 %} green{% else %}orange{% endif %};">{{a}} % </div></div>

但是,尽管在这种情况下,它会根据值将条形内部颜色着色为橙色,但是条形填充了 10-20%,而之前填充了 50%,作为 {{a}} 的值

像这样:

<div class="progress"><div class="progress-bar" style="width:{{a}}% ;
       backkground:{% if a < 50 %} red {% elif a > 70 %} green {% else %} orange {% endif %}"> {{a}} %</div> </div>

这个方法可以复制到进度条吗?

【问题讨论】:

  • 最简单的方法是根据您想要的条件从您的JS 应用样式。 here 是如何在javascript 中应用颜色的答案。你特别需要做 CSS 方面吗?
  • 是的,我想获得 css,因为我对 js 仅准备好的代码不太熟悉。如果您能分享一些代码并且对我来说似乎很复杂,将不胜感激。

标签: html css django bootstrap-4


【解决方案1】:

使用 CSS 变量和多个背景你可以做到:

.progress .progress-bar {
  background: 
    linear-gradient(green, green)   0/ calc(var(--w)*1% - 70%) 1px, 
    linear-gradient(orange, orange) 0/ calc(var(--w)*1% - 50%) 1px, 
    red;
  width: calc(var(--w)*1%);
}

.progress .progress-bar::before {
  content: attr(style) "%";
  font-family:monospace;
  text-indent:-4ch;
  margin:auto;
  overflow:hidden;
}

html {
  font-size:25px;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet">
<div class="progress">
  <div class="progress-bar" style="--w:20"></div>
</div>

<div class="progress">
  <div class="progress-bar" style="--w:80"></div>
</div>

<div class="progress">
  <div class="progress-bar" style="--w:60"></div>
</div>

【讨论】:

  • 您的 porgress bar 有 3 个,您可以做 1 并应用三个条件绿色橙色红色吗?因为我不想放 3 个进度条
  • @Chantel 你不需要 3 个进度条。我用了三个来演示,你只需要改变--w的值,颜色就会自动改变。自己试试看
  • 嘿,我对 css 有同样的疑问:stackoverflow.com/questions/61780581/…。我可以将您共享的代码应用到谷歌柱形图吗?
【解决方案2】:

您可以使用简单的 JavaScript 做到这一点。唯一的警告是不要在“样式”属性上添加任何额外的空格,否则这将不起作用。

首先,稍微更改您的进度条码。您必须添加新的 id="anyname"。 我将使用“进度”作为我的 ID。

<div class="progress">
<div id="progress" class="progress-bar" style="width:{{a}}%">{{a}}%</div> 
</div>

接下来,添加以下 javascript。它会自动获取您的百分比并相应地更改颜色。我有一个函数可以做到这一点。

功能:

    function formatbar(id) {
    div1 = document.getElementById(id);
    style = div1.getAttribute('style');
    percent = style.substring(6);
    a= percent.substring(0, percent.length - 1);

    if (a<50) {
    //color red
    document.getElementById(id).style.backgroundColor = "red";
    } else if (a<70) {
    //color orange
    document.getElementById(id).style.backgroundColor = "orange";
    } else if (a>70) {
    //color green
    document.getElementById(id).style.backgroundColor = "green";
    }
    }

现在我们要做的就是使用我们提供的 ID 调用函数。

formatbar(id);

使用它,您可以制作许多这样的进度条。唯一的条件是每个进度条都必须有自己的 ID,否则这将不起作用。

formatbar("progress")
formatbar("progress1")
formatbar("progress12")
function formatbar(id) {
div1 = document.getElementById(id);
style = div1.getAttribute('style');
percent = style.substring(6);
a= percent.substring(0, percent.length - 1);

if (a<50) {
//color red
document.getElementById(id).style.backgroundColor = "red";
} else if (a<70) {
//color orange
document.getElementById(id).style.backgroundColor = "orange";
} else if (a>70) {
//color green
document.getElementById(id).style.backgroundColor = "green";
}
}
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

<div  class="progress"><div id="progress" class="progress-bar" style="width:20%">20%</div> </div>
<div  class="progress"><div id="progress1" class="progress-bar" style="width:60%">60%</div> </div>
<div  class="progress"><div id="progress12" class="progress-bar" style="width:90%">90%</div> </div>

【讨论】:

    【解决方案3】:

    您可以使用 Django 模板语言来执行此操作,而无需编写更多 CSS:

    模板逻辑: {% if a&lt;50 %}red{% elif a&lt;70 %}green{% else %}blue{% endif %}

    插入:

    <div class="progress">
    <div class="progress-bar" style="width:{{a}}%; color:{% if a<50 %}red{% elif a<70 %}green{% else %}blue{% endif %};">
        {{a}} %
    </div> 
    </div>
    

    【讨论】:

    • 嘿,它不起作用。是否可以在 css 中创建“绿色”类并分配颜色?
    • @Chantel 我建议实现上述内容,然后检查页面上的元素以查看其格式是否正确。 “红色”和“绿色”应该是默认的 CSS 颜色。我刚刚编辑了我的答案,因为我忘了在宽度后加分号。或者,如果您想定义确切的颜色,您可以使用十六进制代码执行{% if a&lt;50 %}#00FFFF{% elif a&lt;70 %}
    • 嘿,您的代码只是颜色编号 50,而不是内部背景颜色。因此将颜色替换为背景但颜色未填充 50 只有 10-20。我的代码会自动填充半蓝色 50 作为值 50,如果它是 100,它将 100% 被蓝色填充。现在我想用自定义颜色橙色、绿色红色替换蓝色
    • 如何解决这个问题?
    • @Chantel 对不起,我不明白你在问什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多