【发布时间】:2013-11-29 08:24:55
【问题描述】:
需求描述:
我正在使用 d3 解析 .csv 文件中的数据,然后动态填充页面上的各种项目。其中一段如下所示:
我的代码进度:
-
我首先将每个动态检索到的数字包含在其自己的 div 标签中,并为每个动态设置背景图像。这是 d3 JavaScript 代码:
careerstage_td.append("div") .text(function(d){ return d.count }) .attr("class", "career-count") .style("color", function(d){return d.color;}) .style("background-image", function(d){return "url('images/" + d.icon + "')";}) .style("background-repeat", "no-repeat") .style("background-position", "center center");(请注意,我正在使用一个函数来动态填充数字以及确定要叠加的图像)
这给了我以下预期结果,其中图像位于文本后面:
-
下一步是弄清楚如何将背景图像覆盖在文本之上。为此,我开始在谷歌上搜索并在 SO:How to overlay images 上找到了这个问题。在这里,我确定了两种不同的解决方案:
解决方案 1:(来自该页面上的最佳答案)在带有数字的 div 中添加一个 span,然后使用 css 将 span 绝对定位在中心,就像这样
div.career-count span.stickperson { position:absolute; left:45%; top: 34%; }解决方案 2:(来自该页面上的另一个答案)添加以下 css,用动态文本扩展 div 的类,像这样
.career-count:after { content: url(/images/person_assoc.gif); position: absolute; left:45%; top: 34%; }
两种解决方案都有效,但解决方案 1 仅适用于 Chrome,解决方案 2 不允许我动态设置图像,因为这一切都是在 css 中完成的,并且“后”结构不能内联使用。
如果我能帮助我找出一个解决方案,让我可以动态设置图像并且也适用于 Chrome、Firefox 25 和 IE 11,我将不胜感激。
编辑:谢谢大家的支持。我现在添加了图片:)
【问题讨论】:
-
您是否尝试过不在第一组
divs 上设置背景图像,然后以图像为背景添加一组相同的divs? -
@Lars:上面的解决方案 1 与您所说的类似,因为我在 div 顶部用文本覆盖了一个跨度,并将图像作为内容添加到该跨度。我用 div 而不是 span 标签尝试了相同的解决方案,但它仍然只显示在 Chrome 中。我会将图像添加为背景图像而不是内容,然后看看会发生什么。敬请期待。
-
@LarsKotthoff:我尝试了你的建议。它在所有三个浏览器中都没有显示任何内容,所以我现在恢复到解决方案 1。我最喜欢解决方案 1 的一点是需要一个 CSS 定义。如果我要使用解决方案 2,我将不得不为每个块创建一个单独的 css 定义来定义各自的图像前景。解决方案 2 的好处是它适用于所有浏览器,并且不需要 html 端的额外元素。
-
您能发布一个完整的工作示例吗?这样玩起来会容易得多。
标签: javascript html css d3.js