无法将css样式应用于嵌入在div标记中的svg图像。?
嗨,我有一个角度5项目。我正在使用d3js库绘制条形图。在我的条形图中,有我想要应用样式的垂直条。但是,它不起作用,因为条形图以默认黑色显示,如下所示 下面是我的组件html代码,其中有一个名为histogramHolder的div标记,我将从组件ts文件中向其附加svg无法将css样式应用于嵌入在div标记中的svg图像。?,css,d3.js,svg,angular5,Css,D3.js,Svg,Angular5,嗨,我有一个角度5项目。我正在使用d3js库绘制条形图。在我的条形图中,有我想要应用样式的垂直条。但是,它不起作用,因为条形图以默认黑色显示,如下所示 下面是我的组件html代码,其中有一个名为histogramHolder的div标记,我将从组件ts文件中向其附加svg performance.component.html <div class="row"> <div class="col-1"></div> <di
performance.component.html
<div class="row">
<div class="col-1"></div>
<div class="col-10" id="histogramHolder">
</div>
<div class="col-2"> </div>
</div>
下面是我创建svg图像并附加到名为histogramHolder的div标记的代码片段
import * as d3 from "d3";
@Component({
selector: 'pc-performance',
templateUrl: './performance.component.html',
styleUrls: ['./performance.component.scss']
})
export class PerformanceComponent implements OnInit {
ngOnInit() {
const data=[{"key":"2019-09-11","documentCount":149002},{"key":"2019-09-12","documentCount":0},{"key":"2019-09-13","documentCount":80000},{"key":"2019-09-14","documentCount":0},{"key":"2019-09-15","documentCount":0},{"key":"2019-09-16","documentCount":0},{"key":"2019-09-17","documentCount":0},{"key":"2019-09-18","documentCount":270204},{"key":"2019-09-19","documentCount":0},{"key":"2019-09-20","documentCount":1},{"key":"2019-09-21","documentCount":0},{"key":"2019-09-22","documentCount":0},{"key":"2019-09-23","documentCount":269836},{"key":"2019-09-24","documentCount":0},{"key":"2019-09-25","documentCount":0},{"key":"2020-01-15","documentCount":0},{"key":"2020-01-16","documentCount":0},{"key":"2020-01-17","documentCount":0},{"key":"2020-01-18","documentCount":0},{"key":"2020-01-19","documentCount":0},{"key":"2020-01-20","documentCount":0},{"key":"2020-01-21","documentCount":0},{"key":"2020-01-22","documentCount":0},{"key":"2020-01-23","documentCount":0},{"key":"2020-01-24","documentCount":0},{"key":"2020-01-25","documentCount":0},{"key":"2020-01-26","documentCount":0},{"key":"2020-01-27","documentCount":0},{"key":"2020-01-28","documentCount":0},{"key":"2020-02-09","documentCount":0},{"key":"2020-02-10","documentCount":56000},{"key":"2020-02-11","documentCount":500}];
const margin = {top: 20, right: 20, bottom: 60, left: 60},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
const x = d3.scaleBand().range([0, width]).paddingInner(0.1).paddingOuter(0.5);
const y = d3.scaleLinear().range([height, 0]);
const svg = d3.select("div#histogramHolder").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
x.domain(data.map(function(d) { return d.key; }));
y.domain([0, d3.max(data, function(d) { return d.documentCount; })]);
// append the rectangles for the bar chart
svg.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", function(d) { return x(d.key); })
.attr("width", x.bandwidth())
.attr("y", function(d) { return y(d.documentCount); })
.attr("height", function(d) { return height - y(d.documentCount); });
svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x))
.selectAll("text")
.attr("y", 0)
.attr("x", 9)
.attr("dy", ".35em")
.attr("transform", "rotate(60)")
.style("text-anchor", "start");
// add the y Axis
svg.append("g").call(d3.axisLeft(y));
}
}
当我设置时,我希望这些条以钢蓝色显示。attrclass,代码中的条。然而,这并没有发生
感谢所有帮助库在DOM中添加的任何内容,如果动态添加元素的自定义css位于组件的css中,则不会应用它。因此,有必要添加全局样式的定制css
尝试将svg的样式放入全局样式中。scss您是在添加实际的svg还是svg图像?这两个不一样。我正在从我的组件类生成一个svg图像,并将其添加到DOM中。您可以创建一个stackblitz实例来显示您的问题。查看您的问题将非常有帮助。请检查一下
import * as d3 from "d3";
@Component({
selector: 'pc-performance',
templateUrl: './performance.component.html',
styleUrls: ['./performance.component.scss']
})
export class PerformanceComponent implements OnInit {
ngOnInit() {
const data=[{"key":"2019-09-11","documentCount":149002},{"key":"2019-09-12","documentCount":0},{"key":"2019-09-13","documentCount":80000},{"key":"2019-09-14","documentCount":0},{"key":"2019-09-15","documentCount":0},{"key":"2019-09-16","documentCount":0},{"key":"2019-09-17","documentCount":0},{"key":"2019-09-18","documentCount":270204},{"key":"2019-09-19","documentCount":0},{"key":"2019-09-20","documentCount":1},{"key":"2019-09-21","documentCount":0},{"key":"2019-09-22","documentCount":0},{"key":"2019-09-23","documentCount":269836},{"key":"2019-09-24","documentCount":0},{"key":"2019-09-25","documentCount":0},{"key":"2020-01-15","documentCount":0},{"key":"2020-01-16","documentCount":0},{"key":"2020-01-17","documentCount":0},{"key":"2020-01-18","documentCount":0},{"key":"2020-01-19","documentCount":0},{"key":"2020-01-20","documentCount":0},{"key":"2020-01-21","documentCount":0},{"key":"2020-01-22","documentCount":0},{"key":"2020-01-23","documentCount":0},{"key":"2020-01-24","documentCount":0},{"key":"2020-01-25","documentCount":0},{"key":"2020-01-26","documentCount":0},{"key":"2020-01-27","documentCount":0},{"key":"2020-01-28","documentCount":0},{"key":"2020-02-09","documentCount":0},{"key":"2020-02-10","documentCount":56000},{"key":"2020-02-11","documentCount":500}];
const margin = {top: 20, right: 20, bottom: 60, left: 60},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
const x = d3.scaleBand().range([0, width]).paddingInner(0.1).paddingOuter(0.5);
const y = d3.scaleLinear().range([height, 0]);
const svg = d3.select("div#histogramHolder").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
x.domain(data.map(function(d) { return d.key; }));
y.domain([0, d3.max(data, function(d) { return d.documentCount; })]);
// append the rectangles for the bar chart
svg.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", function(d) { return x(d.key); })
.attr("width", x.bandwidth())
.attr("y", function(d) { return y(d.documentCount); })
.attr("height", function(d) { return height - y(d.documentCount); });
svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x))
.selectAll("text")
.attr("y", 0)
.attr("x", 9)
.attr("dy", ".35em")
.attr("transform", "rotate(60)")
.style("text-anchor", "start");
// add the y Axis
svg.append("g").call(d3.axisLeft(y));
}
}