【问题标题】:Div height outputting as 0 on page load?页面加载时div高度输出为0?
【发布时间】:2015-12-07 20:10:34
【问题描述】:

我正在构建一个 shopify 主题。我有一个实例,其中一个 div 与另一个重叠。在左 div 比右 div 短(绝对定位)的情况下,右 div 按预期与它下方的 div 重叠。

为了解决这个问题,我尝试编写一些在 jsFiddle 中工作的 js,但在我的实际站点中,div 高度输出为 0,因此该函数不起作用。对于我的生活,我无法弄清楚为什么左右 div 的高度都是 0 并且想知道是否有人能够阐明一些问题?

JS

var productImgHeight = $('.left').outerHeight(),
productInfoHeight = $('.right').outerHeight(),
gap = productInfoHeight - productImgHeight;

if (productImgHeight < productInfoHeight) {
    alert(productImgHeight);
    $('.left').css({"margin-bottom":gap+"px"});
} else {
    $('.left').css({"margin-bottom":"0"});
}

提前致谢!

【问题讨论】:

  • 你有没有把这段代码包装在ready()
  • 是的,$(document).ready$(window).load 都试过了,但都没有运气。
  • 谢谢你,我没有看到,正如我所说,我试过 window.load 可能是有一个 div 包裹整个网站被告知在页面加载时淡入,这是冲突的?
  • @Pete - 只是认为这是一个选择。刚刚看到你不是OP。所以这不是你的css,而是css。 ;-)

标签: javascript jquery


【解决方案1】:

如果您的内容位于隐藏元素中(不显示或隐藏可见性),那么您的高度将始终为 0,我发现绕过它的唯一方法是:

  • 使用具有样式的类将元素隐藏在页面之外 - position:fixed; left:100%
  • 获取负载高度
  • 用js隐藏元素并移除类
  • 淡入淡出

var productImgHeight = $('.left').outerHeight(),
  productInfoHeight = $('.right').outerHeight(),
  gap = productInfoHeight - productImgHeight;

if (productImgHeight < productInfoHeight) {
  console.log(productImgHeight);
  $('.left').css({
    "margin-bottom": gap + "px"
  });
} else {
  $('.left').css({
    "margin-bottom": "0"
  });
}


$('.container').hide().removeClass('fixed').fadeIn()
.fixed {
  position: fixed;
  left: 100%;
  top: 100%;
}
.container {
  position: relative;
}
.left {
  width: 400px;
  height: 400px;
  background-color: blue;
  opacity: 0.5;
}
.right {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 15;
  width: 300px;
  height: 500px;
  background-color: green;
  opacity: 0.5;
}
footer {
  width: 100%;
  height: 200px;
  background-color: pink;
  opacity: 0.5;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container fixed">
  <div class="left">Left
  </div>
  <div class="right">Right
  </div>
  <footer>Footer</footer>
</div>

Updated fiddle

【讨论】:

  • 感谢您的建议,我将不得不尝试一下,看看哪种方法最适合我的情况,但绝对明白我现在哪里出错了。
  • 这似乎工作除了一件事。我有一个固定的标题,它位于页面的中心,带有 css 变换:翻译 50% 50%。因此,在页面的其余部分消失之前,标题是可见的。任何想法为什么会这样?
  • 忽略我的上一条评论,我已修复!
【解决方案2】:

您的 DOM 必须完全加载才能使这些功能正常工作。将其包裹在同样由 jQuery 提供的 ready 函数中:

$(document).ready(function () {
    var productImgHeight = $('.left').outerHeight(),
        productInfoHeight = $('.right').outerHeight(),
        gap = productInfoHeight - productImgHeight;

    if (productImgHeight < productInfoHeight) {
        alert(productImgHeight);
        $('.left').css({"margin-bottom":gap+"px"});
    } else {
        $('.left').css({"margin-bottom":"0"});
    }
});

另外:确保元素没有被display: none; 隐藏,因为那样 - 它没有高度。您可以解决此设置,使其显示(不可见)、获取高度,然后再次隐藏。

$('.left').css({
    display: "block",
    opacity: 0 //Invisible to user
});
var productImgHeight = $('.left').outerHeight();
$('.left').css({
    display: "none",
    opacity: 1
});

【讨论】:

  • 感谢您的回答,我似乎无法让它工作。我认为我在页面加载时淡入淡出的功能是冲突的,因为包装整个网站的 div 被告知要显示:无,然后在页面加载时显示:块;无法让他们两个连续工作。
猜你喜欢
  • 2011-11-22
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
相关资源
最近更新 更多