私はこれがあなたが探している答えではないことを知っています。バグを考えると、ここではポリ充満があり、私は左右のマージンを計算し始めました。 FIDDLE
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
}
}
1つのキャッチがあり、あなたがのためにマージンを計算しようとしている要素の間に空の<span></span>
タグ周器を挿入する必要があります。空のタグ(0の幅と高さがありますが、可視です)でもかまいません。
<div id="parent">
<div id="inner"></div>
<span></span>
<div id="other"></div>
</div>
あなたはが右ボックスのはを左に必要となるボックスを残したような円形の無限ループに実行しますデバイダspanタグを削除し、以前と次の要素のマージンを計算するために再帰を使用した場合余裕の値と右ボックスにはが残りますボックスの右余白の値。
これは役立つかもしれません:http://stackoverflow.com/questions/12718084/jquery-1-8-2-noncurrent-jquery-ui-outerwidth-and-outerheight-broken –
@Diodeus私は何かを誤解する必要がありますそれがどのように役立つのか分かりませんか?私はすでにjQueryの '.outerWidth()'について知っていましたので、ソースを見てみましたが、FF/Opera(少なくともflexbox)では間違ったマージン値を示しています。 – BYossarian
余白を見つける他の方法があります - jqueryには間接的に計算するのに役立つ強力な位置決め機能があります。 FlexboxはまだCSSの比較的新しいコンセプトであり、期待通りのサポートは得られないかもしれません。なぜマージンが正確に必要なのですか? – ProfileTwist