Javascript d3.风格赢得';设置HTML元素的宽度

Javascript d3.风格赢得';设置HTML元素的宽度,javascript,html,d3.js,Javascript,Html,D3.js,这个很简单,但很奇怪: var dims = this.placeholder.node().getBoundingClientRect(); this.mapContainer = d3.select('body').append('div') .classed('map-container', true) .style({ position : 'absolute', width : dims.width, height : dims.height,

这个很简单,但很奇怪:

var dims = this.placeholder.node().getBoundingClientRect();

this.mapContainer = d3.select('body').append('div')
  .classed('map-container', true)
  .style({
    position : 'absolute',
    width : dims.width,
    height : dims.height,
    top : dims.top,
    left : dims.left
  });
dims.width
dims.height
等返回非零值,但我得到的div只是普通的

我可以在控制台中设置其他样式值(
d3.select('.map container')。样式({color:'red','background-color:'blue'})
工作正常),但是设置宽度
d3.select('.map container')。样式({width:30,top:40})
根本不起作用

这是一个直接的jsbin,它也不起作用:


这是怎么回事?

这是因为CSS样式值需要一个单位

this.mapContainer = d3.select('body').append('div')
  .classed('map-container', true)
  .style({
    position : 'absolute',
    width : dims.width + 'px',
    height : dims.height + 'px',
    top : dims.top + 'px',
    left : dims.left + 'px'
  });

工作正常。

您也可以使用
.attr()
而不是
.style()
。我认为您不能使用HTML元素(至少对于像top和left这样的东西,它们只能通过HTML中的CSS控制)。