【发布时间】:2013-08-12 07:51:58
【问题描述】:
HTML
<progress max="100" value="80" data-value="5"></progress>
CSS
progress { margin: 50px; width:250px; border:0; }
CSS(尝试 1)
progress:before, progress:after { content: attr(data-value); }
CSS(尝试 2)
progress::-webkit-progress-bar:before,
progress::-webkit-progress-bar:after { content: attr(data-value); }
progress::-moz-progress-bar:before,
progress::-moz-progress-bar:after { content: attr(data-value); }
CSS(尝试 3)
progress::-webkit-progress-value:before,
progress::-webkit-progress-value:after { content: attr(data-value); }
progress::-moz-progress-value:before,
progress::-moz-progress-value:after { content: attr(data-value); }
以上尝试均未成功。对于:before 和:after,还尝试了具有不同CSS 代码块的上述每个版本。
目标
在 HTML5 <progress> 元素之前和之后注入 CSS 生成的内容。这可能吗?
JsFiddle 演示
http://jsfiddle.net/pankajparashar/MNL2C/
更新
当我使用以下 CSS 时,它可以工作。
progress::-webkit-progress-bar:before,
progress::-webkit-progress-bar:after { content: '123'; }
结论
显然,当我们在 CSS 中注入静态内容时,它会起作用。但如果我们使用来自data-* 的内容,则不会。
【问题讨论】:
-
我认为这是不可能的,因为如果浏览器已经可以绘制进度条,
progress元素中的内容将永远不会显示,类似于object或iframe中的内容。 -
@Pankaj Parashar:是的,我们是。我们谈论的是在
progress元素内的内容之前和之后生成的内容。 -
我不同意你的意见。因为当我们将
content: attr(data-value);更改为content: '213';时,它可以工作!所以问题在于在content属性中使用 css attr。 -
这不是和
IMG标签类似的问题吗(关于:before和:after)? -
进一步阅读,进度元素不遵循void 内容模型。它使用phrasing content model,因此理论上您应该能够使用文本执行此操作。对我来说,这似乎仍然是一个奇怪的用例,但您可能应该使用 mozilla 和 chromium 提交一个错误。