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>