CSS和D3 - 在FIREFOX中制作响应式SVG

时间:2015-08-12 05:31:28

标签: javascript css firefox d3.js

我正在使用D3.js. 我已经成功地将它添加到元素上并在主SVG上开始执行SVG绘图。

我希望SVG元素具有响应性,因此我决定将属性宽度和高度设置为100%。

然后我创建了一个div:

<div id='divForCharts' class='divCharts'>

</div>

然后通过CSS使div成为一个响应的广场:

.divCharts{
  width: 50%;
  height: 0;
  padding-bottom: 50%;


  background-color: red;
  margin: 0 auto;
}

与上面的css一样,我将背景颜色设置为红色,以确保我可以看到div实际上是一个正方形。 在代码中,我确实在SAFARI和FIREFOX中都看到了一个红色方块。

单击按钮后,可以看到问题,该按钮遍历d3代码,该代码将SVG元素附加到上面的div并添加其他SVG元素。

在SAFARI上,一切都按照我的预期运作。可以看到SVG元素和父SVG元素的其他SVG子元素。

ON FIREFOX,没有任何内容。

然后我使用FIREBUG检查div并查看d3是否实际上添加了SVG。在检查之后,确认所有SVG都附加到DOM并且它们实际上与SAFARI上的相同。 区别在于FIREFOX上没有出现任何内容。 然后我查看了FIREFOX上的SVG元素属性。我设定的宽度和高度均为100% 然后我玩这个,而不是设置一个百分比,我直接改变高度和宽度让我们说100并最终出现SVG。

简而言之,相同的代码在SAFARI中起作用,但在FIREFOX中不起作用....

FIREFOX正在发生什么阻止它出现? 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在这种情况下,JsFiddle会有所帮助。

通常,当您执行响应式可视化时,您不仅需要更多地控制视口的大小,还需要更多地控制正在显示的元素。例如,在较小的屏幕上,您必须减少轴上的刻度数。

要执行此操作,您可以侦听调整大小事件并相应地调整图形:

function resize() {
   /* Find the new window dimensions */
   var width = parseInt(d3.select("#graph").style("width")) - margin*2,
   height = parseInt(d3.select("#graph").style("height")) - margin*2;
}

d3.select(window).on('resize', resize); 

以下是更多信息:https://www.safaribooksonline.com/blog/2014/02/17/building-responsible-visualizations-d3-js/