javascript - 修复响应式 SVG 脱离 Bootstrap 网格的问题?

标签 javascript d3.js svg twitter-bootstrap-3

代码笔示例:http://codepen.io/mattrice/full/peXeqd/

我想要的是 SVG 完全包含在父级的给定宽度内(本例为 6 列,但可以是任何其他任意宽度的网格元素)。

此示例在宽度 <768px 时按预期运行,因为 Bootstrap 列是整页宽度;但是,当 Bootstrap 列回流到宽度超过 768 的水平堆叠时,SVG 会占据页面的整个宽度。

我认为问题源于 render()updateDimensions() 的参数:

 function render() {
    updateDimensions(window.innerWidth);

    ...<snip>...
  }

我也尝试过 getBoundingClientRect() 像这样

 function render() {
    updateDimensions(d3.select(options.selector).node().getBoundingClientRect().width);

    ...<snip>...
  }

但这导致了一些奇怪的结果(可能超出了这个问题的范围)。

我该如何解决这个问题?

最佳答案

如果您希望 SVG 缩放以适合其父元素,则它需要具有 viewBox 属性。

不要设置 SVG 的宽度高度,而是将这些值用于viewBox

改变

.attr("width", width + margin.right + margin.left)
.attr("height", height + margin.top + margin.bottom);

.attr("viewBox", [0, 0, (width + margin.right + margin.left),
                        (height + margin.top + margin.bottom)].join(' '))

Updated Codepen

如果需要,您可能需要调整 viewBox 的宽度和高度组件,以消除右侧的间隙,使其更加整齐。

关于javascript - 修复响应式 SVG 脱离 Bootstrap 网格的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43286666/

相关文章:

d3.js - 等值线图 : changing stroke color in `mouseover` shows overlapping boundaries

c++ - 为什么 qt 在 opengl 中渲染 svg 文件时比在原生中有更好的性能

SVG 蒙版渲染不正确

javascript - jQuery 只能读取一次选择选项?

javascript - 在D3中绘制不同半径的饼图(将力网络与饼图结合)

javascript - 现代浏览器不支持"DOMAttrModified"事件?

d3.js - 如何让人力车将数据聚合到几周而不是几天

javascript - Snap.svg 确定沿路径的拖动距离

javascript - 是否有使用 RxJS 的此可写流的功能更强大的实现,在处理之前等待 promise 解决?

javascript - 如何使 iframe 在粘贴时适合我的父 contenteditable div?