绝对位置会阻止浏览器计算正确的高度。是否可以解决这个问题

发布于 2024-12-04 04:04:27 字数 283 浏览 2 评论 0原文

我正在开发一个浏览器游戏。到目前为止,我一直在使用所有绝对位置。因此我必须自己设置每个页面的高度。现在试图解决这个问题,但由于我在所有事情上都使用了绝对位置,它总是阻止浏览器计算 div 的正确高度。

是否有可能实现这一点。我的意思是,例如我有 div 和内部许多使用位置绝对功能的 div。所以我希望这个主 div 自动计算它的高度,这将是嵌套 div 高度的总和。目前我尝试的一切都失败了。如果我设置高度自动,它会将高度计算为 1 像素,如果我将主 div 的高度设置为 100%,它会计算为 557 像素。

谢谢。

I am developing a browser game. Until now i was using all position absolute. Because of that i have to set every page height myself. Now trying to pass this problem but since i used position absolute at my everything it always prevent browser to calculate correct height of div.

Is it possible to achieve this. I mean for example i have div and inside many divs which uses position absolute feature. So i want this main div to calculate its height automatically which would be sum of nested divs height. Currently whatever i tried failed. It calculates the height as 1 px if i set height auto and if i set height 100% of main div it calculates as 557 px.

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

笑脸一如从前 2024-12-11 04:04:27

不,不可能通过纯 CSS 使父元素自动调整大小以包含其所有定位的子元素。

编辑:您询问 jQuery 是否可以实现。确实如此,如果你知道孩子们何时发生变化的话。此代码假定父级是偏移父级(即,它的 position 也设置为 static 以外的值):

// element is a jQuery object
var max=0;
element.children().each(function(index, child) {
    child=$(child);
    var childPos=child.position();
    var childMax=childPos.top+child.outerHeight();
    if(childMax>max) {
        max=childMax;
    }
});
element.css({height: max+'px'});

在 JSFiddle 上尝试 jQuery 解决方案。

No, it is not possible through pure CSS to make a parent element automatically resize to contain all of its positioned children.

Edit: You asked if it was possible with jQuery. It is, if you know whenever any of the children change. This code assumes the parent is an offset parent (that is, it also has position set to something other than static):

// element is a jQuery object
var max=0;
element.children().each(function(index, child) {
    child=$(child);
    var childPos=child.position();
    var childMax=childPos.top+child.outerHeight();
    if(childMax>max) {
        max=childMax;
    }
});
element.css({height: max+'px'});

Try the jQuery solution on JSFiddle.

倾其所爱 2024-12-11 04:04:27

您必须了解 Position:absolute 将 div 置于正常流程之外。这意味着即使一个 div 位于另一个 div 内,当它被渲染时,它也会在所有 div 之外。因此,您无法计算“内部”的内容,因为它们实际上是“外部”的。

You have to understand that Position: absolute takes the div outside of it's normal flow. That means that even if a div is within another div, when it's rendered it's outside of all of them. Therefore, you can't calculate what's "inside", because they're effectively "outside".

吝吻 2024-12-11 04:04:27

您可以使用 CSS 来读取位置。我觉得你正在尝试使用 CSS 来计算顶部和左侧,如下所示:

documnent.getElementById('theDiv').style.left;

但是你应该依赖浏览器计算的偏移量。要读取准确的正确位置,请使用 offsetTopoffsetLeft

documnent.getElementById('theDiv').offsetLeft; //gives you right number.

CSS left 值与 offsetLeft 不同的原因是 CSS left 是元素最左边缘与其第一个 < 之间的空间量。 em>相对父级离开浏览器边缘。

如果您更喜欢使用 jQuery,那么有两种 jQuery 方法可以为您提供位置。一种是.position(),一种是.offset()。 offset 是适合您的选择。

You may using CSS to read position. I feel you are trying to calculate top and left using CSS like this:

documnent.getElementById('theDiv').style.left;

But you should rely on offset that browser calculates. To read the exact correct position use offsetTop and offsetLeft

documnent.getElementById('theDiv').offsetLeft; //gives you right number.

The reason CSS left value would be different from offsetLeft is CSS left is amount of space between elements very left edge and its first relative parent left not browsers edge.

if you prefer using jQuery then there is two jQuery methods that gives you position. One is .position() and one is .offset(). offset is the right one for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文