Javascript 获取页边距的绝对宽度(页边距问题:auto;)

Javascript 获取页边距的绝对宽度(页边距问题:auto;),javascript,css,margin,Javascript,Css,Margin,我试图确定元素边距的大小。我的理解是,这应该通过。然而,当margin:auto被使用。Firefox返回'0px',Opera返回'0px'或者偶尔返回'auto': 我知道我可以计算父对象的内容宽度和子对象的总宽度,并使用它们来计算边距,但我主要关注的是父对象是flexbox时的情况: 同样,这些值可能是“反向工程”的,但这会变得相对复杂(特别是如果flexbox允许包装),所以我想知道是否有人有其他想法?Firefox中有一个错误:返回了错误的值。我知道这不是您想要的答案。考虑到这个缺

我试图确定元素边距的大小。我的理解是,这应该通过。然而,当
margin:auto被使用。Firefox返回
'0px'
,Opera返回
'0px'
或者偶尔返回
'auto'

我知道我可以计算父对象的内容宽度和子对象的总宽度,并使用它们来计算边距,但我主要关注的是父对象是flexbox时的情况:


同样,这些值可能是“反向工程”的,但这会变得相对复杂(特别是如果flexbox允许包装),所以我想知道是否有人有其他想法?

Firefox中有一个错误:返回了错误的值。

我知道这不是您想要的答案。考虑到这个缺陷,这里有一个多边形填充,我开始计算左右边距

这里有一个问题,您需要在试图计算边距的元素之间插入一个空的
标记分隔符。它可以是任何空标记(宽度和高度为0,但可见)



如果要删除分隔符跨度标记,并使用递归来计算上一个和下一个元素的边距,则会运行到循环无限循环中,因为左框需要右框的左边距值,右框需要左框的右边距值

这可能会有帮助:@Diodeus我一定是误解了什么,因为我不知道这有什么帮助?我已经知道了jQuery的
.outerWidth()
,所以查看了它们的源代码,但结果表明它在FF/Opera(至少在flexbox中)中给出了错误的边距值。还有其他方法可以找到边距-jQuery有一些强大的定位函数,可以帮助您间接计算边距。Flexbox在CSS中仍然是一个相对较新的概念,并且支持可能不如您预期的好。你为什么需要这些边距?@ProfileTwist原来的问题已经用另一种方法解决了。现在我只是好奇。@BYossarian你能把这个标记为答案,这样人们就能看到正在发生的事情吗?
function getMargin(elem) {
  var parent = elem.parentNode,
    prev = elem, 
    next = elem, 
    leftEdge, 
    rightEdge;

  var pos = elem.getBoundingClientRect();
  var parentPos = parent.getBoundingClientRect();
  var parentComputed = window.getComputedStyle(parent);
  while((prev = prev.previousSibling) && !prev.getBoundingClientRect){}
  while((next = next.nextSibling) && !next.getBoundingClientRect){}
  if(prev)
    leftEdge = prev.getBoundingClientRect().right; //+ getMargin(prev).right
  else {
    leftEdge = parentPos.left + parseInt(parentComputed.getPropertyValue("padding-left")) + parseInt(parentComputed.getPropertyValue("border-left-width"))
  }
  if(next)
    rightEdge = next.getBoundingClientRect().left; //- getMargin(next).left;
  else {
    rightEdge = parentPos.right - parseInt(parentComputed.getPropertyValue("padding-right")) - parseInt(parentComputed.getPropertyValue("border-right-width"))

  }

  return { 
    left: pos.left - leftEdge, 
    right: rightEdge - pos.right 
  } 
}
<div id="parent">
  <div id="inner"></div>
  <span></span>
  <div id="other"></div>
</div>