В чем разница между атрибутами svg x и dx?
в чем разница между атрибутами svg x и dx (или y и dy)? Когда будет подходящее время для использования атрибута смещения оси (dx) по сравнению с атрибутом местоположения (x)?
например, я заметил, что многие примеры d3 делают что-то вроде этого
chart.append("text")
.attr("x", 0)
.attr("y", 0)
.attr("dy", -3)
.text("I am a label")
в чем преимущество или рассуждение для установки как y, так и dy, когда следующее, похоже, делает то же самое?
chart.append("text")
.attr("x", 0)
.attr("y", -3)
.text("I am a label")
2 ответов:
xиyабсолютные координаты иdxиdy- относительные координаты (относительно указанногоxиy).по моему опыту, это не принято использовать
dxиdyon<text>элементы (хотя это может быть полезно для удобства кодирования, если у вас, например, есть некоторый код для позиционирования текста, а затем отдельный код для его настройки).
dxиdyв основном полезны при использовании<tspan>вложенные элементы внутри<text>элемент для создания декоративной многострочного текста.для более подробной информации вы можете проверить текстовый раздел спецификации SVG.
чтобы добавить к ответу Скотта, DY, используемый с em (единицы размера шрифта), очень полезен для вертикального выравнивания текста относительно абсолютной координаты Y. Это хорошо освещено в ссылка на текстовый элемент D3.
использование dy=0.35 em может помочь вертикально центрировать текст независимо от размера шрифта. Это также помогает, если вы хотите повернуть центр текста вокруг точки, описанной вашими абсолютными координатами.
<style> text { fill: black; text-anchor: middle; } line { stroke-width: 1; stroke: lightgray; } </style> <script> dataset = d3.range(50,500,50); svg = d3.select("body").append("svg"); svg.attr({width:500,height:300}); svg.append("line").attr({x1:0,x2:500,y1:100,y2:100}); svg.append("line").attr({x1:0,x2:500,y1:200,y2:200}); group = svg.selectAll("g") .data(dataset) .enter() .append("g"); // Without the dy=0.35em offset group.append("text") .text("My text") .attr("x",function (d) {return d;}) .attr("y",100) .attr("transform", function(d, i) {return "rotate("+45*i+","+d+",100)";}); // With the dy=0.35em offset group.append("text") .text("My text") .attr("x",function (d) {return d;}) .attr("y",200) .attr("dy","0.35em") .attr("transform", function(d, i) {return "rotate("+45*i+","+d+",200)";}); <script>Если вы не включаете "dy=0.35 em", то слова вращаются вокруг нижней части текста и после 180 выровнять ниже, где они были до поворота. В том числе "dy=0.35 em" вращает их вокруг центра текста.
обратите внимание, что dy не может быть установлен с помощью CSS.
Comments