Maison > Questions et réponses > le corps du texte
Comment positionner les éléments HTML DIV par rapport aux éléments SVG ?
J'ai utilisé D3 pour générer le graphique SVG :
Je souhaite ajouter une liste déroulante à côté de la légende dans le coin inférieur droit. J'ai l'élément correspondant (un élément HTML DIV classique), mais je ne sais pas comment le positionner correctement sur le graphique.
Je comprends le positionnement des éléments SVG, mais je ne sais pas comment appliquer quelque chose comme un élément DIV.
Des idées autres que de le placer en dehors de la fenêtre (comme ci-dessous) ?
P粉5295811992023-09-08 16:47:49
Afficher Position CSS. Vous pouvez créer un DIV relativement positionné pour contenir votre SVG. Vous pouvez ensuite placer un DIV absolument positionné dessus pour s'adapter au style select
元素;您可以使用它的 left
和 top
et placer le deuxième DIV où vous le souhaitez.
Tout est réuni :
let w = 500; let h = 300; let pad = 10; let xmin = -2 * Math.PI; let xmax = 2 * Math.PI; let ymin = -1.1; let ymax = 1.1; let svg = d3.select("#graph") .append("svg") .attr("max-width", `${w}px`) .attr("viewBox", [0, 0, w, h]); let x_scale = d3 .scaleLinear() .domain([xmin, xmax]) .range([pad, w - pad]); let y_scale = d3 .scaleLinear() .domain([ymin, ymax]) .range([h - pad, pad]); let path = d3 .line() .x((d) => x_scale(d[0])) .y((d) => y_scale(d[1])); svg .append("g") .attr("transform", `translate(0, ${y_scale(0)})`) .call(d3.axisBottom(x_scale).tickFormat(d3.format("d")).tickSizeOuter(0)); svg .append("g") .attr("transform", `translate(${x_scale(0)})`) .call(d3.axisLeft(y_scale).ticks(5).tickSizeOuter(0)); d3.select('#function') .on('change', function() { draw_graph(this.value) }) draw_graph('sine') function draw_graph(f_string) { svg.select('path.graph').remove() let f if(f_string == "sine") { f = Math.sin; } else { f = Math.cos; } let pts = d3.range(xmin, xmax, 0.01) .map((x) => [x, f(x)]); svg .append("path") .attr('class', 'graph') .attr("d", path(pts)) .attr("fill", "none") .attr("stroke", "black") .attr("stroke-width", 3); }
<script src="https://d3js.org/d3.v7.min.js"></script> <div style="position: relative" id="viz"> <svg id="graph" width=500 height=300 style="border: solid 2px black"></svg> <div style="border: solid 0.5px black; background-color: rgba(255,255,255,0.7); position: absolute; left: 20px; top: 30px"> <label for="function">function:</label> <select name="function" id="function"> <option value="sine">sine</option> <option value="cosine">cosine</option> </select> </div> </div>