Когда вы делаете это ...
svg.append("g").call(yAxis).style("stroke", "#c3c3c3")
... вы фактически устанавливаете stroke
элемента <g>
, который содержит пути, строки и тексты.Очевидно, вы ожидаете, что это установит стиль всех этих элементов.
Однако генератор оси D3 автоматически устанавливает стили элементов <line>
и <path>
.Давайте посмотрим на исходный код :
path = path.merge(path.enter().insert("path", ".tick")
.attr("class", "domain")
.attr("stroke", "currentColor"));
line = line.merge(tickEnter.append("line")
.attr("stroke", "currentColor")
.attr(x + "2", k * tickSizeInner));
Следовательно, эти стили, установленные генератором осей, переопределят стиль, установленный для группы (в приведенном выше коде currentColor имеет видпросто CSS currentColor ).
Давайте посмотрим на это в этой демонстрации, используя красный для stroke
:
const svg = d3.select("svg");
const g = svg.append("g");
const axis = d3.axisBottom(d3.scaleLinear().range([10, 290]));
g.call(axis).style("stroke", "red")
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>
Как видите, мы применили стиль к группе, но только текстовые элементы унаследовали его (и они выглядят уродливо, потому что это stroke
, а не стиль fill
).
Решение :
Выберите нужные элементы и примените к ним стиль.
Например,выделение линий и путей:
const svg = d3.select("svg");
const g = svg.append("g");
const axis = d3.axisBottom(d3.scaleLinear().range([10, 290]));
g.call(axis).selectAll("line,path").style("stroke", "red")
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>
PS : поскольку в новой версии D3 используется currentColor
, вы можете рисовать все, просто используя color
имущество!Посмотрите:
const svg = d3.select("svg");
const g = svg.append("g");
const axis = d3.axisBottom(d3.scaleLinear().range([10, 290]));
g.call(axis).style("color", "red")
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>