在 D3 中将 css 附加到 svg

Posted

技术标签:

【中文标题】在 D3 中将 css 附加到 svg【英文标题】:Append css to svg in D3 【发布时间】:2015-07-25 14:47:08 【问题描述】:

我是 d3 的新手。我正在尝试在 d3 中的 drwan 圆圈中添加一些气泡功能。我添加了 CSS 来实现气泡效果。 我检查了元素 css 是否添加到圆圈中,但气泡效果没有反映。 提前致谢

<style type="text/css">
.ball 
  display: inline-block;
  width: 100%;
  height: 100%;
  margin: 0;
  border-radius: 50%;
  position: relative;
  background: radial-gradient(circle at 50% 120%, #81e8f6, #76deef 10%, #055194 80%, #062745 100%);

.ball:before 
  content: "";
  position: absolute;
  top: 1%;
  left: 5%;
  width: 90%;
  height: 90%;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 0px, #ffffff, rgba(255, 255, 255, 0) 58%);
  -webkit-filter: blur(5px);
  z-index: -1;


.ball .shadow 
position: absolute;
width: 100%;
height: 100%;
background: radial-gradient(circle at 50% 50%, rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.1) 40%, rgba(0, 0, 0, 0) 50%);
-webkit-transform: rotateX(90deg) translateZ(-150px);
-moz-transform: rotateX(90deg) translateZ(-150px);
-ms-transform: rotateX(90deg) translateZ(-150px);
-o-transform: rotateX(90deg) translateZ(-150px);
transform: rotateX(90deg) translateZ(-150px);
z-index: -1;


</style>

<script type="text/javascript">

circleRadii = [40]

 svgContainer = d3.select("body").append("svg");


    gcontainer=svgContainer.append("g").attr("width", 600)
                                    .attr("height", 100);

var circles = gcontainer.selectAll("circle")
                          .append("g")
                          .data(circleRadii)
                          .enter()
                          .append("circle")

var circleAttributes = circles
                       .attr("cx", 50)
                       .attr("cy", 50)
                       .attr("r", function (d)  return d; )
                       .style("fill", "green")
                       .attr("class","ball");

</script>

【问题讨论】:

在 svg 元素中没有 :before 这样的东西。 【参考方案1】:

内联 SVG 被视为图像,图像被替换为不允许生成内容的元素。

CSS :before on inline SVG

before 和 after 伪选择器不插入 html 元素——它们在目标元素的现有内容之前或之后插入文本。因为图像元素不包含文本或没有后代,所以 img:before 或 img:after 都不会对你有任何好处。

Does :before not work on img elements?

这也可能对您有所帮助:

SVG drop shadow using css3

SVG gradient using CSS

【讨论】:

以上是关于在 D3 中将 css 附加到 svg的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 D3.js 将图像添加到 svg 容器

将“onclick”事件附加到 D3 图表背景

在d3js的热图网格中附加文本或圆圈

在 D3 v4 中使 SVG 容器具有父容器的 100% 宽度和高度(而不是像素)

如何在 AngularJS $routeProvider 中将样式表附加到 <head>?

D3.js 将对象绑定到数据并为每个键附加