как центрировать SVG-холст в окне d3.js

#css #svg #d3.js

#css #svg #d3.js

Вопрос:

Это очень простой вопрос, поэтому заранее приношу извинения. Моя цель — центрировать SVG «холст» в центре окна. Я использую .attr() или я делаю с CSS? Любые предложения были бы замечательными, спасибо. Ниже приведен код, в котором я создаю свой так называемый SVG «холст»..

 var svg = d3.select("body")
            .append("svg")
            .attr("width", wi   margin.right   margin.left)
            .attr("height", h);
 

Ответ №1:

Я бы рекомендовал не добавлять ваш SVG непосредственно к элементу body, а к оболочке div, которую вы могли бы стилизовать в CSS. (со свойствами flexbox, если вам также требуется вертикальное центрирование: http://philipwalton.github.io/solved-by-flexbox/demos/vertical-centering /)

Ответ №2:

Вы можете либо стилизовать SVG напрямую, либо обернуть SVG в div.

Способ 1:

 let svg = d3.select("body")
            .append("svg")
            .attr("width", wi   margin.right   margin.left)
            .attr("height", h)
            .style("background-color", "lightblue")
            .style("display", "block")
            .style("margin", "auto")
 

Если у вас много стилей для svg, предпочтительнее назначить ему класс, а затем определить класс с помощью CSS:

 let svg = d3.select("body")
            .append("svg")
            .attr("width", wi   margin.right   margin.left)
            .attr("height", h)
            .attr("class", "svg-style")
 

и затем

 .svg-style {
        background-color: lightblue;
        display: block;
        margin: auto;
           }
 

Способ 2:

В качестве альтернативы, как предложил Делапуайт, вы можете обернуть svg в div, а затем оформить div (в CSS или напрямую):

 <div id = "demo-div" style="text-align: center">
</div>

let svg = d3.select("#demo-div")
            .append("svg")
            .attr("width", wi   margin.right   margin.left)
            .attr("height", h)