84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
如何相對於 SVG 元素定位 HTML DIV 元素?
我使用 D3 產生 SVG 圖表:
我想在右下角圖例旁邊新增一個下拉式清單。我確實有相應的元素(一個普通的 HTML DIV 元素),但我不知道如何將其正確定位在圖表上。
我了解 SVG 元素的定位,但我不知道如何應用類似 DIV 元素的內容。
除了將其放置在視窗之外(例如下面)之外,還有什麼想法嗎?
查看CSS 位置。您可以建立一個相對定位的 DIV 來儲存您的 SVG。然後,您可以在其頂部放置一個絕對定位的DIV 以容納select 元素;您可以使用它的left 和top 樣式將第二個DIV放置在任何您想要的位置。
select
left
top
所有內容都放在一起了:
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>
查看CSS 位置。您可以建立一個相對定位的 DIV 來儲存您的 SVG。然後,您可以在其頂部放置一個絕對定位的DIV 以容納
select
元素;您可以使用它的left
和top
樣式將第二個DIV放置在任何您想要的位置。所有內容都放在一起了: