gpt4 book ai didi

javascript - 为什么这些内联 block div 不适合它们的容器?

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:45 25 4
gpt4 key购买 nike

fiddle是这个 question 的结果.在其中,我有一个 3 div flexbox 和一个 4 div flexbox。 (此时与Angular无关)

理想情况下,flex div 会适合它们的容器,但即使它们整体比容器窄,它们也不适合(一个 div 被推出)。更令人困惑的是它们的偏差量不同。

当有4个div时,4个宽度之和为814px,而容器宽度为819px。如果我将最宽的 div 的宽度缩小 9 个像素,使总宽度为 804,它们都会按预期适合其容器。

#hbox1: width is 819, inner is 819, outer is 821
0 Object {borderWidth: 0, marginWidth: 0, paddingWidth: 0, flex: 1,
1 Object {borderWidth: 2, marginWidth: 0, paddingWidth: 0, flex: 2,
2 Object {borderWidth: 0, marginWidth: 0, paddingWidth: 0, flex: 1,
3 Object {borderWidth: 0, marginWidth: 0, paddingWidth: 0, flex: 1,
#hbox1 finalFlexTotal is 814

当有 3 个 div 时,我必须将最宽的 div 的宽度缩小 6 个像素以使它们都适合它们的容器。

#hbox2: width is 819, inner is 819, outer is 821
0 Object {borderWidth: 0, marginWidth: 0, paddingWidth: 0, flex: 1,
1 Object {borderWidth: 2, marginWidth: 0, paddingWidth: 0, flex: 2,
2 Object {borderWidth: 0, marginWidth: 0, paddingWidth: 0, flex: 1,
#hbox2 finalFlexTotal is 815

我已经考虑了 borderWidth、marginWidth 和 paddingWidth 为 0。如果不进行某种随机调整,为什么 div 不适合它们的容器?

以下是代码和 html,以防 fiddle 消失:

<html>
<body>
<div id="hbox1" style="border: 1px solid red">
<div flex=1 style="display:inline-block;height:100%">This is the A Box</div>
<div flex=2 style="border:1px solid black;display:inline-block;height:100%">This is the B Box</div>
<div flex=1 style="display:inline-block;height:100%">This is the C Box</div>
<div flex=1 style="display:inline-block;height:100%">This is the D Box</div>
</div>
<div id="hbox2" style="border: 1px solid red;margin-top:40px">
<div flex=1 style="display:inline-block;height:100%">This is the A Box</div>
<div flex=2 style="border:1px solid black;display:inline-block;height:100%">This is the B Box</div>
<div flex=1 style="display:inline-block;height:100%">This is the C Box</div>
</div><script type="text/javascript" src="jquery-1.10.2.js" />
<script type="text/javascript">
function flexBoxIt(selector) {
var $node,
index,
flexValue,
flexInfo = [],
totalFlex = 0,
finalFlexTotal = 0;

$(selector).children('div').each(function (index) {
$node = $(this);
flexValue = $node.attr("flex");
flexValue = flexValue ? parseInt(flexValue, 10) : 1,
flexInfo[index] = {
"borderWidth": parseInt($node.css('borderLeftWidth'), 10) + parseInt($node.css('borderRightWidth'), 10),
"marginWidth": parseInt($node.css('marginLeft'), 10) + parseInt($node.css('marginRight'), 10),
"paddingWidth": parseInt($node.css('paddingLeft'), 10) + parseInt($node.css('paddingRight'), 10),
"flex": flexValue,
"$jq": $node
};
totalFlex += flexValue;
});
width = $(selector).width();
console.log("%s: width is %d, inner is %d, outer is %d", selector, width, $(selector).innerWidth(), $(selector).outerWidth(true));
for (index in flexInfo) {
node = flexInfo[index];
node.width = Math.floor(width * node.flex / totalFlex - node.borderWidth);
finalFlexTotal += node.width;
console.log(index, node);
node.$jq.css("width", node.width + "px");
}
console.log("%s finalFlexTotal is %d", selector, finalFlexTotal);
}

flexBoxIt("#hbox1");
flexBoxIt("#hbox2");
</script>
</body>
</html>

最佳答案

元素之间的空间会导致额外的宽度。您需要将所有元素放在一行中,如下所示:

<div flex=1 style="...">This is the A Bo</div><div ...>This is the B Box</div>...

关于javascript - 为什么这些内联 block div 不适合它们的容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18764042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com