我需要制作一个简单的条形进度指示器 - 实际上我只需要一个条形图,其中绿色部分表示良好的数量,另一个颜色部分表示不良金额和百分比在条形图中间的某处 . 假设条宽50px,高15px . 想想静态进度条,如下例所示 .
在使用jquery和背景div之前我已经完成了这个操作,其中有两个位于其上方的div,用于好的和坏的指示符,然后是一个位于其上方的div来显示文本 .
但是我想知道是否有更简单的HTML5画布,SVG或CSS解决方案 . 由于这个timy控件将出现在长表的每一行中,目的是减少对DOM的污染并提高可读性和可重用性 .
我知道有些图书馆可以做到这一点,但我想用它作为学习经验 . 解决方案应该是无脚本,或者只有JS,或者是带有jquery的JS .
编辑:感谢积极的输入人员 . 我在下面的答案中提出了我自己的解决方案和工作片段,因为我认为值得单独参加投票等 . 没有人提出了SVG解决方案 - 任何接受者?
我的道具形象:
到目前为止编辑2:3优秀的解决方案(加上我的) . 事实证明这是一个非常有趣的周末挑战 . 还有吗?
编辑 - 答案选择:为了结束,我选择并回答了奖励积分 . 但是,所有提出的答案在不同情况下似乎都是可行的 . 就我而言,Le Beau先生基于SVG的答案是最佳的 . 我选择的参数是我最初在服务器上制作页面标记,因此可以设置渲染条形所需的所有值而无需执行代码 . 后来我允许更改完成百分比,我用ajax发布到服务器和简单的jquery来更新文本和条形覆盖 .
我希望HTML5进度标记的回答能够让这个问题变得多余,但是我们可能会再次坐在开发人员的家里,在那里喝着鸡尾酒(也许) .
谢谢大家的努力 .
5 回答
这是我自己的产品 . 请注意,脚本的很大一部分是从画布生成透明度的背景图像,您可能不需要这样做 .
该技术使用每个条形的单个div,一些用于样式的标准CSS和单个图像 .
条形背景图像以相同的高度和条形宽度的两倍预先绘制,两个区段的宽度为宽度的50%,使用表示进度所需的颜色 . 因此,如果条形图为50px,则背景图像为100px,例如50px蓝色和50px黄色 .
在我的例子中,我使用脚本来读取div中显示的值,然后修改css background-position-x值以适当地移动图像 . 将它移动到x = 0并且条形图都很好,移动到x = -25并且你有50/50好/坏等 .
如果您知道条形大小并且可以提前生成图像,并且在从DB生成页面时,则可以完全跳过脚本,并在输出html时在div上设置必要的元素css .
EDIT: 添加了静态解决方案
我能想到的最低限度是:
这里是静态解决方案:
您可以使用progress元素:
它很难造型,但易于使用:
这是与您的产品相当的SVG .
你只需要一个DIV和伪
:before
和:after
,一个用于背景,一个用于文本,就像这里https://jsfiddle.net/3keey3t6/2/然后
和
只是一个非常简单的例子,如果目标是尽可能少地污染DOM ......